diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cb4f075..0be86c8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,127 +1,148 @@ cmake_minimum_required(VERSION 3.0) set(KF5_VERSION "5.35.0") # handled by release scripts set(KF5_DEP_VERSION "5.35.0") # handled by release scripts project(KNewStuff VERSION ${KF5_VERSION}) include(FeatureSummary) find_package(ECM 5.35.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) include(ECMQtDeclareLoggingCategory) include(KDEInstallDirs) include(KDECMakeSettings) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) set(REQUIRED_QT_VERSION 5.6.0) find_package(Qt5 ${REQUIRED_QT_VERSION} NO_MODULE REQUIRED COMPONENTS Widgets Xml) find_package(Qt5 ${REQUIRED_QT_VERSION} NO_MODULE COMPONENTS Qml Quick) # Not part of kdelibs find_package(KF5Archive ${KF5_DEP_VERSION} REQUIRED) find_package(KF5Completion ${KF5_DEP_VERSION} REQUIRED) find_package(KF5Config ${KF5_DEP_VERSION} REQUIRED) find_package(KF5CoreAddons ${KF5_DEP_VERSION} REQUIRED) find_package(KF5I18n ${KF5_DEP_VERSION} REQUIRED) find_package(KF5IconThemes ${KF5_DEP_VERSION} REQUIRED) find_package(KF5KIO ${KF5_DEP_VERSION} REQUIRED) find_package(KF5ItemViews ${KF5_DEP_VERSION} REQUIRED) find_package(KF5Service ${KF5_DEP_VERSION} REQUIRED) find_package(KF5TextWidgets ${KF5_DEP_VERSION} REQUIRED) find_package(KF5WidgetsAddons ${KF5_DEP_VERSION} REQUIRED) find_package(KF5XmlGui ${KF5_DEP_VERSION} REQUIRED) include(GenerateExportHeader) include(ECMSetupVersion) include(ECMGenerateHeaders) +include(ECMAddQch) find_package(KF5Attica ${KF5_DEP_VERSION} CONFIG REQUIRED) set_package_properties(KF5Attica PROPERTIES DESCRIPTION "A Qt library that implements the Open Collaboration Services API" PURPOSE "Support for Get Hot New Stuff in KNewStuff" URL "https://projects.kde.org/attica" TYPE REQUIRED ) +option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) +add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") ecm_setup_version(PROJECT VARIABLE_PREFIX KNEWSTUFF VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/knewstuff_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffConfigVersion.cmake" SOVERSION 5) ecm_setup_version(PROJECT VARIABLE_PREFIX KNEWSTUFFCORE VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/knewstuffcore_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffCoreConfigVersion.cmake" SOVERSION 5) ecm_setup_version(PROJECT VARIABLE_PREFIX KNEWSTUFFQUICK VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/knewstuffquick_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffQuickConfigVersion.cmake" SOVERSION 5) add_definitions(-DTRANSLATION_DOMAIN=\"knewstuff5\") if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ki18n_install(po) endif() add_subdirectory(data) add_subdirectory(src) if (BUILD_TESTING) add_subdirectory(autotests) add_subdirectory(tests) endif() set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5NewStuff") set(CMAKECONFIGCORE_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5NewStuffCore") set(CMAKECONFIGQUICK_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5NewStuffQuick") +if (BUILD_QCH) + ecm_install_qch_export( + TARGETS KF5NewStuff_QCH + FILE KF5NewStuffQchTargets.cmake + DESTINATION "${CMAKECONFIG_INSTALL_DIR}" + COMPONENT Devel + ) + set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5NewStuffQchTargets.cmake\")") + ecm_install_qch_export( + TARGETS KF5NewStuffCore_QCH + FILE KF5NewStuffCoreQchTargets.cmake + DESTINATION "${CMAKECONFIGCORE_INSTALL_DIR}" + COMPONENT Devel + ) + set(PACKAGE_INCLUDE_CORE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5NewStuffCoreQchTargets.cmake\")") + # TODO: KF5NewStuffQuick +endif() + include(CMakePackageConfigHelpers) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/KF5NewStuffConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} ) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/KF5NewStuffCoreConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffCoreConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIGCORE_INSTALL_DIR} ) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/KF5NewStuffQuickConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffQuickConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIGQUICK_INSTALL_DIR} ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffConfigVersion.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffCoreConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffCoreConfigVersion.cmake" DESTINATION "${CMAKECONFIGCORE_INSTALL_DIR}" COMPONENT Devel ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffQuickConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5NewStuffQuickConfigVersion.cmake" DESTINATION "${CMAKECONFIGQUICK_INSTALL_DIR}" COMPONENT Devel ) install(EXPORT KF5NewStuffTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5NewStuffTargets.cmake NAMESPACE KF5:: ) install(EXPORT KF5NewStuffCoreTargets DESTINATION "${CMAKECONFIGCORE_INSTALL_DIR}" FILE KF5NewStuffCoreTargets.cmake NAMESPACE KF5:: ) install(EXPORT KF5NewStuffQuickTargets DESTINATION "${CMAKECONFIGQUICK_INSTALL_DIR}" FILE KF5NewStuffQuickTargets.cmake NAMESPACE KF5:: ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/knewstuff_version.h ${CMAKE_CURRENT_BINARY_DIR}/knewstuffcore_version.h ${CMAKE_CURRENT_BINARY_DIR}/knewstuffquick_version.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/KF5NewStuffConfig.cmake.in b/KF5NewStuffConfig.cmake.in index 70139ecc..bffe182b 100644 --- a/KF5NewStuffConfig.cmake.in +++ b/KF5NewStuffConfig.cmake.in @@ -1,11 +1,12 @@ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) find_dependency(Qt5Widgets @REQUIRED_QT_VERSION@) find_dependency(KF5XmlGui "@KF5_DEP_VERSION@") find_dependency(KF5Service "@KF5_DEP_VERSION@") find_dependency(KF5NewStuffCore "@KF5_DEP_VERSION@") include("${CMAKE_CURRENT_LIST_DIR}/KF5NewStuffTargets.cmake") +@PACKAGE_INCLUDE_QCHTARGETS@ diff --git a/KF5NewStuffCoreConfig.cmake.in b/KF5NewStuffCoreConfig.cmake.in index b549f12b..9fc2f986 100644 --- a/KF5NewStuffCoreConfig.cmake.in +++ b/KF5NewStuffCoreConfig.cmake.in @@ -1,6 +1,7 @@ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) find_dependency(KF5Attica "@KF5_DEP_VERSION@") include("${CMAKE_CURRENT_LIST_DIR}/KF5NewStuffCoreTargets.cmake") +@PACKAGE_INCLUDE_CORE_QCHTARGETS@ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a4c02b68..7ec2e959 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,111 +1,141 @@ add_definitions(-DKDE_DEFAULT_DEBUG_AREA=550) remove_definitions(-DQT_NO_CAST_FROM_ASCII) add_subdirectory(core) set(KNewStuff_SRCS downloaddialog.cpp downloadwidget.cpp downloadmanager.cpp entry.cpp button.cpp knewstuffaction.cpp kmoretools/kmoretools.cpp kmoretools/kmoretoolsconfigdialog_p.cpp kmoretools/kmoretoolsmenufactory.cpp kmoretools/kmoretoolspresets.cpp ui/entrydetailsdialog.cpp ui/imagepreviewwidget.cpp ui/itemsview.cpp ui/itemsviewdelegate.cpp ui/itemsgridviewdelegate.cpp ui/itemsviewbasedelegate.cpp ui/progressindicator.cpp ui/widgetquestionlistener.cpp uploaddialog.cpp ) ecm_qt_declare_logging_category(KNewStuff_SRCS HEADER knewstuff_debug.h IDENTIFIER KNEWSTUFF CATEGORY_NAME org.kde.knewstuff) ki18n_wrap_ui(KNewStuff_SRCS downloadwidget.ui uploaddialog.ui kmoretools/ui/kmoretoolsconfigwidget.ui ) add_library(KF5NewStuff ${KNewStuff_SRCS} ) add_library(KF5::NewStuff ALIAS KF5NewStuff) generate_export_header(KF5NewStuff BASE_NAME KNewStuff EXPORT_FILE_NAME knewstuff_export.h) target_include_directories(KF5NewStuff PUBLIC "$" INTERFACE "$") target_link_libraries(KF5NewStuff PUBLIC KF5::NewStuffCore KF5::XmlGui # For KActionCollection in knewstuffaction.h KF5::Service # For KMoreTools Qt5::Widgets PRIVATE KF5::KIOCore # For network fetching operations KF5::KIOWidgets # For KUrlRequester KF5::Completion # For KLineEdit in download dialog KF5::I18n # For translations KF5::ItemViews # For buttons on download dialog KF5::IconThemes # For KIcon KF5::TextWidgets # For KTextEdit in upload dialog ) set_target_properties(KF5NewStuff PROPERTIES VERSION ${KNEWSTUFF_VERSION_STRING} SOVERSION ${KNEWSTUFF_SOVERSION} EXPORT_NAME NewStuff ) +set(KNewStuff_HEADERS + knewstuffaction.h +) + ecm_generate_headers(KNewStuff_CamelCase_HEADERS HEADER_NAMES DownloadDialog DownloadWidget DownloadManager UploadDialog Entry Button REQUIRED_HEADERS KNewStuff_HEADERS PREFIX KNS3 ) # For KMoreTools: ecm_generate_headers(KNewStuff_CamelCase_HEADERS_KMoreTools HEADER_NAMES KMoreTools KMoreToolsMenuFactory KMoreToolsPresets RELATIVE kmoretools REQUIRED_HEADERS KNewStuff_HEADERS_KMoreTools PREFIX KNS3 ) install(FILES ${KNewStuff_CamelCase_HEADERS_KMoreTools} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KNewStuff3/KNS3 COMPONENT Devel) install(FILES ${KNewStuff_HEADERS_KMoreTools} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KNewStuff3/kns3 COMPONENT Devel ) install(FILES ${KNewStuff_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KNewStuff3/KNS3 COMPONENT Devel) install(TARGETS KF5NewStuff EXPORT KF5NewStuffTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/knewstuff_export.h - knewstuffaction.h ${KNewStuff_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KNewStuff3/kns3 COMPONENT Devel ) +if(BUILD_QCH) + ecm_add_qch( + KF5NewStuff_QCH + NAME KNewStuff + BASE_NAME KF5NewStuff + VERSION ${KF5_VERSION} + ORG_DOMAIN org.kde + SOURCES # using only public headers, to cover only public API + ${KNewStuff_HEADERS} + ${KNewStuff_HEADERS_KMoreTools} + MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md" + IMAGE_DIRS "${CMAKE_SOURCE_DIR}/docs/pics" + LINK_QCHS + KF5NewStuffCore_QCH + KF5XmlGui_QCH + KF5Service_QCH + Qt5Widgets_QCH + BLANK_MACROS + KNEWSTUFF_EXPORT + KNEWSTUFF_DEPRECATED + KNEWSTUFF_DEPRECATED_EXPORT + TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} + QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} + COMPONENT Devel + ) +endif() + include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME KNewStuff LIB_NAME KF5NewStuff DEPS "widgets KXmlGui KNewStuffCore" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KNewStuff) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) add_subdirectory(qtquick) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 51338dfd..6d201f1f 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,96 +1,117 @@ set(KNewStuffCore_SRCS author.cpp cache.cpp downloadmanager.cpp engine.cpp entryinternal.cpp imageloader.cpp installation.cpp itemsmodel.cpp provider.cpp security.cpp xmlloader.cpp # A system by which queries can be passed to the user, and responses # gathered, depending on implementation. See question.h for details. question.cpp questionmanager.cpp questionlistener.cpp # A set of minimal KJob based classes, designed to replace the # more powerful KIO based system in places where KIO is not available # for one reason or another. jobs/downloadjob.cpp jobs/filecopyjob.cpp jobs/filecopyworker.cpp jobs/httpjob.cpp jobs/httpworker.cpp ../attica/atticaprovider.cpp ../staticxml/staticxmlprovider.cpp ../upload/atticahelper.cpp ) ecm_qt_declare_logging_category(KNewStuffCore_SRCS HEADER knewstuffcore_debug.h IDENTIFIER KNEWSTUFFCORE CATEGORY_NAME org.kde.knewstuff.core) add_library(KF5NewStuffCore ${KNewStuffCore_SRCS} ) add_library(KF5::NewStuffCore ALIAS KF5NewStuffCore ) generate_export_header(KF5NewStuffCore BASE_NAME KNewStuffCore EXPORT_FILE_NAME knewstuffcore_export.h) # The src/ dir is needed for the entry.h header. This only happens because some # code in Core uses an enum from KNS3::Entry target_include_directories(KF5NewStuffCore PUBLIC "$" INTERFACE "$") target_link_libraries(KF5NewStuffCore PUBLIC KF5::Attica # For interacting with ocs providers, public for uploaddialog slots KF5::CoreAddons PRIVATE KF5::Archive # For decompressing archives KF5::I18n # For translations KF5::ConfigCore Qt5::Gui # For QImage Qt5::Xml ) set_target_properties(KF5NewStuffCore PROPERTIES VERSION ${KNEWSTUFF_VERSION_STRING} SOVERSION ${KNEWSTUFF_SOVERSION} EXPORT_NAME NewStuffCore ) ecm_generate_headers(KNewStuffCore_CamelCase_HEADERS HEADER_NAMES Author Cache DownloadManager Engine EntryInternal Installation ItemsModel Provider Question QuestionListener QuestionManager Security XmlLoader REQUIRED_HEADERS KNewStuffCore_HEADERS PREFIX KNSCore ) install(TARGETS KF5NewStuffCore EXPORT KF5NewStuffCoreTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES ${KNewStuffCore_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KNewStuff3/KNSCore COMPONENT Devel) install(FILES ${KNewStuffCore_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/knewstuffcore_export.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KNewStuff3/knscore COMPONENT Devel) +if(BUILD_QCH) + ecm_add_qch( + KF5NewStuffCore_QCH + NAME KNewStuffCore + BASE_NAME KF5NewStuffCore + VERSION ${KF5_VERSION} + ORG_DOMAIN org.kde + SOURCES ${KNewStuffCore_HEADERS} + LINK_QCHS + KF5Attica_QCH + KF5CoreAddons_QCH + BLANK_MACROS + KNEWSTUFFCORE_EXPORT + KNEWSTUFFCORE_DEPRECATED + KNEWSTUFFCORE_DEPRECATED_EXPORT + TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} + QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} + COMPONENT Devel + ) +endif() + include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME KNewStuffCore LIB_NAME KF5NewStuffCore DEPS "Attica" FILENAME_VAR COREPRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KNewStuff3) install(FILES ${COREPRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})