From 913d437822f23730d10bf97c3ed9201f936a33a2 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Sun, 3 Apr 2022 11:52:53 +0200 Subject: [PATCH] Make all optional dependencies REQUIRED by default You can opt-out using the FORCE_NOT_REQUIRED_DEPENDENCIES option We want people to always build as much of the optional dependencies as possible, so force them to spell out what they don't want And except on Android because two reasons: * The gitlab CI doesn't have some dependencies we actually have available * Some dependencies are not really available --- CMakeLists.txt | 165 ++++++++++++++++++++++++++----------------------- 1 file changed, 89 insertions(+), 76 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 86d1dc6ad..cd14c3e37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,39 @@ set(KF5_REQUIRED_VERSION "5.68.0") # Remember to update the KF_DEPRECATED_WARNIN set(OKULAR_UI "" CACHE STRING "Which Okular user interface to build. Possible values: desktop, mobile, both. Default: desktop (except on Android, where it is 'mobile')") +option(FORCE_NOT_REQUIRED_DEPENDENCIES "List (semicolon-separated) of dependencies that will be downgraded from REQUIRED to RECOMMENDED") + +if (ANDROID AND (NOT FORCE_NOT_REQUIRED_DEPENDENCIES) AND (NOT FORCE_NOT_REQUIRED_DEPENDENCIES STREQUAL "")) + set(FORCE_NOT_REQUIRED_DEPENDENCIES "KF5Wallet;KF5DocTools;KF5JS;TIFF;JPEG;LibSpectre;KF5KExiv2;CHM;KF5KHtml;LibZip;DjVuLibre;EPub;Discount;") +endif() + +function(set_okular_optional_package_properties _name _props) + if(NOT "${_props}" STREQUAL "PROPERTIES") + message(FATAL_ERROR "PROPERTIES keyword is missing in set_okular_optional_package_properties() call.") + endif() + + set(options) # none + set(oneValueArgs DESCRIPTION URL PURPOSE) + set(multiValueArgs) # none + + CMAKE_PARSE_ARGUMENTS(_SPP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(_SPP_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown keywords given to set_okular_optional_package_properties(): \"${_SPP_UNPARSED_ARGUMENTS}\"") + endif() + + set(DEPENDENCY_TYPE "REQUIRED") + if (${_name} IN_LIST FORCE_NOT_REQUIRED_DEPENDENCIES) + set(DEPENDENCY_TYPE "RECOMMENDED") + endif() + set_package_properties(${_name} PROPERTIES + TYPE ${DEPENDENCY_TYPE} + DESCRIPTION ${_SPP_DESCRIPTION} + URL ${_SPP_URL} + PURPOSE "${_SPP_PURPOSE} You can make the dependency optional adding ${_name} to the FORCE_NOT_REQUIRED_DEPENDENCIES cmake option" + ) +endfunction() + if(OKULAR_UI STREQUAL "") if(ANDROID) set(OKULAR_UI "mobile") @@ -70,15 +103,6 @@ ecm_setup_version(${PROJECT_VERSION} PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/Okular5ConfigVersion.cmake") find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED COMPONENTS Core Test Widgets PrintSupport Svg Qml Quick) -if (BUILD_DESKTOP) - find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED COMPONENTS DBus) -endif() -find_package(Qt5 ${QT_REQUIRED_VERSION} OPTIONAL_COMPONENTS TextToSpeech) -if (NOT Qt5TextToSpeech_FOUND) - message(STATUS "Qt5TextToSpeech not found, speech features will be disabled") -else() - add_definitions(-DHAVE_SPEECH) -endif() if(ANDROID) find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED COMPONENTS AndroidExtras) @@ -91,13 +115,6 @@ ecm_setup_qtplugin_macro_names( PACKAGE_SETUP_AUTOMOC_VARIABLES ) -set(optionalComponents) -if (ANDROID) -# we want to make sure that generally all components are found - - set(optionalComponents "OPTIONAL_COMPONENTS") -endif() - find_package(KF5 ${KF5_REQUIRED_VERSION} REQUIRED COMPONENTS Archive Bookmarks @@ -109,23 +126,57 @@ find_package(KF5 ${KF5_REQUIRED_VERSION} REQUIRED COMPONENTS KIO ThreadWeaver WindowSystem - ${optionalComponents} - DocTools - JS - Wallet ) -if (BUILD_DESKTOP) - find_package(KF5 ${KF5_REQUIRED_VERSION} REQUIRED COMPONENTS Parts Crash IconThemes TextWidgets) -endif() - +find_package(KF5Wallet ${KF5_REQUIRED_VERSION}) +set_okular_optional_package_properties(KF5Wallet PROPERTIES + PURPOSE "Required for document storing passwords in secure wallets.") if(KF5Wallet_FOUND) add_definitions(-DWITH_KWALLET=1) endif() + +find_package(KF5DocTools ${KF5_REQUIRED_VERSION}) +set_okular_optional_package_properties(KF5DocTools PROPERTIES + PURPOSE "Required for compiling and installing the user documentation.") + +find_package(KF5JS ${KF5_REQUIRED_VERSION}) +set_okular_optional_package_properties(KF5JS PROPERTIES + PURPOSE "Required for supporting JavaScript in PDF documents") if(KF5JS_FOUND) add_definitions(-DWITH_KJS=1) endif() +if (BUILD_DESKTOP) + find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED COMPONENTS DBus) + find_package(KF5 ${KF5_REQUIRED_VERSION} REQUIRED COMPONENTS Parts Crash IconThemes TextWidgets) + + find_package(KF5Purpose) + set_okular_optional_package_properties(KF5Purpose PROPERTIES + DESCRIPTION "A framework for services and actions integration" + PURPOSE "Required for enabling the share menu.") + if (KF5Purpose_FOUND) + set(PURPOSE_FOUND 1) + else() + set(PURPOSE_FOUND 0) + endif() + + find_package(Qt5TextToSpeech ${QT_REQUIRED_VERSION} CONFIG) + set_okular_optional_package_properties(Qt5TextToSpeech PROPERTIES + PURPOSE "Enables speech features.") + if (Qt5TextToSpeech_FOUND) + add_definitions(-DHAVE_SPEECH) + endif() +endif() + +if (BUILD_MOBILE) + find_package(KF5Kirigami2) + set_package_properties(KF5Kirigami2 PROPERTIES + DESCRIPTION "A QtQuick based components set" + PURPOSE "Required at runtime by the mobile app" + TYPE RUNTIME + ) +endif() + if(NOT WIN32 AND NOT ANDROID) find_package(KF5 ${KF5_REQUIRED_VERSION} REQUIRED COMPONENTS Activities @@ -133,126 +184,88 @@ if(NOT WIN32 AND NOT ANDROID) set_package_properties("KF5Activities" PROPERTIES DESCRIPTION "Activities interface library" URL "https://api.kde.org/frameworks/kactivities/html/" - TYPE RECOMMENDED PURPOSE "Required for Activities integration.") endif() -find_package(KF5Kirigami2) -set_package_properties(KF5Kirigami2 PROPERTIES - DESCRIPTION "A QtQuick based components set" - PURPOSE "Required at runtime by the mobile app" - TYPE RUNTIME -) find_package(Phonon4Qt5 CONFIG REQUIRED) -find_package(KF5Purpose) -set_package_properties(KF5Purpose PROPERTIES - DESCRIPTION "A framework for services and actions integration" - PURPOSE "Required for enabling the share menu in Okular" - TYPE OPTIONAL -) -if (KF5Purpose_FOUND) - set(PURPOSE_FOUND 1) -else() - set(PURPOSE_FOUND 0) -endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules) find_package(ZLIB REQUIRED) find_package(Poppler "0.86.0" COMPONENTS Qt5) -set_package_properties("Poppler" PROPERTIES - TYPE RECOMMENDED +set_okular_optional_package_properties(Poppler PROPERTIES PURPOSE "Support for PDF files in okular.") find_package(Freetype) -set_package_properties("FreeType" PROPERTIES +set_okular_optional_package_properties(Freetype PROPERTIES DESCRIPTION "A font rendering engine" URL "https://www.freetype.org" - TYPE RECOMMENDED PURPOSE "Provides freetype font support in the okular DVI generator.") find_package(TIFF) -set_package_properties("libTIFF" PROPERTIES +set_okular_optional_package_properties(TIFF PROPERTIES DESCRIPTION "A library for reading and writing TIFF formatted files," URL "http://www.libtiff.org" - TYPE RECOMMENDED PURPOSE "Support for TIFF files in okular.") find_package(JPEG) -set_package_properties("JPEG" PROPERTIES +set_okular_optional_package_properties(JPEG PROPERTIES DESCRIPTION "A library for reading and writing JPEG image files." URL "https://www.ijg.org" - TYPE RECOMMENDED PURPOSE "Support for PalmDB documents in okular.") set(LIBSPECTRE_MINIMUM_VERSION "0.2") find_package(LibSpectre "${LIBSPECTRE_MINIMUM_VERSION}") -set_package_properties(LibSpectre PROPERTIES +set_okular_optional_package_properties(LibSpectre PROPERTIES DESCRIPTION "A PostScript rendering library" URL "https://libspectre.freedesktop.org" - TYPE RECOMMENDED PURPOSE "Support for PS files in okular.") find_package(KF5KExiv2 CONFIG) -set_package_properties("LibKExiv2" PROPERTIES +set_okular_optional_package_properties(KF5KExiv2 PROPERTIES DESCRIPTION "Wrapper around Exiv2 library" URL "https://commits.kde.org/libkexiv2" - TYPE RECOMMENDED - PURPOSE "Support for image files") + PURPOSE "Support for exif rotation in image files.") find_package(CHM) -set_package_properties("CHM" PROPERTIES +set_okular_optional_package_properties(CHM PROPERTIES DESCRIPTION "A library for dealing with Microsoft ITSS/CHM format files" URL "http://www.jedrea.com/chmlib" - TYPE RECOMMENDED PURPOSE "Support CHM files in okular.") find_package(KF5KHtml CONFIG) -set_package_properties("KF5KHtml" PROPERTIES +set_okular_optional_package_properties(KF5KHtml PROPERTIES DESCRIPTION "HTML rendering library" - TYPE RECOMMENDED PURPOSE "Support CHM files in okular.") find_package(LibZip) -set_package_properties("LibZip" PROPERTIES +set_okular_optional_package_properties(LibZip PROPERTIES DESCRIPTION "A library for reading, creating, and modifying zip archives" URL "https://libzip.org/" - TYPE RECOMMENDED PURPOSE "Support CHM files in okular.") find_package(DjVuLibre "3.5.17") -set_package_properties("DjVuLibre" PROPERTIES +set_okular_optional_package_properties(DjVuLibre PROPERTIES DESCRIPTION "A library for dealing with DjVu formatted files" URL "https://djvulibre.djvuzone.org" - TYPE RECOMMENDED PURPOSE "Support for DjVu files in okular.") -find_package(ZLIB) -set_package_properties("ZLib" PROPERTIES - DESCRIPTION "The Zlib compression library" - URL "https://www.zlib.net" - TYPE RECOMMENDED - PURPOSE "Support for Plucker files in Okular.") - find_package(EPub) -set_package_properties("libepub" PROPERTIES +set_okular_optional_package_properties(EPub PROPERTIES DESCRIPTION "A library for reading EPub documents" URL "http://sourceforge.net/projects/ebook-tools" - TYPE RECOMMENDED PURPOSE "Support for EPub documents in Okular.") find_package(QMobipocket "2" CONFIG) -set_package_properties("libqmobipocket" PROPERTIES +set_okular_optional_package_properties(QMobipocket PROPERTIES DESCRIPTION "A library for reading Mobipocket documents" URL "https://commits.kde.org/kdegraphics-mobipocket" - TYPE RECOMMENDED PURPOSE "Support for Mobipocket documents in Okular.") find_package(Discount) -set_package_properties("Discount" PROPERTIES +set_okular_optional_package_properties(Discount PROPERTIES DESCRIPTION "A library that gives you formatting functions suitable for marking down entire documents or lines of text" URL "https://www.pell.portland.or.us/~orc/Code/discount/" - TYPE RECOMMENDED PURPOSE "Support for Markdown documents in Okular.") add_definitions(-DQT_USE_QSTRINGBUILDER)