Warning, /plasma/libplasma/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 cmake_minimum_required(VERSION 3.16)
0002 
0003 set(KF_VERSION "5.116.0") # handled by release scripts
0004 set(KF_DEP_VERSION "5.115.0") # handled by release scripts
0005 project(Plasma VERSION ${KF_VERSION})
0006 
0007 # ECM setup
0008 include(FeatureSummary)
0009 find_package(ECM 5.115.0  NO_MODULE)
0010 set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
0011 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
0012 
0013 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
0014 
0015 include(KDEInstallDirs)
0016 include(KDECMakeSettings)
0017 include(KDEGitCommitHooks)
0018 include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
0019 
0020 include(ECMGenerateExportHeader)
0021 include(ECMGenerateHeaders)
0022 include(CMakePackageConfigHelpers)
0023 include(ECMSetupVersion)
0024 include(ECMQtDeclareLoggingCategory)
0025 include(ECMAddQch)
0026 include(KDEPackageAppTemplates)
0027 include(ECMGenerateQmlTypes)
0028 include(ECMSetupQtPluginMacroNames)
0029 include(ECMMarkNonGuiExecutable)
0030 include(ECMDeprecationSettings)
0031 
0032 option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
0033 add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
0034 
0035 option(BUILD_DESKTOPTHEMES "Build with desktop themes. Turn this off when getting the desktop files from KF6" ON)
0036 
0037 ecm_setup_version(PROJECT
0038                   VARIABLE_PREFIX PLASMA
0039                   VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/plasma_version.h"
0040                   PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaConfigVersion.cmake"
0041                   SOVERSION 5)
0042 
0043 ################# now find all used packages #################
0044 
0045 set (REQUIRED_QT_VERSION 5.15.2)
0046 
0047 find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS Quick Gui Sql Qml Svg QuickControls2)
0048 if (QT_MAJOR_VERSION EQUAL "6")
0049     find_package(Qt6 ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS ShaderTools)
0050 endif()
0051 
0052 find_package(KF5 ${KF_DEP_VERSION} REQUIRED
0053     COMPONENTS
0054         Activities
0055         Archive
0056         Config
0057         ConfigWidgets
0058         CoreAddons
0059         DBusAddons
0060         Declarative
0061         GlobalAccel
0062         GuiAddons
0063         I18n
0064         IconThemes
0065         KIO
0066         WindowSystem
0067         XmlGui
0068         Notifications
0069         Package
0070         Kirigami2
0071     OPTIONAL_COMPONENTS
0072         Wayland
0073         DocTools
0074 )
0075 if(NOT EXCLUDE_DEPRECATED_BEFORE_AND_AT STREQUAL "CURRENT" AND
0076    EXCLUDE_DEPRECATED_BEFORE_AND_AT VERSION_LESS 5.94.0)
0077     find_package(KF5 ${KF_DEP_VERSION} REQUIRED COMPONENTS Service)
0078 endif()
0079 
0080 set_package_properties(KF5Wayland PROPERTIES DESCRIPTION "Integration with the Wayland compositor"
0081                        TYPE OPTIONAL
0082                       )
0083 if(KF5Wayland_FOUND)
0084   set(HAVE_KWAYLAND 1)
0085 endif()
0086 
0087 set_package_properties(KF5DocTools PROPERTIES DESCRIPTION "Tools to generate documentation"
0088                        TYPE OPTIONAL
0089                       )
0090 
0091 option(WITHOUT_X11 "Build without X11 support (skips finding X11)." OFF)
0092 if(NOT WITHOUT_X11)
0093     #optional features
0094     find_package(X11 MODULE)
0095     set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries"
0096                         URL "https://www.x.org/"
0097                         TYPE OPTIONAL
0098                         )
0099     find_package(XCB MODULE COMPONENTS XCB COMPOSITE DAMAGE SHAPE XFIXES RENDER)
0100     set_package_properties(XCB PROPERTIES DESCRIPTION "X protocol C-language Binding"
0101                         URL "https://xcb.freedesktop.org/"
0102                         TYPE OPTIONAL
0103                         )
0104     if(X11_FOUND AND XCB_XCB_FOUND)
0105         set(HAVE_X11 1)
0106         if (QT_MAJOR_VERSION STREQUAL "5")
0107             find_package(Qt5X11Extras ${REQUIRED_QT_VERSION} NO_MODULE)
0108         elseif (QT_MAJOR_VERSION STREQUAL "6")
0109             find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} CONFIG REQUIRED Gui) # qtx11extras_p.h
0110         endif()
0111         #X11_Xrender discovery is done by FindX11
0112         #add_feature_info("X Rendering Extension (libXrender)" X11_Xrender_FOUND "Support for compositing, rendering operations, and alpha-blending. STRONGLY RECOMMENDED")
0113         set(HAVE_XCB_SHAPE ${XCB_SHAPE_FOUND})
0114     else()
0115         set(HAVE_X11 0)
0116         set(HAVE_XCB_SHAPE 0)
0117     endif()
0118 endif()
0119 
0120 find_package(OpenGL)
0121 set_package_properties(OpenGL PROPERTIES DESCRIPTION "The OpenGL libraries"
0122                        URL "https://www.opengl.org/"
0123                        TYPE OPTIONAL
0124                       )
0125 
0126 find_package(EGL)
0127 set_package_properties(EGL PROPERTIES
0128                        PURPOSE "Fallback when OpenGL not available because of missing GLVND"
0129                        TYPE OPTIONAL
0130                       )
0131 
0132 get_target_property(QtGui_Enabled_Features Qt${QT_MAJOR_VERSION}::Gui QT_ENABLED_PUBLIC_FEATURES)
0133 if(OpenGL_GLX_FOUND AND HAVE_X11 AND (QtGui_Enabled_Features MATCHES "opengl"))
0134     add_feature_info(GLX OpenGL_GLX_FOUND "OpenGL GLX libraries.")
0135     set(HAVE_GLX 1)
0136 else()
0137     set(HAVE_GLX 0)
0138 endif()
0139 
0140 
0141 # OpenGL_EGL_FOUND is defined by FindOpenGL
0142 if(TARGET OpenGL::EGL)
0143     add_feature_info(EGL OpenGL_EGL_FOUND
0144                      "A platform-agnostic mechanism for creating rendering surfaces for use with other graphics libraries, such as OpenGL|ES and OpenVG.")
0145     set(HAVE_EGL 1)
0146 else()
0147     set(HAVE_EGL 0)
0148     message(STATUS "OpenGL::EGL is not available")
0149 endif()
0150 
0151 
0152 #########################################################################
0153 
0154 # TODO KF6 remove
0155 ecm_setup_qtplugin_macro_names(
0156     JSON_NONE
0157         "K_EXPORT_PLASMA_SERVICE"
0158         "K_EXPORT_PLASMA_APPLET"
0159         "K_EXPORT_PLASMA_PACKAGE"
0160         "K_EXPORT_PLASMA_APPLETSCRIPTENGINE"
0161         "K_EXPORT_PLASMA_DATAENGINESCRIPTENGINE"
0162         "K_EXPORT_PLASMA_DATAENGINE"
0163     JSON_ARG2
0164         "K_EXPORT_PLASMA_PACKAGE_WITH_JSON"
0165     JSON_ARG3
0166         "K_EXPORT_PLASMA_SERVICE_WITH_JSON"
0167         "K_EXPORT_PLASMA_APPLET_WITH_JSON"
0168         "K_EXPORT_PLASMA_APPLETSCRIPTENGINE_WITH_JSON"
0169         "K_EXPORT_PLASMA_DATAENGINESCRIPTENGINE_WITH_JSON"
0170         "K_EXPORT_PLASMA_CONTAINMENTACTIONS_WITH_JSON"
0171         "K_EXPORT_PLASMA_DATAENGINE_WITH_JSON"
0172     CONFIG_CODE_VARIABLE
0173         PACKAGE_SETUP_AUTOMOC_VARIABLES
0174 )
0175 
0176 ecm_set_disabled_deprecation_versions(
0177     QT 5.14 # needed for qmlRegisterInterface
0178     KF 5.95
0179     KCOREADDONS 5.88 # KPluginMetaData::serviceTypes
0180     KSERVICE 5.86 # KService::pluginKeyword
0181     KDECLARATIVE 5.88 # KDeclarative::ConfigPropertyMap
0182 )
0183 
0184 #add_definitions(-Wno-deprecated)
0185 
0186 include(KF5PlasmaMacros.cmake)
0187 
0188 #########################################################################
0189 
0190 
0191 option(BUILD_EXAMPLES "Build and install Plasma examples." OFF)
0192 option(BUILD_COVERAGE "Build Plasma Frameworks with gcov support" OFF)
0193 
0194 if(BUILD_COVERAGE)
0195     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
0196     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov")
0197 endif()
0198 
0199 # make plasma_version.h available
0200 include_directories(${CMAKE_CURRENT_BINARY_DIR})
0201 
0202 ################# list the subdirectories #################
0203 if (KF5DocTools_FOUND)
0204     add_subdirectory(docs)
0205 endif()
0206 add_definitions(-DTRANSLATION_DOMAIN=\"libplasma5\")
0207 ki18n_install(po)
0208 if (KF5DocTools_FOUND)
0209     kdoctools_install(po)
0210 endif()
0211 add_subdirectory(src)
0212 
0213 if (BUILD_EXAMPLES)
0214     add_subdirectory(examples)
0215 endif()
0216 
0217 if (BUILD_TESTING)
0218     add_subdirectory(autotests)
0219     add_subdirectory(tests)
0220 endif()
0221 add_subdirectory(templates)
0222 
0223 ################ create PlasmaConfig.cmake and install it ###########################
0224 
0225 # create a Config.cmake and a ConfigVersion.cmake file and install them
0226 
0227 set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5Plasma")
0228 
0229 if (BUILD_QCH)
0230     ecm_install_qch_export(
0231         TARGETS KF5Plasma_QCH
0232         FILE KF5PlasmaQchTargets.cmake
0233         DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
0234         COMPONENT Devel
0235     )
0236     set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5PlasmaQchTargets.cmake\")")
0237 endif()
0238 
0239 configure_package_config_file(
0240   "${CMAKE_CURRENT_SOURCE_DIR}/KF5PlasmaConfig.cmake.in"
0241   "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaConfig.cmake"
0242   INSTALL_DESTINATION  ${CMAKECONFIG_INSTALL_DIR}
0243   PATH_VARS  CMAKE_INSTALL_PREFIX
0244 )
0245 
0246 install(FILES
0247   "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaConfig.cmake"
0248   "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaConfigVersion.cmake"
0249   "${CMAKE_CURRENT_SOURCE_DIR}/KF5PlasmaMacros.cmake"
0250   DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
0251   COMPONENT Devel
0252 )
0253 
0254 install(EXPORT KF5PlasmaTargets
0255         DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
0256         FILE KF5PlasmaTargets.cmake
0257         NAMESPACE KF5::
0258         COMPONENT Devel)
0259 
0260 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/plasma_version.h
0261         DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/Plasma COMPONENT Devel )
0262 
0263 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
0264 
0265 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)