cmake_minimum_required(VERSION 3.13)

project(Dekko VERSION 0.5.2)

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

set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_AUTOMOC ON)

find_package(Qt5
    COMPONENTS
    Core
    DBus
    Gui
    LinguistTools
    Quick
    QuickControls2
    Svg
    WebEngine
    Widgets
    Xml
    REQUIRED
)

find_package(Python
    COMPONENTS
    Interpreter
    REQUIRED
)

find_package(PkgConfig)
find_package(QuickFlux)

if(PkgConfig_FOUND)
    pkg_check_modules(LOMIRI_CONNECTIVITY lomiri-connectivity-qt1)
    pkg_search_module(QmfClient QmfClient-qt5)
    pkg_search_module(QmfMessageServer QmfMessageServer-qt5)
endif()
set(Qmf_FOUND FALSE)
if(QmfClient_FOUND AND QmfMessageServer_FOUND)
    set(Qmf_FOUND TRUE)
endif()

option(CLICK_MODE "Build in a click-compatible manner" ON)

if(CLICK_MODE)
    set(CMAKE_INSTALL_LIBDIR "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
    set(CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_LIBDIR}/bin")
endif()

include(GNUInstallDirs)

option(DEKKO_SERVER_AS_THREAD "Run the messaging server as a qthread instead of a seperate qprocess" OFF)
option(DEKKO_ENABLE_QMF_LOGGING "Enable qmf internal logging" ON)
option(DEKKO_UNCONFINED "Unused: Allow to run without worrying about platform confinement - useful for debugging or running on tradition DE's." OFF)
option(DEKKO_ENABLE_UOA "Unused, EXPERIMENTAL: enables online accounts integration" OFF)
option(DEKKO_ENABLE_IMAP "Unused: Enables IMAP service" ON)
option(DEKKO_ENABLE_POP "Unused: Enables POP3 service" ON)
option(DEKKO_ENABLE_UI "Enable Lomiri UI Toolkit user interface" ON)

option(DEKKO_SYSTEM_QMF "Whether a system-installed QMF should be used, otherwise a vendored version is built & installed" "${Qmf_FOUND}")
option(DEKKO_SYSTEM_QUICKFLUX "Whether a system-installed quickflux should be used, otherwise a vendored version is built & installed" "${QuickFlux_FOUND}")

set(DEKKO_PYTHON_DIR "" CACHE STRING "Path with python packages that should be included")

if(CLICK_MODE)
    set(QT_IMPORTS_DIR ${CMAKE_INSTALL_LIBDIR})
elseif(DEFINED QT_IMPORTS_DIR)
    message(STATUS "Qt imports dir already set. Installing QML plugins to ${QT_IMPORTS_DIR}")
elseif(EXISTS "/etc/debian_version")
    set(QT_IMPORTS_DIR ${CMAKE_INSTALL_LIBDIR}/qt5/qml)
else()
    get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION)
    execute_process(
        COMMAND ${QMAKE_EXECUTABLE} -query QT_INSTALL_QML
        OUTPUT_VARIABLE QT_IMPORTS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
    )
    file(TO_CMAKE_PATH "${QT_IMPORTS_DIR}" QT_IMPORTS_DIR)
endif()

set(DEKKO_DATA_DIR ${CMAKE_INSTALL_FULL_DATADIR}/dekko)
if(CLICK_MODE)
    set(DEKKO_PLUGINS_DIR ${CMAKE_INSTALL_FULL_BINDIR}/plugins)
else()
    set(DEKKO_PLUGINS_DIR ${CMAKE_INSTALL_FULL_LIBDIR}/dekko/plugins)
endif(CLICK_MODE)

configure_file(config.hpp.in ${CMAKE_BINARY_DIR}/config.hpp @ONLY)

set(DEKKO_INSTALL_PRIVATE_LIBDIR ${CMAKE_INSTALL_LIBDIR})
if (NOT CLICK_MODE)
    set(DEKKO_INSTALL_PRIVATE_LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR}/dekko)
    set(CMAKE_INSTALL_RPATH ${DEKKO_INSTALL_PRIVATE_LIBDIR})
endif()

message(AUTHOR_WARNING "Should we keep --unresolved-symbols=report-all here? It's nice for finding linking mistakes")
add_link_options(-Wl,--unresolved-symbols=report-all)

add_subdirectory(snap-standard-paths EXCLUDE_FROM_ALL)

# All-headers
add_subdirectory(super-macros EXCLUDE_FROM_ALL)

# Help it find snap-standard-paths, don't need examples
set(SSP_LIBRARIES snap-standard-paths)
set(SSP_INCLUDE_DIRECTORY ${snap-standard-paths_SOURCE_DIR})
set(MAZDB_EXAMPLES OFF)
add_subdirectory(maz-db)

add_subdirectory(notify)

# Don't need example
set(RTE_EXAMPLE OFF)
add_subdirectory(richtext-editor)

add_subdirectory(upstream)

if(NOT DEKKO_SYSTEM_QMF)
    set(QmfMessageServer_LIBRARIES)
    set(QmfClient_LIBRARIES
        qmfclient5
        qmfmessageserver5
    )
    # QMF doesn't set these, so we must manually specify these
    set(QmfClient_INCLUDE_DIRS
        ${qmf_SOURCE_DIR}/libraries/qmfclient
        ${qmf_SOURCE_DIR}/libraries/qmfclient/support
    )
    set(QmfMessageServer_INCLUDE_DIRS
        ${qmf_SOURCE_DIR}/libraries/qmfmessageserver
    )
endif()

add_subdirectory(data)
add_subdirectory(i18n)
add_subdirectory(plugins)
add_subdirectory(Dekko)
