2014-11-13 01:04:59 +02:00
project(kdelibs)
# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
################# set KDE specific information #################
2015-10-29 08:11:13 +02:00
set(KDE_VERSION_MAJOR 4)
2022-05-12 16:33:10 +03:00
set(KDE_VERSION_MINOR 22)
2015-10-29 08:11:13 +02:00
set(KDE_VERSION_RELEASE 0)
2021-02-03 06:38:21 +02:00
set(KDE_VERSION "${KDE_VERSION_MAJOR}.${KDE_VERSION_MINOR}.${KDE_VERSION_RELEASE}")
2015-10-29 08:11:13 +02:00
set(KDE_VERSION_STRING "${KDE_VERSION}")
2014-11-13 01:04:59 +02:00
2015-10-31 05:45:34 +02:00
execute_process(
COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE git_revision
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
RESULT_VARIABLE _unused
)
if(git_revision)
set(KDE_VERSION_STRING "${KDE_VERSION_STRING} (${git_revision})")
endif()
2015-10-29 08:11:13 +02:00
set(KDE_DEFAULT_HOME ".katana" CACHE STRING "The default home directory" )
2014-11-13 01:04:59 +02:00
2020-02-19 17:12:33 +00:00
set(LIBRARY_TYPE SHARED)
2014-11-13 01:04:59 +02:00
################# now find all used packages #################
find_package(KDE4Internal REQUIRED)
include(KDE4Defaults)
2016-04-27 18:43:11 +00:00
include(GenerateExportHeader)
2014-11-13 01:04:59 +02:00
if(UNIX AND Q_WS_X11)
2015-10-29 08:11:13 +02:00
#X11 Session Management (SM) is required
#X11_SM_FOUND is set in FindX11, which is required by KDE4Internal
if(NOT X11_SM_FOUND)
message(FATAL_ERROR "\nThe X11 Session Management (SM) development package could not be found.\nPlease install libSM.\n")
endif(NOT X11_SM_FOUND)
2014-11-13 01:04:59 +02:00
endif(UNIX AND Q_WS_X11)
2022-05-18 18:06:37 +03:00
if(ENABLE_TESTING)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads)
set_package_properties(Threads PROPERTIES
PURPOSE "Required for asynchorouns functions and methods execution"
DESCRIPTION "Platform dependent threads implementation"
URL ""
TYPE REQUIRED
)
endif()
2016-05-14 10:07:58 +00:00
# required features
2014-11-13 01:04:59 +02:00
find_package(ZLIB)
2015-10-31 12:18:13 +02:00
set_package_properties(ZLIB PROPERTIES
DESCRIPTION "Support for gzip compressed files and data streams"
2015-10-29 08:11:13 +02:00
URL "http://www.zlib.net"
TYPE REQUIRED
PURPOSE "Required by the core KDE libraries and some critical kioslaves"
)
2014-11-13 01:04:59 +02:00
2022-05-27 18:47:54 +03:00
find_package(SharedMimeInfo 0.91)
2015-11-01 05:10:05 +02:00
set_package_properties(SharedMimeInfo PROPERTIES
DESCRIPTION "Shared Mime Info"
URL "http://freedesktop.org/wiki/Software/shared-mime-info"
TYPE REQUIRED
PURPOSE "Allows KDE applications to determine file types"
)
2017-12-11 11:51:36 +00:00
find_package(ENCHANT 1.4.0)
2016-08-11 23:26:12 +00:00
set_package_properties(ENCHANT PROPERTIES
DESCRIPTION "Generic spell checking library"
URL "http://www.abisource.com/projects/enchant/"
TYPE REQUIRED
PURPOSE "Spell checking support via Enchant"
)
2022-04-10 23:43:08 +03:00
# v7.43.0+ required for CURL_AT_LEAST_VERSION() macro
find_package(CURL 7.43.0)
2022-03-29 16:20:47 +03:00
set_package_properties(CURL PROPERTIES
2022-02-19 16:40:06 +02:00
DESCRIPTION "Command line tool and library for transferring data with URLs"
URL "https://curl.se/"
TYPE REQUIRED
PURPOSE "KIO HTTP(S) slave"
)
2016-05-14 10:07:58 +00:00
# optional features
2014-11-13 01:04:59 +02:00
if(X11_FOUND)
2022-09-27 16:44:28 +03:00
kde4_bool_to_01(X11_XTest_FOUND HAVE_XTEST)
kde4_bool_to_01(X11_Xcursor_FOUND HAVE_XCURSOR)
kde4_bool_to_01(X11_Xfixes_FOUND HAVE_XFIXES)
kde4_bool_to_01(X11_Xscreensaver_FOUND HAVE_XSCREENSAVER)
kde4_bool_to_01(X11_XSync_FOUND HAVE_XSYNC)
2020-02-09 21:45:50 +00:00
add_feature_info("X Test Extension (libXTest)" HAVE_XTEST "Support for notfication restriction")
2021-05-27 19:59:42 +03:00
add_feature_info("X Cursor Extension (Xcursor)" HAVE_XCURSOR "Support for loading cursors depending on theme")
2020-02-09 21:45:50 +00:00
add_feature_info("X Fixes Extension (libXfixes)" HAVE_XFIXES "Support for damage/fixes cursor and window management")
2015-10-29 08:11:13 +02:00
add_feature_info("X Screensaver Extension (libXss)" HAVE_XSCREENSAVER "Support for KIdleTime (fallback mode)")
2020-02-09 21:45:50 +00:00
add_feature_info("X Sync Extension (libXext)" HAVE_XSYNC "Efficient operation of KIdleTime")
2015-10-29 08:11:13 +02:00
if(NOT HAVE_XSYNC AND NOT HAVE_XSCREENSAVER)
message(FATAL_ERROR "\nNeither the XSync (libXext) nor XScreensaver (libXss) development package was found.\nPlease install one of them (XSync is recommended)\n")
endif(NOT HAVE_XSYNC AND NOT HAVE_XSCREENSAVER)
2014-11-13 01:04:59 +02:00
endif(X11_FOUND)
macro_optional_find_package(Libintl)
2015-10-31 12:18:13 +02:00
set_package_properties(Libintl PROPERTIES
2015-10-29 08:11:13 +02:00
DESCRIPTION "Support for multiple languages"
URL "http://www.gnu.org/software/gettext"
TYPE RECOMMENDED
PURPOSE "Enables KDE to be available in many different languages"
)
2014-11-13 01:04:59 +02:00
2015-11-12 17:42:34 +02:00
macro_optional_find_package(DBusMenuQt)
2015-10-31 12:18:13 +02:00
set_package_properties(DBusMenuQt PROPERTIES
2015-10-29 08:11:13 +02:00
DESCRIPTION "Support for notification area menus via the DBusMenu protocol"
URL "https://launchpad.net/libdbusmenu-qt"
2015-11-12 17:42:34 +02:00
TYPE RECOMMENDED
2015-10-29 08:11:13 +02:00
)
2014-11-13 01:04:59 +02:00
2019-05-23 17:12:53 +00:00
macro_optional_find_package(MPV 0.23.0)
2016-05-14 10:07:58 +00:00
set_package_properties(MPV PROPERTIES
DESCRIPTION "A fork of mplayer2 and MPlayer"
URL "https://mpv.io/"
TYPE RECOMMENDED
PURPOSE "Media preview, sound notifications, etc."
)
2020-02-19 17:12:33 +00:00
macro_optional_find_package(ACL)
set_package_properties(ACL
PROPERTIES
DESCRIPTION "Support for manipulating access control lists"
URL "ftp://oss.sgi.com/projects/xfs/cmd_tars"
TYPE RECOMMENDED
PURPOSE "KIO and KIO slaves"
)
2021-03-26 21:09:16 +02:00
macro_optional_find_package(Avahi)
set_package_properties(Avahi PROPERTIES
DESCRIPTION "Facilities for service discovery on a local network (DNSSD)"
2022-05-05 16:35:55 +03:00
URL "https://avahi.org/"
2021-03-26 21:09:16 +02:00
TYPE OPTIONAL
2022-05-05 16:35:55 +03:00
PURPOSE "Avahi is required for KDE applications to make use of multicast DNS/DNS-SD service discovery"
2021-03-26 21:09:16 +02:00
)
macro_optional_find_package(BZip2)
set_package_properties(BZip2 PROPERTIES
DESCRIPTION "Support for BZip2 compressed files and data streams"
URL "http://www.bzip.org"
TYPE RECOMMENDED
)
macro_optional_find_package(LibLZMA)
set_package_properties(LibLZMA PROPERTIES
DESCRIPTION "Support for xz compressed files and data streams"
URL "http://tukaani.org/xz/"
TYPE OPTIONAL
)
2021-07-25 21:12:29 +03:00
macro_optional_find_package(ImageMagick COMPONENTS Magick++)
set_package_properties(ImageMagick PROPERTIES
URL "https://imagemagick.org/"
PURPOSE "Support for various image formats"
2021-03-26 21:09:16 +02:00
TYPE OPTIONAL
)
macro_optional_find_package(WebP)
set_package_properties(WebP PROPERTIES
DESCRIPTION "A new image format for the Web"
URL "https://developers.google.com/speed/webp"
TYPE OPTIONAL
)
# v143+ required for udev_monitor_filter_add_match_subsystem_devtype()
macro_optional_find_package(UDev 143)
set_package_properties(UDev PROPERTIES
DESCRIPTION "UDev support for Solid"
URL "http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html"
PURPOSE "Allows Solid to use UDev to provide information about devices on Linux"
TYPE OPTIONAL
)
2021-07-05 09:26:28 +00:00
macro_optional_find_package(Devinfo)
set_package_properties(Devinfo PROPERTIES
DESCRIPTION "Devinfo support for Solid"
URL "https://www.freebsd.org/cgi/man.cgi?query=devinfo&sektion=3"
PURPOSE "Allows Solid to use Devinfo to provide information about devices on FreeBSD"
TYPE OPTIONAL
)
2021-06-08 21:18:36 +03:00
macro_optional_find_package(LibCDIO)
set_package_properties(LibCDIO PROPERTIES
DESCRIPTION "GNU Compact Disc Input and Control Library"
URL "https://www.gnu.org/software/libcdio/"
PURPOSE "Allows Solid to use libcdio to provide information about CD-ROM devices on Linux"
TYPE OPTIONAL
)
2022-04-04 19:44:39 +03:00
macro_optional_find_package(Exiv2 0.21)
2021-08-01 19:06:00 +03:00
set_package_properties(Exiv2 PROPERTIES
DESCRIPTION "Image metadata library and tools"
URL "http://www.exiv2.org"
TYPE RECOMMENDED
PURPOSE "Exiv2 metadata extraction and image rotation based on the data"
)
2022-04-14 08:04:46 +03:00
macro_optional_find_package(FFmpeg)
set_package_properties(FFmpeg PROPERTIES
DESCRIPTION "A complete, cross-platform solution to record, convert and stream audio and video"
URL "https://ffmpeg.org/"
TYPE RECOMMENDED
PURPOSE "Video metadata extraction"
)
2022-04-14 11:09:20 +03:00
macro_optional_find_package(Taglib)
set_package_properties(Taglib PROPERTIES
DESCRIPTION "TagLib Audio Meta-Data Library"
URL "https://taglib.org/"
TYPE RECOMMENDED
PURPOSE "Audio metadata extraction"
)
2022-04-16 03:37:38 +03:00
macro_optional_find_package(EPub)
set_package_properties(EPub PROPERTIES
DESCRIPTION "A library for reading EPub documents"
URL "https://sourceforge.net/projects/ebook-tools/"
TYPE RECOMMENDED
PURPOSE "eBook metadata extraction"
)
2022-04-17 04:05:30 +03:00
macro_optional_find_package(Poppler)
set_package_properties(Poppler PROPERTIES
DESCRIPTION "PDF rendering library"
URL "https://poppler.freedesktop.org/"
TYPE RECOMMENDED
PURPOSE "PDF metadata extraction"
)
2022-05-13 02:46:32 +03:00
macro_optional_find_package(LibSpectre)
set_package_properties(LibSpectre PROPERTIES
DESCRIPTION "Small library for rendering Postscript documents"
URL "https://www.freedesktop.org/wiki/Software/libspectre/"
TYPE RECOMMENDED
PURPOSE "Postscript metadata extraction"
)
2022-04-04 19:44:39 +03:00
macro_optional_find_package(OpenSSL)
set_package_properties(OpenSSL PROPERTIES
DESCRIPTION "Robust, commercial-grade, full-featured toolkit for general-purpose cryptography and secure communication"
URL "https://www.openssl.org/"
TYPE RECOMMENDED
PURPOSE "Store password securely"
)
2022-05-09 01:19:46 +03:00
# v0.9.71+ required for MHD_Result
macro_optional_find_package(Libmicrohttpd 0.9.71)
2022-05-08 13:21:30 +03:00
set_package_properties(Libmicrohttpd PROPERTIES
DESCRIPTION "Small C library that is supposed to make it easy to run an HTTP server as part of another application"
URL "https://www.gnu.org/software/libmicrohttpd/"
TYPE RECOMMENDED
PURPOSE "HTTP(S) server"
)
2020-02-19 17:12:33 +00:00
################# configure checks and create the configured files #################
include(ConfigureChecks.cmake)
# now create config headers
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
configure_file(config-acl.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-acl.h)
configure_file(config-prefix.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-prefix.h)
configure_file(config-pty.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-pty.h)
configure_file(kdemacros.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/kdemacros.h)
2014-11-13 01:04:59 +02:00
################# Disallow in-source build #################
2015-09-01 01:05:33 +03:00
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
message(SEND_ERROR "kdelibs requires an out of source build")
endif()
2014-11-13 01:04:59 +02:00
#########################################################################
add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
################# setup the include directories #################
# for including config.h and for includes like <kparts/foo.h>
2015-09-01 01:05:33 +03:00
include_directories(
${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/interfaces
)
2014-11-13 01:04:59 +02:00
# Those variables for are only valid inside of kdelibs, of course.
# Use the one variable for the lib you depend upon.
# E.g. kdeui uses ${KDE4_KDECORE_INCLUDES}. Something that depends on kparts uses ${KDE4_KPARTS_INCLUDES}.
2014-11-18 13:35:43 +00:00
# kdecore depends on Qt
2015-09-01 01:05:33 +03:00
set(KDE4_KDECORE_INCLUDES
${KDE4_KDECORE_INCLUDES}
${CMAKE_SOURCE_DIR}/kdecore
${CMAKE_BINARY_DIR}/kdecore
${CMAKE_SOURCE_DIR}/kdecore/compression
${CMAKE_SOURCE_DIR}/kdecore/config
${CMAKE_SOURCE_DIR}/kdecore/date
${CMAKE_SOURCE_DIR}/kdecore/io
${CMAKE_SOURCE_DIR}/kdecore/jobs
${CMAKE_SOURCE_DIR}/kdecore/kernel
${CMAKE_SOURCE_DIR}/kdecore/auth
${CMAKE_SOURCE_DIR}/kdecore/network
${CMAKE_SOURCE_DIR}/kdecore/services
${CMAKE_SOURCE_DIR}/kdecore/localization
${CMAKE_SOURCE_DIR}/kdecore/sycoca
${CMAKE_SOURCE_DIR}/kdecore/text
${CMAKE_SOURCE_DIR}/kdecore/util
${CMAKE_SOURCE_DIR}/kdecore/sonnet
2016-04-27 18:43:11 +00:00
${CMAKE_BINARY_DIR}/kdecore
2015-09-01 01:05:33 +03:00
${QT_INCLUDES}
${_KDE4_PLATFORM_INCLUDE_DIRS}
)
2014-11-13 01:04:59 +02:00
# kdeui depends on kdecore
2015-09-01 01:05:33 +03:00
set(KDE4_KDEUI_INCLUDES
${CMAKE_SOURCE_DIR}/kdeui
${CMAKE_SOURCE_DIR}/kdeui/actions
${CMAKE_SOURCE_DIR}/kdeui/colors
${CMAKE_SOURCE_DIR}/kdeui/config
${CMAKE_SOURCE_DIR}/kdeui/dialogs
${CMAKE_SOURCE_DIR}/kdeui/findreplace
${CMAKE_SOURCE_DIR}/kdeui/fonts
${CMAKE_SOURCE_DIR}/kdeui/icons
${CMAKE_SOURCE_DIR}/kdeui/itemviews
${CMAKE_SOURCE_DIR}/kdeui/jobs
${CMAKE_SOURCE_DIR}/kdeui/kernel
${CMAKE_SOURCE_DIR}/kdeui/notifications
${CMAKE_SOURCE_DIR}/kdeui/paged
${CMAKE_SOURCE_DIR}/kdeui/plotting
${CMAKE_SOURCE_DIR}/kdeui/shortcuts
${CMAKE_SOURCE_DIR}/kdeui/sonnet
${CMAKE_SOURCE_DIR}/kdeui/util
${CMAKE_SOURCE_DIR}/kdeui/widgets
${CMAKE_SOURCE_DIR}/kdeui/windowmanagement
${CMAKE_SOURCE_DIR}/kdeui/xmlgui
2016-04-27 18:43:11 +00:00
${CMAKE_BINARY_DIR}/kdeui
2015-09-01 01:05:33 +03:00
${KDE4_KDECORE_INCLUDES}
)
2014-11-13 01:04:59 +02:00
# kio depends on kdeui
2015-09-01 01:05:33 +03:00
set(KDE4_KIO_INCLUDES
${CMAKE_SOURCE_DIR}/kio
${CMAKE_SOURCE_DIR}/kio/bookmarks
${CMAKE_SOURCE_DIR}/kio/kio
${CMAKE_SOURCE_DIR}/kio/kfile
2016-04-27 18:43:11 +00:00
${CMAKE_BINARY_DIR}/kio
2015-09-01 01:05:33 +03:00
${KDE4_KDEUI_INCLUDES}
)
2014-11-13 01:04:59 +02:00
# kpty
2015-09-01 01:05:33 +03:00
set(KDE4_KPTY_INCLUDES
${CMAKE_SOURCE_DIR}/kpty
2016-04-27 18:43:11 +00:00
${CMAKE_BINARY_DIR}/kpty
2015-09-01 01:05:33 +03:00
${KDE4_KIO_INCLUDES}
)
2014-11-13 01:04:59 +02:00
# kparts depends on kio
2015-09-01 01:05:33 +03:00
set(KDE4_KPARTS_INCLUDES
${CMAKE_SOURCE_DIR}/kparts
2016-04-27 18:43:11 +00:00
${CMAKE_BINARY_DIR}/kparts
2015-09-01 01:05:33 +03:00
${KDE4_KIO_INCLUDES}
)
2014-11-13 01:04:59 +02:00
################# list the subdirectories #################
add_subdirectory( cmake )
2015-10-29 13:57:28 +02:00
add_subdirectory( includes )
add_subdirectory( interfaces )
add_subdirectory( kdeclarative )
2014-11-13 01:04:59 +02:00
add_subdirectory( kdecore )
2015-08-26 07:41:39 +03:00
add_subdirectory( kded )
2015-10-29 13:57:28 +02:00
add_subdirectory( kdeui )
add_subdirectory( kdewidgets )
2014-11-13 01:04:59 +02:00
add_subdirectory( kfile )
2015-10-29 13:57:28 +02:00
add_subdirectory( kimgio )
add_subdirectory( kinit )
add_subdirectory( kio )
2015-08-26 07:41:39 +03:00
add_subdirectory( kioslave )
2015-10-29 13:57:28 +02:00
add_subdirectory( knotify )
2015-08-26 07:41:39 +03:00
add_subdirectory( kparts )
2015-10-29 13:57:28 +02:00
add_subdirectory( kpty )
2015-08-26 07:41:39 +03:00
add_subdirectory( kutils )
add_subdirectory( licenses )
add_subdirectory( mimetypes )
2014-11-13 01:04:59 +02:00
add_subdirectory( plasma )
2015-10-29 13:57:28 +02:00
add_subdirectory( solid )
2014-11-13 01:04:59 +02:00
2015-10-29 08:11:13 +02:00
################# write kdelibs package config files which will be installed #################
2014-11-13 01:04:59 +02:00
2015-10-29 08:11:13 +02:00
configure_file(KDE4Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/KDE4Config.cmake @ONLY)
configure_file(KDE4Version.cmake ${CMAKE_CURRENT_BINARY_DIR}/KDE4Version.cmake @ONLY)
2014-11-13 01:04:59 +02:00
################# install files #################
2015-10-29 08:11:13 +02:00
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/kdemacros.h
2021-02-26 20:15:41 +02:00
DESTINATION ${KDE4_INCLUDE_INSTALL_DIR}
2015-10-29 08:11:13 +02:00
)
2021-03-26 21:09:16 +02:00
# the path bellow will be the correct locations once FindKDE4Internal is no longer required:
# ${KDE4_SHARE_INSTALL_PREFIX}/cmake/KDE4
2015-10-29 08:11:13 +02:00
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/KDE4Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/KDE4Version.cmake
2021-02-26 20:15:41 +02:00
DESTINATION ${KDE4_DATA_INSTALL_DIR}/cmake/modules
2015-10-29 08:11:13 +02:00
)
2014-11-13 01:04:59 +02:00
2015-10-29 08:11:13 +02:00
install(
EXPORT kdelibsLibraryTargets
2015-09-01 01:05:33 +03:00
NAMESPACE ${KDE4_TARGET_PREFIX}
FILE KDELibs4LibraryTargets.cmake
2021-02-26 20:15:41 +02:00
DESTINATION ${KDE4_DATA_INSTALL_DIR}/cmake/modules
2015-10-29 08:11:13 +02:00
)
install(
EXPORT kdelibsToolsTargets
2015-09-01 01:05:33 +03:00
NAMESPACE ${KDE4_TARGET_PREFIX}
FILE KDELibs4ToolsTargets.cmake
2021-02-26 20:15:41 +02:00
DESTINATION ${KDE4_DATA_INSTALL_DIR}/cmake/modules
2015-09-01 01:05:33 +03:00
)
2014-11-13 01:04:59 +02:00
feature_summary(WHAT ALL
2015-09-01 01:05:33 +03:00
INCLUDE_QUIET_PACKAGES
FATAL_ON_MISSING_REQUIRED_PACKAGES
)