Warning, /network/ruqola/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0002 # SPDX-License-Identifier: BSD-3-Clause
0003
0004 cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
0005 set(RUQOLA_VERSION "2.1.0")
0006 # TODO: update it in each release version
0007 set(RUQOLA_RELEASE_VERSION "24.01.30")
0008
0009 project(Ruqola VERSION ${RUQOLA_VERSION})
0010 set(CMAKE_CXX_STANDARD 17)
0011 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0012
0013 set(KF_MIN_VERSION "5.108.0")
0014
0015 # Do NOT add quote
0016 set(RUQOLA_DEV_VERSION )
0017
0018 # add an extra space
0019 if(DEFINED RUQOLA_DEV_VERSION)
0020 set(RUQOLA_DEV_VERSION " ${RUQOLA_DEV_VERSION}")
0021 endif()
0022
0023 set(RUQOLA_VERSION_STRING "${RUQOLA_VERSION}${RUQOLA_DEV_VERSION}")
0024
0025
0026 find_package(ECM ${KF_MIN_VERSION} CONFIG REQUIRED)
0027 set(CMAKE_MODULE_PATH ${Ruqola_SOURCE_DIR}/cmake/modules ${ECM_MODULE_PATH})
0028
0029 include(KDECompilerSettings NO_POLICY_SCOPE)
0030 include(KDEInstallDirs)
0031 include(KDECMakeSettings)
0032 include(ECMInstallIcons)
0033 include(ECMQtDeclareLoggingCategory)
0034 include(ECMAddTests)
0035 include(GenerateExportHeader)
0036 include(FeatureSummary)
0037 include(CheckIncludeFileCXX)
0038 include(KDEGitCommitHooks)
0039 include(ECMDeprecationSettings)
0040 include(KDEClangFormat)
0041 include(ECMGenerateHeaders)
0042 include(ECMSetupVersion)
0043
0044 option(OPTION_BUILD_PYTHON_BINDINGS "Build python bindings (experimental)" OFF)
0045 option(OPTION_SELENIUMWEBDRIVER_SUPPORT "Add selenium driver test (experimental)" OFF)
0046 option(OPTION_USE_SIZEHINT_CACHE_SUPPORT "Add sizehint cache" ON)
0047 option(OPTION_USE_ROUNDED_RECT_PIXMAP "Show avatar in a rounded rect" ON)
0048
0049 if (OPTION_USE_ROUNDED_RECT_PIXMAP)
0050 set(USE_ROUNDED_RECT_PIXMAP true)
0051 endif()
0052
0053 if (OPTION_USE_SIZEHINT_CACHE_SUPPORT)
0054 set(USE_SIZEHINT_CACHE_SUPPORT true)
0055 endif()
0056
0057 if (OPTION_BUILD_PYTHON_BINDINGS)
0058 set(CMAKE_MODULE_PATH ${Ruqola_SOURCE_DIR}/cmake/Python ${ECM_MODULE_PATH})
0059 endif()
0060
0061 option(USE_UNITY_CMAKE_SUPPORT "Use UNITY cmake support (speedup compile time)" OFF)
0062
0063 set(COMPILE_WITH_UNITY_CMAKE_SUPPORT false)
0064 if (USE_UNITY_CMAKE_SUPPORT)
0065 set(COMPILE_WITH_UNITY_CMAKE_SUPPORT true)
0066 endif()
0067 option(USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF) # Set to OFF when using clazy and such
0068 set(COMPILE_WITH_CMAKE_PCH_SUPPORT false)
0069 macro(ruqola_target_precompile_headers)
0070 if (USE_PRECOMPILED_HEADERS)
0071 set(COMPILE_WITH_CMAKE_PCH_SUPPORT true)
0072
0073 if (COMPILE_WITH_CMAKE_PCH_SUPPORT)
0074 target_precompile_headers(${ARGV})
0075 endif()
0076 endif()
0077 endmacro()
0078
0079 option(PLUGINS_AUTHENTICATION_BASED_ON_O2 "Build authentication based on o2 lib (experimental)" OFF)
0080 if (NOT WIN32 AND NOT APPLE)
0081 option(UNITY_SUPPORT "Build unity support" ON)
0082 else()
0083 set(UNITY_SUPPORT OFF)
0084 endif()
0085
0086 if (UNITY_SUPPORT)
0087 add_definitions(-DUNITY_SUPPORT)
0088 endif()
0089 set(KTEXTADDONS_MIN_VERSION "1.5.2")
0090 set(REQUIRED_QT_VERSION "5.15.2")
0091
0092 set(KLLMWIDGETS_VERSION "0.1.0")
0093
0094 if (QT_MAJOR_VERSION STREQUAL "6")
0095 set(QT_REQUIRED_VERSION "6.6.0")
0096 set(KF_MIN_VERSION "5.246.0")
0097 set(KF_MAJOR_VERSION "6")
0098 set(KTEXTADDONS_MIN_VERSION "1.5.3")
0099 else()
0100 set(KF_MAJOR_VERSION "5")
0101 endif()
0102
0103 find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Core Gui Widgets WebSockets Network NetworkAuth MultimediaWidgets Sql)
0104
0105 find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS
0106 CoreAddons
0107 I18n
0108 Crash
0109 Notifications
0110 IconThemes
0111 SyntaxHighlighting
0112 NotifyConfig
0113 ItemViews
0114 IdleTime
0115 Prison
0116 Archive
0117 Codecs
0118 )
0119
0120
0121 find_package(KF${KF_MAJOR_VERSION}TextTranslator ${KTEXTADDONS_MIN_VERSION} CONFIG)
0122 set_package_properties(KF${KF_MAJOR_VERSION}TextTranslator PROPERTIES DESCRIPTION
0123 "Add support for text translation (ktextaddons)"
0124 TYPE OPTIONAL
0125 )
0126 if (TARGET KF${KF_MAJOR_VERSION}::TextTranslator)
0127 set(HAVE_TEXT_TRANSLATOR TRUE)
0128 endif()
0129
0130 find_package(KF${KF_MAJOR_VERSION}TextAutoCorrectionWidgets ${KTEXTADDONS_MIN_VERSION} CONFIG)
0131 set_package_properties(KF${KF_MAJOR_VERSION}TextAutoCorrectionWidgets PROPERTIES DESCRIPTION
0132 "Add support for text auto correction (ktextaddons)"
0133 TYPE OPTIONAL
0134 )
0135 if (TARGET KF${KF_MAJOR_VERSION}::TextAutoCorrectionWidgets)
0136 set(HAVE_TEXT_AUTOCORRECTION_WIDGETS TRUE)
0137 endif()
0138
0139 find_package(KF${KF_MAJOR_VERSION}TextEditTextToSpeech ${KTEXTADDONS_MIN_VERSION} CONFIG)
0140 set_package_properties(KF${KF_MAJOR_VERSION}TextEditTextToSpeech PROPERTIES DESCRIPTION
0141 "Add support for text to speech (ktextaddons)"
0142 TYPE OPTIONAL
0143 )
0144 if (TARGET KF${KF_MAJOR_VERSION}::TextEditTextToSpeech)
0145 set(HAVE_TEXT_TO_SPEECH TRUE)
0146 endif()
0147
0148 find_package(KF${KF_MAJOR_VERSION}TextEmoticonsWidgets ${KTEXTADDONS_MIN_VERSION} CONFIG)
0149 set_package_properties(KF${KF_MAJOR_VERSION}TextEmoticonsWidgets PROPERTIES DESCRIPTION
0150 "Add text emoticons support (ktextaddons)"
0151 TYPE OPTIONAL
0152 )
0153
0154 if (${KF${KF_MAJOR_VERSION}TextEmoticonsWidgets_VERSION} VERSION_GREATER_EQUAL 1.5.44)
0155 set(HAVE_TEXTADDONS_TEXTEMOTICON_EXCLUDEEMOTICON_SUPPORT TRUE)
0156 else()
0157 if (${KF${KF_MAJOR_VERSION}TextEmoticonsWidgets_VERSION} VERSION_GREATER_EQUAL 1.5.3)
0158 if (${KF${KF_MAJOR_VERSION}TextEmoticonsWidgets_VERSION} VERSION_LESS_EQUAL 1.5.30)
0159 set(HAVE_TEXTADDONS_TEXTEMOTICON_EXCLUDEEMOTICON_SUPPORT TRUE)
0160 endif()
0161 endif()
0162 endif()
0163
0164 find_package(KF${KF_MAJOR_VERSION}TextUtils ${KTEXTADDONS_MIN_VERSION} CONFIG)
0165 set_package_properties(KF${KF_MAJOR_VERSION}TextUtils PROPERTIES DESCRIPTION
0166 "Add utils text functions (ktextaddons)"
0167 TYPE OPTIONAL
0168 )
0169
0170 if (TARGET KF${KF_MAJOR_VERSION}::TextUtils)
0171 set(HAVE_TEXT_UTILS TRUE)
0172 endif()
0173
0174
0175 find_package(KF${KF_MAJOR_VERSION}TextCustomEditor ${KTEXTADDONS_MIN_VERSION} CONFIG)
0176 set_package_properties(KF${KF_MAJOR_VERSION}TextCustomEditor PROPERTIES DESCRIPTION
0177 "Add text custom editor (ktextaddons)"
0178 TYPE OPTIONAL
0179 )
0180
0181 if (TARGET KF${KF_MAJOR_VERSION}::TextCustomEditor)
0182 set(HAVE_TEXT_CUSTOM_EDITOR TRUE)
0183 endif()
0184
0185 if (NOT WIN32 AND NOT APPLE)
0186 find_package(KF${KF_MAJOR_VERSION}DBusAddons ${KF_MIN_VERSION} CONFIG REQUIRED)
0187 endif()
0188
0189
0190 find_package(KF${KF_MAJOR_VERSION}XmlGui ${KF_MIN_VERSION} CONFIG REQUIRED)
0191 find_package(KF${KF_MAJOR_VERSION}Config ${KF_MIN_VERSION} CONFIG REQUIRED)
0192 find_package(KF${KF_MAJOR_VERSION}KIO ${KF_MIN_VERSION} CONFIG REQUIRED)
0193 find_package(KF${KF_MAJOR_VERSION}Sonnet ${KF_MIN_VERSION} CONFIG REQUIRED)
0194 find_package(KF${KF_MAJOR_VERSION}TextWidgets ${KF_MIN_VERSION} CONFIG REQUIRED)
0195 find_package(KF${KF_MAJOR_VERSION}Purpose ${KF_MIN_VERSION} CONFIG)
0196
0197 find_package(KF${KF_MAJOR_VERSION}DocTools ${KF_MIN_VERSION})
0198 set_package_properties(KF${KF_MAJOR_VERSION}DocTools PROPERTIES DESCRIPTION
0199 "Tools to generate documentation"
0200 TYPE OPTIONAL
0201 )
0202
0203 find_package(KLLMWidgets ${KLLMWIDGETS_VERSION})
0204 set_package_properties(KLLMWidgets PROPERTIES
0205 TYPE OPTIONAL
0206 PURPOSE "Required for building IA plugins support"
0207 DESCRIPTION "Use local IA plugin"
0208 URL https://invent.kde.org/utilities/alpaka
0209 )
0210
0211 if (QT_MAJOR_VERSION STREQUAL "6")
0212 find_package(KF6StatusNotifierItem ${KF_MIN_VERSION} REQUIRED)
0213 endif()
0214
0215 find_package(Qt${QT_MAJOR_VERSION}Keychain CONFIG)
0216 set_package_properties(Qt${QT_MAJOR_VERSION}Keychain PROPERTIES
0217 DESCRIPTION "Provides support for secure credentials storage"
0218 URL "https://github.com/frankosterfeld/qtkeychain"
0219 TYPE REQUIRED)
0220
0221 if (Qt${QT_MAJOR_VERSION}Keychain_VERSION VERSION_LESS 0.14.2)
0222 if (QT_MAJOR_VERSION STREQUAL "6")
0223 MESSAGE(STATUS "Qt${QT_MAJOR_VERSION}KeyChain version is less 0.14.2. It will not support KWallet 6... It will not able to load password. Please update it.")
0224 endif()
0225 endif()
0226
0227 if (OPTION_SELENIUMWEBDRIVER_SUPPORT)
0228 find_package(SeleniumWebDriverATSPI)
0229 set_package_properties(SeleniumWebDriverATSPI PROPERTIES PURPOSE "Needed for GUI tests" URL "https://invent.kde.org/sdk/selenium-webdriver-at-spi" TYPE OPTIONAL)
0230 endif()
0231
0232 if (QT_MAJOR_VERSION STREQUAL "6")
0233 find_package(KF6UserFeedback ${KF_MIN_VERSION} CONFIG)
0234 set(HAVE_KUSERFEEDBACK ${KF6UserFeedback_FOUND})
0235 set_package_properties(KF6UserFeedback PROPERTIES DESCRIPTION "User Feedback lib" TYPE OPTIONAL PURPOSE "Allow to send Telemetry Information (optional).")
0236 else()
0237 find_package(KUserFeedback 1.2.0 CONFIG)
0238 set(HAVE_KUSERFEEDBACK ${KUserFeedback_FOUND})
0239 set_package_properties(KUserFeedback PROPERTIES DESCRIPTION "User Feedback lib" TYPE OPTIONAL PURPOSE "Allow to send Telemetry Information (optional).")
0240 endif()
0241
0242 find_package(KF${KF_MAJOR_VERSION}Solid ${KF_MIN_VERSION} CONFIG)
0243 if (KF${KF_MAJOR_VERSION}Solid_FOUND)
0244 # SolidPower is not built by default, and the only way to find is to
0245 # check for the header and that it builds
0246 get_target_property(SOLID_INCLUDE_DIRS KF${KF_MAJOR_VERSION}::Solid INTERFACE_INCLUDE_DIRECTORIES)
0247 find_file(SOLID_POWER_FOUND Solid/Power PATHS ${SOLID_INCLUDE_DIRS} NO_DEFAULT_PATH)
0248 if (SOLID_POWER_FOUND)
0249 message(STATUS "Found Solid Power header at ${SOLID_POWER_FOUND}")
0250 set(HAVE_SOLID 1)
0251 else()
0252 message(WARNING "Solid Power header was not found, suspend/resume detection is disabled. Reconfigure Solid build with `cmake -DWITH_NEW_SOLID_JOB=ON -DWITH_NEW_POWER_ASYNC_API=ON -DWITH_NEW_POWER_ASYNC_FREEDESKTOP=ON .`")
0253 endif()
0254 endif()
0255 set_package_properties(KF${KF_MAJOR_VERSION}Solid PROPERTIES DESCRIPTION "Device integration framework" TYPE OPTIONAL PURPOSE "Allows detecting suspend and resume.")
0256
0257 find_package(KF${KF_MAJOR_VERSION}NetworkManagerQt ${KF_MIN_VERSION} CONFIG)
0258 set(HAVE_NETWORKMANAGER ${KF${KF_MAJOR_VERSION}NetworkManagerQt_FOUND})
0259 set_package_properties(KF${KF_MAJOR_VERSION}NetworkManagerQt PROPERTIES DESCRIPTION "Network management lib" TYPE OPTIONAL PURPOSE "Allows detecting network state changes.")
0260
0261
0262 include_directories(${CMAKE_CURRENT_BINARY_DIR})
0263 ecm_set_disabled_deprecation_versions(QT 6.5
0264 KF 5.248.0
0265 )
0266 if (OPTION_BUILD_PYTHON_BINDINGS)
0267 remove_definitions(-DQT_STRICT_ITERATORS)
0268 endif()
0269 add_definitions(-DQT_NO_FOREACH)
0270 add_definitions(-DQT_NO_KEYWORDS)
0271
0272 set(RUQOLA_LIB_VERSION "${RUQOLA_VERSION}")
0273 set(RUQOLA_LIB_SOVERSION "0")
0274
0275
0276 configure_file(config-ruqola.h.in ${CMAKE_CURRENT_BINARY_DIR}/config-ruqola.h)
0277
0278 if(BUILD_TESTING)
0279 find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Test)
0280 add_definitions(-DBUILD_TESTING)
0281 endif(BUILD_TESTING)
0282
0283 if (PLUGINS_AUTHENTICATION_BASED_ON_O2)
0284 find_package(o2)
0285 endif()
0286
0287
0288 add_subdirectory(src)
0289
0290 if (BUILD_TESTING)
0291 add_subdirectory(tests)
0292 endif()
0293
0294
0295 ecm_qt_install_logging_categories(
0296 EXPORT RUQOLA
0297 FILE ruqola.categories
0298 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
0299 )
0300 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
0301 ki18n_install(po)
0302 if (KF${KF_MAJOR_VERSION}DocTools_FOUND)
0303 kdoctools_install(po)
0304 add_subdirectory(doc)
0305 endif()
0306 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)