cmake_minimum_required(VERSION 2.8.10.1) project(plasma) ################# Disallow in-source build ################# if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") message(FATAL_ERROR "plasma requires an out of source build. Please create a separate build directory and run 'cmake path_to_plasma [options]' there.") endif() # Make CPack available to easy generate binary packages include(CPack) include(FeatureSummary) ################# set KDE specific information ################# find_package(ECM 0.0.6 REQUIRED NO_MODULE) # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH}) find_package(Qt5Core REQUIRED NO_MODULE) find_package(Qt5Transitional MODULE) find_package(Qt5Quick REQUIRED NO_MODULE) if (Qt5_POSITION_INDEPENDENT_CODE) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() # The Qt5Widgets_INCLUDES also includes the include directories for # dependencies QtCore and QtGui include_directories(${Qt5Widgets_DEFINITIONS} ${Qt5Quick_DEFINITIONS} ${QT_INCLUDES}) # We need add -DQT_WIDGETS_LIB when using QtWidgets in Qt 5. add_definitions(${Qt5Widgets_DEFINITIONS} ${Qt5Quick_DEFINITIONS} ${Qt5Qml_DEFINITIONS}) if(KDE_PLATFORM_FEATURE_DISABLE_DEPRECATED) set(KDE_NO_DEPRECATED TRUE) set(CMAKE_AUTOMOC_MOC_OPTIONS "-DKDE_NO_DEPRECATED") endif() ############### Load the CTest options ############### # CTestCustom.cmake has to be in the CTEST_BINARY_DIR. # in the KDE build system, this is the same as CMAKE_BINARY_DIR. configure_file(${CMAKE_SOURCE_DIR}/CTestCustom.cmake ${CMAKE_BINARY_DIR}/CTestCustom.cmake COPYONLY) ################# now find all used packages ################# set (QT_MIN_VERSION "5.0.0") find_package(kdeqt5staging REQUIRED NO_MODULE) # Load CMake, Compiler and InstallDirs settings from KF5 and the following are already somewhat "done" tier1 libs from kdelibs: find_package(KF5 MODULE REQUIRED CMake Compiler InstallDirs kidletime itemmodels kwidgetsaddons kwindowsystem kcodecs karchive kcoreaddons solid) #find_package(KF5Transitional REQUIRED) # those are not "done" yet: find_package(ki18n REQUIRED NO_MODULE) find_package(kio REQUIRED NO_MODULE) find_package(KDELibs4 NO_MODULE) find_package(kdeclarative REQUIRED NO_MODULE) #required features: # Perl is used e.g. in khtml, kjs, kjsembed and others find_package(Perl) set_package_properties(Perl PROPERTIES URL "http://www.perl.org" TYPE REQUIRED PURPOSE "Needed for building kdelibs") find_package(ZLIB) set_package_properties(ZLIB PROPERTIES DESCRIPTION "Support for gzip compressed files and data streams" URL "http://www.zlib.net" TYPE REQUIRED PURPOSE "Required by the core KDE libraries and some critical kioslaves" ) #optional features find_package(X11) if(X11_FOUND) set(HAVE_X11 X11_FOUND) #X11_Xrender discovery is done by FindX11 add_feature_info("X Rendering Extension (libXrender)" X11_Xrender_FOUND "Support for compositing, rendering operations, and alpha-blending. STRONGLY RECOMMENDED") add_feature_info("X Screensaver Extension (libXss)" X11_Xscreensaver_FOUND "Support for KIdleTime (fallback mode)") add_feature_info("X Sync Extension (libXext)" X11_XSync_FOUND "Efficient operation of KIdleTime. STRONGLY RECOMMENDED") if(NOT X11_XSync_FOUND AND NOT X11_Xscreensaver_FOUND) message(FATAL_ERROR "\nNeither the XSync (libXext) nor XScreensaver (libXss) development package was found.\nPlease install one of them (XSync is recommended)\n") endif() #X11 Session Management (SM) is required #X11_SM_FOUND is set in FindX11, which is required by KDE4Internal if(UNIX AND NOT X11_SM_FOUND) message(FATAL_ERROR "\nThe X11 Session Management (SM) development package could not be found.\nPlease install libSM.\n") endif() endif() find_package(OpenSSL) set_package_properties(OpenSSL PROPERTIES DESCRIPTION "Support for secure network communications (SSL and TLS)" URL "http://openssl.org" TYPE RECOMMENDED PURPOSE "KDE uses OpenSSL for the bulk of secure communications, including secure web browsing via HTTPS" ) find_package(Libintl) set_package_properties(Libintl PROPERTIES DESCRIPTION "Support for multiple languages" URL "http://www.gnu.org/software/gettext" TYPE RECOMMENDED PURPOSE "Enables KDE to be available in many different languages" ) #FIXME: when we have a qca for qt5, reenable find_package(QCA2 2.0.0) set_package_properties(QCA2 PROPERTIES DESCRIPTION "Support for remote plasma widgets" URL "http://delta.affinix.com/qca" TYPE OPTIONAL ) find_package(DBusMenuQt) set_package_properties(DBusMenuQt PROPERTIES DESCRIPTION "Support for notification area menus via the DBusMenu protocol" URL "https://launchpad.net/libdbusmenu-qt" TYPE REQUIRED ) ######################################################################### add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) add_definitions(-DQT_NO_URL_CAST_FROM_STRING) remove_definitions(-DQT3_SUPPORT_WARNINGS -DQT3_SUPPORT) remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_STRICT_ITERATORS -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_KEYWORDS) ################# setup the include directories ################# include_directories( ${kdeqt5staging_INCLUDE_DIRS} ${kdeqt5staging_INCLUDE_DIR} ${KDE4_INCLUDES} ${KF5_INCLUDE_DIRS} # since e-c-m 0.0.7 ) # for including config.h and for includes like include_directories( ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/interfaces ${CMAKE_SOURCE_DIR}/plasma/includes) if(QCA2_FOUND) include_directories( ${QCA2_INCLUDE_DIR} ) endif() ################# configure checks and create the configured files ################# if(WINCE) set(STATIC_LIBRARY ON) add_definitions(-DSTATIC_INSTALL_PATH=L\\\"/programme/kde\\\") endif() if(STATIC_LIBRARY) set(LIBRARY_TYPE STATIC) add_definitions(-DKDELIBS_STATIC_LIBS) message(STATUS "Building kdelibs as static libraries") else() set(LIBRARY_TYPE SHARED) endif() # now create config headers configure_file(config-prefix.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-prefix.h ) configure_file(config-compiler.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-compiler.h ) # Needed for the calls to kconfig_add_kcfg_files in some modules set(KCONFIG_KCFGC_EXECUTABLE kconfig_compiler) macro(installPackage dir component) set(root ${ARGN}) if(NOT root) set(root plasma/plasmoids) endif() install(DIRECTORY ${dir}/ DESTINATION ${DATA_INSTALL_DIR}/${root}/${component} PATTERN Messages.sh EXCLUDE) install(FILES ${dir}/metadata.desktop DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-applet-${component}.desktop) endmacro() ################# list the subdirectories ################# add_subdirectory( declarativeimports ) add_subdirectory( desktoptheme ) add_subdirectory( plasma ) add_subdirectory( scriptengines ) add_subdirectory( shell ) #FIXME: port tools #add_subdirectory( tools ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)