# SPDX-FileCopyrightText: 2013-2025 Laurent Montel <montel@kde.org>
# SPDX-License-Identifier: BSD-3-Clause

if(TARGET KF6::UserFeedbackWidgets)
    set(WITH_KUSERFEEDBACK true)
endif()

configure_file(sieveeditor-version.h.in ${CMAKE_CURRENT_BINARY_DIR}/sieveeditor-version.h @ONLY)

add_library(libsieveeditor)

configure_file(config-pim-sieve-editor.h.in ${CMAKE_CURRENT_BINARY_DIR}/config-pim-sieve-editor.h)

kconfig_add_kcfg_files(libsieveeditor settings/sieveeditorglobalconfig.kcfgc)

target_sources(
    libsieveeditor
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/importimapsettingwizard.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/importimapsettingsearchpage.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/importimapsettingnofoundpage.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/importimapsettingprogresspage.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/importimapsettingfinishpage.cpp
)

target_sources(
    libsieveeditor
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/checks/importimapsettingsakonadicheckjob.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/checks/importimapsettingsthunderbirdcheckjob.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/checks/abstractimapsettingscheckjob.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/checks/abstractimapsettingspassword.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/importwizard/checks/importimapsettingsakonadipassword.cpp
)

if(TARGET KF6::UserFeedbackWidgets)
    target_sources(
        libsieveeditor
        PRIVATE
            userfeedback/userfeedbackmanager.cpp
            userfeedback/userfeedbackmanager.h
    )
endif()

target_sources(
    libsieveeditor
    PRIVATE
        sieveeditormainwindow.cpp
        serversievesettingsdialog.cpp
        serversievesettings.cpp
        sieveeditormainwidget.cpp
        sieveeditorconfiguredialog.cpp
        sieveeditorscriptmanagerwidget.cpp
        sieveeditorutil.cpp
        serversievelistwidget.cpp
        sieveeditorconfigureserverwidget.cpp
        sieveeditormanagesievewidget.cpp
        sieveeditorpagewidget.cpp
        sieveeditortabwidget.cpp
        sieveeditorcentralwidget.cpp
        sieveeditorconfigureserverpage.cpp
        sieveeditorbookmarks.cpp
        sieveeditoremptytabwidgetlabel.cpp
        readserversieveconfigjob.cpp
        sieveeditorsavepasswordjob.cpp
        sieveeditor.qrc
        libsieveeditor_private_export.h
        sieveeditortabwidget.h
        sieveeditoremptytabwidgetlabel.h
        sieveeditormainwindow.h
        sieveeditormainwidget.h
        sieveeditorconfiguredialog.h
        readserversieveconfigjob.h
        sieveeditorconfigureserverwidget.h
        serversievesettings.h
        serversievelistwidget.h
        sieveeditorscriptmanagerwidget.h
        sieveeditorcentralwidget.h
        sieveeditorutil.h
        serversievesettingsdialog.h
        sieveeditormanagesievewidget.h
        importwizard/importimapsettingfinishpage.h
        importwizard/checks/abstractimapsettingscheckjob.h
        importwizard/checks/importimapsettingsakonadicheckjob.h
        importwizard/checks/importimapsettingsthunderbirdcheckjob.h
        importwizard/checks/importimapsettingsakonadipassword.h
        importwizard/checks/abstractimapsettingspassword.h
        importwizard/importimapsettingwizard.h
        importwizard/importimapsettingprogresspage.h
        importwizard/importimapsettingnofoundpage.h
        importwizard/importimapsettingsearchpage.h
        sieveeditorsavepasswordjob.h
        sieveeditorbookmarks.h
        sieveeditorpagewidget.h
        sieveeditorconfigureserverpage.h
        sievepurposemenuwidget.cpp
        sievepurposemenuwidget.h
        whatsnew/whatsnewtranslations.h
        whatsnew/whatsnewtranslations.cpp
)

ki18n_wrap_ui(libsieveeditor
    ui/serversievesettings.ui
    ui/sieveeditorconfigureserverwidget.ui
)
ecm_qt_declare_logging_category(libsieveeditor HEADER sieveeditor_debug.h
	IDENTIFIER SIEVEEDITOR_LOG
	CATEGORY_NAME org.kde.pim.sieveeditor
	OLD_CATEGORY_NAMES log_sieveeditor
	DESCRIPTION "sieveeditor (sieveeditor)" EXPORT SIEVEEDITOR
)

