+
+ find_package(LibsnoreQt5 0.7.0 QUIET)
+ set_package_properties(LibsnoreQt5 PROPERTIES TYPE OPTIONAL
+ URL "https://projects.kde.org/projects/playground/libs/snorenotify"
+ DESCRIPTION "a cross-platform notification framework"
+ PURPOSE "Enable support for the snorenotify framework"
+ )
+ if (LibsnoreQt5_FOUND)
+ find_package(LibsnoreSettingsQt5 QUIET)
+ set_package_properties(LibsnoreSettingsQt5 PROPERTIES TYPE OPTIONAL
+ URL "https://projects.kde.org/projects/playground/libs/snorenotify"
+ DESCRIPTION "a cross-platform notification framework"
+ PURPOSE "Enable support for the snorenotify framework"
+ )
+ endif()
+
+ if (WITH_WEBENGINE)
+ find_package(Qt5WebEngine QUIET)
+ set_package_properties(Qt5WebEngine PROPERTIES TYPE RECOMMENDED
+ URL "https://www.qt.io/"
+ DESCRIPTION "a WebEngine implementation for Qt"
+ PURPOSE "Needed for displaying previews for URLs in chat"
+ )
+ if (Qt5WebEngine_FOUND)
+ find_package(Qt5WebEngineWidgets QUIET)
+ set_package_properties(Qt5WebEngineWidgets PROPERTIES TYPE RECOMMENDED
+ URL "https://www.qt.io/"
+ DESCRIPTION "widgets for Qt's WebEngine implementation"
+ PURPOSE "Needed for displaying previews for URLs in chat"
+ )
+ endif()
+ endif()
+
+ if (WITH_WEBENGINE AND Qt5WebEngineWidgets_FOUND)
+ set(HAVE_WEBENGINE true)
+ endif()
+ add_feature_info("WITH_WEBENGINE, QtWebEngine and QtWebEngineWidgets modules" HAVE_WEBENGINE "Support showing previews for URLs in chat")
+
+ if (NOT HAVE_WEBENGINE)
+ if (WITH_WEBKIT)
+ find_package(Qt5WebKit QUIET)
+ set_package_properties(Qt5WebKit PROPERTIES TYPE OPTIONAL
+ URL "https://www.qt.io/"
+ DESCRIPTION "a WebKit implementation for Qt"
+ PURPOSE "Needed for displaying previews for URLs in chat"
+ )
+ if (Qt5WebKit_FOUND)
+ find_package(Qt5WebKitWidgets QUIET)
+ set_package_properties(Qt5WebKitWidgets PROPERTIES TYPE OPTIONAL
+ URL "https://www.qt.io/"
+ DESCRIPTION "widgets for Qt's WebKit implementation"
+ PURPOSE "Needed for displaying previews for URLs in chat"
+ )
+ endif()
+ endif()
+
+ if (WITH_WEBKIT AND Qt5WebKitWidgets_FOUND)
+ set(HAVE_WEBKIT true)
+ endif()
+ add_feature_info("WITH_WEBKIT, QtWebKit and QtWebKitWidgets modules" HAVE_WEBKIT "Support showing previews for URLs in chat (legacy)")
+ endif()
+
+ # KDE Frameworks
+ ################
+
+ # extra-cmake-modules
+ if (WITH_KDE)
+ set(ecm_find_type "REQUIRED")
+ find_package(ECM NO_MODULE REQUIRED)
+ else()
+ # Even with KDE integration disabled, we optionally use tier1 frameworks if we find them
+ set(ecm_find_type "RECOMMENDED")
+ find_package(ECM NO_MODULE QUIET)
+ endif()
+
+ set_package_properties(ECM PROPERTIES TYPE ${ecm_find_type}
+ URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules"
+ DESCRIPTION "extra modules for CMake, maintained by the KDE project"
+ PURPOSE "Required to find KDE Frameworks components"
+ )
+
+ if (ECM_FOUND)
+ list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
+ if (WITH_KDE)
+ find_package(KF5 REQUIRED COMPONENTS ConfigWidgets CoreAddons Notifications NotifyConfig Sonnet TextWidgets WidgetsAddons XmlGui)
+ set_package_properties(KF5 PROPERTIES TYPE REQUIRED
+ URL "http://www.kde.org"
+ DESCRIPTION "KDE Frameworks"
+ PURPOSE "Required for integration into the Plasma desktop"
+ )
+ message(STATUS "Found KDE Frameworks ${KF5_VERSION}")
+ endif()
+
+ # Optional KF5 tier1 components
+ find_package(KF5Sonnet QUIET)
+ set_package_properties(KF5Sonnet PROPERTIES TYPE RECOMMENDED
+ URL "http://api.kde.org/frameworks-api/frameworks5-apidocs/sonnet/html"
+ DESCRIPTION "framework for providing spell-checking capabilities"
+ PURPOSE "Enables spell-checking support in input widgets"
+ )
+ endif()
+endif()
+
+if (BUILD_CORE)
+ find_package(Qca-qt5 2.0 QUIET)
+ set_package_properties(Qca-qt5 PROPERTIES TYPE RECOMMENDED
+ URL "https://projects.kde.org/projects/kdesupport/qca"
+ DESCRIPTION "Qt Cryptographic Architecture"
+ PURPOSE "Required for encryption support"
+ )
+
+ if (WITH_LDAP)
+ find_package(Ldap QUIET)
+ set_package_properties(Ldap PROPERTIES TYPE OPTIONAL
+ URL "http://www.openldap.org/"
+ DESCRIPTION "LDAP (Lightweight Directory Access Protocol) libraries"
+ PURPOSE "Enables core user authentication via LDAP"
+ )
+ endif()
+endif()
+
+# Non-Qt-based packages
+#####################################################################
+
+find_package(Boost 1.56 REQUIRED)
+set_package_properties(Boost PROPERTIES TYPE REQUIRED
+ URL "https://www.boost.org/"
+ DESCRIPTION "Boost libraries for C++"
+)
+
+find_package(ZLIB REQUIRED)
+set_package_properties(ZLIB PROPERTIES TYPE REQUIRED
+ URL "http://www.zlib.net"
+ DESCRIPTION "a popular compression library"
+ PURPOSE "Used for protocol compression"
+)
+
+if (NOT WIN32)
+ # Needed for generating backtraces
+ find_package(Backtrace QUIET)
+ set_package_properties(Backtrace PROPERTIES TYPE RECOMMENDED
+ DESCRIPTION "a header (and possibly library) for inspecting backtraces"
+ PURPOSE "Used for generating backtraces in case of a crash"
+ )
+endif()
+
+# Setup unit testing
+#####################################################################
+
+option(BUILD_TESTING "Enable unit tests" OFF)
+add_feature_info(BUILD_TESTING BUILD_TESTING "Build unit tests")
+
+if (BUILD_TESTING)
+ find_package(GTest QUIET)
+ set_package_properties(GTest PROPERTIES TYPE REQUIRED
+ DESCRIPTION "Google's unit testing framework"
+ PURPOSE "Required for building unit tests"
+ )
+
+ find_package(Qt5Test QUIET)
+ set_package_properties(Qt5Test PROPERTIES TYPE REQUIRED
+ DESCRIPTION "unit testing library for the Qt5 framework"
+ PURPOSE "Required for building unit tests"
+ )
+ enable_testing()
+endif()
+
+# Check for SSL support in Qt
+#####################################################################
+
+cmake_push_check_state(RESET)
+set(CMAKE_REQUIRED_LIBRARIES Qt5::Core)
+check_cxx_source_compiles("
+ #include \"qglobal.h\"
+ #if defined QT_NO_SSL
+ # error \"No SSL support\"
+ #endif
+ int main() {}"
+ HAVE_SSL)
+cmake_pop_check_state()
+
+if (HAVE_SSL)
+ add_definitions(-DHAVE_SSL)
+endif()
+add_feature_info("SSL support in Qt" HAVE_SSL "Use secure network connections")
+
+# Additional compile settings
+#####################################################################
+
+# Needed to compile with mingw without kde
+if (MINGW AND NOT WITH_KDE)