cmake_minimum_required (VERSION 3.16 FATAL_ERROR) # KDE Application Version, managed by release script set (RELEASE_SERVICE_VERSION_MAJOR "24") set (RELEASE_SERVICE_VERSION_MINOR "05") set (RELEASE_SERVICE_VERSION_MICRO "1") set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") project(gwenview VERSION ${RELEASE_SERVICE_VERSION}) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ) set (QT_MIN_VERSION "6.6.0") set (KF_MIN_VERSION "5.240.0") set(KDE_COMPILERSETTINGS_LEVEL "5.82") find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(ECMOptionalAddSubdirectory) include(ECMInstallIcons) include(ECMSetupVersion) include(ECMMarkNonGuiExecutable) include(ECMGenerateHeaders) include(ECMAddAppIcon) include(GenerateExportHeader) include(FeatureSummary) include(ECMQtDeclareLoggingCategory) include(ECMDeprecationSettings) ## Generate header with version number ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX GWENVIEW VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/lib/gwenview_version.h" ) ## CMake options set(GWENVIEW_SEMANTICINFO_BACKEND_NONE OFF) set(GWENVIEW_SEMANTICINFO_BACKEND_FAKE OFF) set(GWENVIEW_SEMANTICINFO_BACKEND_BALOO OFF) set(GWENVIEW_SEMANTICINFO_BACKEND "Baloo" CACHE STRING "Semantic info backend for Gwenview (Baloo/Fake/None)") # Init GWENVIEW_SEMANTICINFO_BACKEND_* vars if(GWENVIEW_SEMANTICINFO_BACKEND STREQUAL "None") set(GWENVIEW_SEMANTICINFO_BACKEND_NONE ON) elseif(GWENVIEW_SEMANTICINFO_BACKEND STREQUAL "Fake") set(GWENVIEW_SEMANTICINFO_BACKEND_FAKE ON) else() set(GWENVIEW_SEMANTICINFO_BACKEND_BALOO ON) endif() if (APPLE OR NOT UNIX) set(GWENVIEW_NO_WAYLAND_GESTURES ON) endif() find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED Core Widgets Concurrent Svg PrintSupport) find_package(Qt6DBus ${QT_MIN_VERSION} CONFIG QUIET) if (QT_MAJOR_VERSION STREQUAL "6") find_package(Qt6SvgWidgets) find_package(Qt6OpenGLWidgets) endif() if(NOT GWENVIEW_NO_WAYLAND_GESTURES) find_package(WaylandProtocols REQUIRED) if (QT_MAJOR_VERSION EQUAL "5") find_package(QtWaylandScanner REQUIRED) endif() find_package(Wayland 1.9 REQUIRED Client) find_package(Qt6 REQUIRED COMPONENTS WaylandClient) endif() set(HAVE_QTDBUS ${Qt6DBus_FOUND}) find_package(Phonon4Qt6 4.6.60 NO_MODULE REQUIRED) include_directories(BEFORE SYSTEM ${PHONON_INCLUDES}) add_definitions(-DPHONON_LIB_SONAME=\"${PHONON_LIB_SONAME}\") find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS KIO ItemModels I18n Parts WindowSystem IconThemes Notifications GuiAddons WidgetsAddons ) find_package(KF6 ${KF_MIN_VERSION} OPTIONAL_COMPONENTS DocTools Purpose ) set(HAVE_PURPOSE ${KF6Purpose_FOUND}) if(QT_MAJOR_VERSION STREQUAL "6") set(KActivitiesPackageName PlasmaActivities) else() set(KActivitiesPackageName KF5Activities) endif() find_package(${KActivitiesPackageName}) set(HAVE_KACTIVITIES ${${KActivitiesPackageName}_FOUND}) ecm_set_disabled_deprecation_versions(QT 5.14.0 KF 5.99.0 ) add_definitions(-DQT_NO_FOREACH) ## Dependencies find_package(JPEG) set_package_properties(JPEG PROPERTIES URL "http://libjpeg.sourceforge.net/" DESCRIPTION "JPEG image manipulation support" TYPE REQUIRED) find_package(PNG) set_package_properties(PNG PROPERTIES URL "http://www.libpng.org" DESCRIPTION "PNG image manipulation support" TYPE REQUIRED) find_package(LibExiv2) set_package_properties(LibExiv2 PROPERTIES URL "https://www.exiv2.org" DESCRIPTION "image metadata support" TYPE REQUIRED) find_package(CFitsio) set_package_properties(CFitsio PROPERTIES URL "https://heasarc.gsfc.nasa.gov/fitsio/fitsio.html" DESCRIPTION "FITS format support" TYPE OPTIONAL) if(CFITSIO_FOUND) set(HAVE_FITS true) endif() find_package(TIFF) set_package_properties(TIFF PROPERTIES DESCRIPTION "Library for reading TIFF files" URL "http://www.libtiff.org/" TYPE OPTIONAL PURPOSE "Disable uninteresting log messages from libtiff by default" ) if (TIFF_FOUND) set(HAVE_TIFF true) endif() find_package(LCMS2) set_package_properties(LCMS2 PROPERTIES URL "http://www.littlecms.com" DESCRIPTION "Color management engine" TYPE REQUIRED) if (GWENVIEW_SEMANTICINFO_BACKEND_BALOO) find_package(KF6Baloo 5.1.90) set_package_properties(KF6Baloo PROPERTIES URL "https://commits.kde.org/baloo" DESCRIPTION "Desktop-wide semantic information support" TYPE OPTIONAL) if (NOT KF6Baloo_FOUND) message (STATUS "You have selected Baloo for semantic backend, but required version was not found. Overriding the backend to None") unset(GWENVIEW_SEMANTICINFO_BACKEND_BALOO) set(GWENVIEW_SEMANTICINFO_BACKEND_NONE ON) endif () endif () if(QT_MAJOR_VERSION STREQUAL "6") set(KDcrawPackageName KDcrawQt6) else() set(KDcrawPackageName KF5KDcraw) endif() find_package(${KDcrawPackageName}) if (${KDcrawPackageName}_FOUND) add_definitions(-DKDCRAW_FOUND) endif() set_package_properties(${KDcrawPackageName} PROPERTIES URL "https://commits.kde.org/libkdcraw" DESCRIPTION "C++ interface around LibRaw library used to decode RAW picture files" TYPE OPTIONAL ) option(WITHOUT_X11 "Build without X11 integration (disables finding X11)" OFF) if(NOT WITHOUT_X11) find_package(X11) if(X11_FOUND) if (QT_MAJOR_VERSION STREQUAL "5") find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED X11Extras) endif() # we need to add qt6 lib when we found x11 set(HAVE_X11 TRUE) endif() endif() find_package(kImageAnnotator-Qt6) set_package_properties(kImageAnnotator-Qt6 PROPERTIES URL "https://github.com/ksnip/kImageAnnotator" DESCRIPTION "The kImageAnnotator library provides tools to annotate" TYPE REQUIRED) if(kImageAnnotator-Qt6_FOUND) find_package(kColorPicker-Qt6 REQUIRED) set(KIMAGEANNOTATOR_FOUND 1) endif() configure_file(config-gwenview.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-gwenview.h) include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_definitions(-DQT_NO_URL_CAST_FROM_STRING) function(JoinListAsString VALUES GLUE OUTPUT) string(REPLACE ";" "${GLUE}" _TMP_STR "${VALUES}") set(${OUTPUT} "${_TMP_STR}" PARENT_SCOPE) endfunction() set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(IMAGE_MIME_TYPES_LIST image/avif image/gif image/heif image/jpeg image/jxl image/png image/bmp image/x-eps image/x-icns image/x-ico image/x-portable-bitmap image/x-portable-graymap image/x-portable-pixmap image/x-xbitmap image/x-xpixmap image/tiff image/x-psd image/x-webp image/webp image/x-tga image/x-xcf application/x-krita ) if (KF6KDcraw_FOUND) list(APPEND IMAGE_MIME_TYPES_LIST image/x-kde-raw image/x-canon-cr2 image/x-canon-crw image/x-kodak-dcr image/x-adobe-dng image/x-kodak-k25 image/x-kodak-kdc image/x-minolta-mrw image/x-nikon-nef image/x-olympus-orf image/x-pentax-pef image/x-fuji-raf image/x-panasonic-rw image/x-sony-sr2 image/x-sony-srf image/x-sigma-x3f image/x-sony-arw image/x-panasonic-rw2 ) endif() JoinListAsString("${IMAGE_MIME_TYPES_LIST}" ";" IMAGE_MIME_TYPES) ## dirs to build add_subdirectory(lib) add_subdirectory(app) add_subdirectory(importer) add_subdirectory(part) add_subdirectory(tests) add_subdirectory(icons) add_subdirectory(images) add_subdirectory(cursors) add_subdirectory(color-schemes) add_subdirectory(doc) ecm_qt_install_logging_categories(EXPORT GWENVIEW FILE gwenview.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}) ki18n_install(po) if(KF6DocTools_FOUND) kdoctools_install(po) endif() feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) include(KDEClangFormat) # add clang-format target file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c) kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) include(KDEGitCommitHooks) kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)