if(COMPILE_WITH_UNITY_CMAKE_SUPPORT)
    set_target_properties(
        libsieveeditor
        PROPERTIES
            UNITY_BUILD
                ON
    )
endif()
generate_export_header(libsieveeditor BASE_NAME libsieveeditor)

set(libsieveeditor_userfeedback_LIB)
if(TARGET KF6::UserFeedbackWidgets)
    set(libsieveeditor_userfeedback_LIB KF6::UserFeedbackWidgets)
endif()

target_link_libraries(
    libsieveeditor
    PRIVATE
        KPim6::MailTransport
        KF6::Bookmarks
        KF6::I18n
        KF6::XmlGui
        KF6::BookmarksWidgets
        KPim6::PimCommon
        KPim6::KSieveUi
        KPim6::KManageSieve
        KF6::WindowSystem
        ${libsieveeditor_userfeedback_LIB}
)
target_link_libraries(libsieveeditor PRIVATE qt6keychain)

set_target_properties(
    libsieveeditor
    PROPERTIES
        OUTPUT_NAME
            sieveeditor
        VERSION
            ${KDEPIM_LIB_VERSION}
        SOVERSION
            ${KDEPIM_LIB_SOVERSION}
)

add_executable(sieveeditor)

# application icon, in all sizes needed to have e.g. nice Windows icons, too
set(ICON_FILES
    icons/sc-apps-sieveeditor.svg
    icons/16-apps-sieveeditor.png
    icons/22-apps-sieveeditor.png
    icons/32-apps-sieveeditor.png
    icons/48-apps-sieveeditor.png
    icons/64-apps-sieveeditor.png
)

# Add icon files to the application's source files to have CMake bundle them in the executable.
ecm_add_app_icon(ICONS_SOURCES ICONS ${ICON_FILES})
target_sources(
    sieveeditor
    PRIVATE
        main.cpp
        ${ICONS_SOURCES}
)

target_link_libraries(
    sieveeditor
    KF6::CoreAddons
    KF6::Crash
    libsieveeditor
    KF6::XmlGui
    KF6::I18n
    ${libsieveeditor_userfeedback_LIB}
    KF6::IconThemes
    KF6::WindowSystem
)

if(TARGET KF6::DBusAddons)
    target_link_libraries(sieveeditor KF6::DBusAddons)
else()
    target_link_libraries(sieveeditor KDAB::kdsingleapplication)
    if(NOT WIN32 AND NOT APPLE)
        target_link_libraries(sieveeditor Qt::GuiPrivate)
    endif()
endif()
install(
    TARGETS
        sieveeditor
        ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
)

install(PROGRAMS org.kde.sieveeditor.desktop DESTINATION ${KDE_INSTALL_APPDIR})

install(FILES settings/sieveeditorglobalconfig.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR})
install(
    TARGETS
        libsieveeditor
        ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
    LIBRARY
        NAMELINK_SKIP
)

if(BUILD_TESTING)
    add_subdirectory(importwizard/autotests)
    add_subdirectory(importwizard/tests)
endif()

install(FILES org.kde.sieveeditor.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
ecm_qt_install_logging_categories(EXPORT SIEVEEDITOR FILE sieveeditor.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR})

add_subdirectory(icons)

# See https://cmake.org/cmake/help/v3.15/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.html
if(APPLE)
    set_property(
        TARGET
            sieveeditor
        PROPERTY
            MACOSX_BUNDLE_INFO_PLIST
                ${CMAKE_CURRENT_SOURCE_DIR}/data/MacOSXBundleInfo.plist.in
    )

    # These are substituted by CMake into plist.in.
    set(MACOSX_BUNDLE_DISPLAY_NAME "SieveEditor")
    set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.kde.sieveeditor")
    set(MACOSX_BUNDLE_BUNDLE_NAME "SieveEditor")
    set(MACOSX_BUNDLE_DISPLAY_NAME "SieveEditor")
    set(MACOSX_BUNDLE_INFO_STRING "SieveEditor - Sieve Editor")
    set(MACOSX_BUNDLE_LONG_VERSION_STRING "SieveEditor ${PIM_VERSION}")
    set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${PIM_VERSION}")
    set(MACOSX_BUNDLE_BUNDLE_VERSION "${PIM_VERSION}")
    set(MACOSX_BUNDLE_COPYRIGHT "2013-2025 The SieveEditor Authors")
endif()
