diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e50ba5..1f7df84 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,84 +1,88 @@ cmake_minimum_required(VERSION 3.0) set(KF5_VERSION "5.37.0") # handled by release scripts project(KConfig VERSION ${KF5_VERSION}) include(FeatureSummary) find_package(ECM 5.36.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}) set(REQUIRED_QT_VERSION 5.6.0) -find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Gui Xml) +find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Xml) +option(KCONFIG_USE_GUI "Build components using Qt5Gui" ON) +if(KCONFIG_USE_GUI) + find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Gui) +endif() include(KDEInstallDirs) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) include(GenerateExportHeader) include(ECMSetupVersion) include(ECMGenerateHeaders) include(ECMMarkNonGuiExecutable) include(ECMPoQmTools) include(ECMAddQch) 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 KCONFIG VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kconfig_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5ConfigConfigVersion.cmake" SOVERSION 5) add_subdirectory(src) add_subdirectory(autotests) include (ECMPoQmTools) if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ecm_install_po_files_as_qm(po) endif() # create a Config.cmake and a ConfigVersion.cmake file and install them set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5Config") if (BUILD_QCH) ecm_install_qch_export( TARGETS KF5Config_QCH FILE KF5ConfigQchTargets.cmake DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5ConfigQchTargets.cmake\")") endif() include(CMakePackageConfigHelpers) configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KF5ConfigConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5ConfigConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5ConfigConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5ConfigConfigVersion.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/KF5ConfigMacros.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) install(EXPORT KF5ConfigTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5ConfigTargets.cmake NAMESPACE KF5:: COMPONENT Devel) install(EXPORT KF5ConfigCompilerTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5ConfigCompilerTargets.cmake NAMESPACE KF5:: COMPONENT Devel) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kconfig_version.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index a07636d..fd3816d 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -1,70 +1,71 @@ remove_definitions(-DQT_NO_CAST_FROM_ASCII) include(ECMAddTests) find_package(Qt5Test ${REQUIRED_QT_VERSION} CONFIG QUIET) find_package(Qt5Concurrent ${REQUIRED_QT_VERSION} CONFIG QUIET) if(NOT Qt5Test_FOUND) message(STATUS "Qt5Test not found, autotests will not be built.") return() endif() if(NOT Qt5Concurrent_FOUND) message(STATUS "Qt5Concurrent not found, autotests will not be built.") return() endif() # compile KEntryMap into the test since it's not exported set(kentrymaptest_SRCS kentrymaptest.cpp ../src/core/kconfigdata.cpp) ecm_add_test(${kentrymaptest_SRCS} TEST_NAME kentrymaptest LINK_LIBRARIES Qt5::Test ) target_include_directories(kentrymaptest PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src/core) # compile KConfigUtils into the test since it's not exported set(test_kconfigutils_SRCS test_kconfigutils ../src/kconf_update/kconfigutils.cpp) ecm_add_test(${test_kconfigutils_SRCS} TEST_NAME test_kconfigutils LINK_LIBRARIES KF5::ConfigCore Qt5::Test ) target_include_directories(test_kconfigutils PRIVATE ../src/kconf_update) qt5_add_resources(sharedconfigresources sharedconfigresources.qrc) ecm_add_test(ksharedconfigtest ${sharedconfigresources} TEST_NAME kconfigcore-ksharedconfigtest LINK_LIBRARIES KF5::ConfigCore Qt5::Test Qt5::Concurrent) # test for fallback to :/kconfig/xxxx config resource qt5_add_resources(fallbackconfigresources fallbackconfigresources.qrc) ecm_add_test(fallbackconfigresourcestest ${fallbackconfigresources} TEST_NAME kconfigcore-fallbackconfigresourcestest LINK_LIBRARIES KF5::ConfigCore Qt5::Test Qt5::Concurrent) ecm_add_tests( kconfignokdehometest.cpp kconfigtest.cpp kdesktopfiletest.cpp test_kconf_update.cpp ksharedconfig_in_global_object NAME_PREFIX kconfigcore- LINK_LIBRARIES KF5::ConfigCore Qt5::Test Qt5::Concurrent ) target_include_directories(test_kconf_update PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../src/kconf_update) +if(TARGET Qt5::Gui) ecm_add_tests( kconfigguitest.cpp kconfigloadertest.cpp kconfigskeletontest.cpp kstandardshortcuttest.cpp NAME_PREFIX kconfiggui- LINK_LIBRARIES KF5::ConfigGui Qt5::Test ) # These tests do a global cleanup of ~/.qttest, so they can't run in parallel set_tests_properties(kconfigcore-kconfigtest PROPERTIES RUN_SERIAL TRUE) set_tests_properties(kconfigcore-kconfignokdehometest PROPERTIES RUN_SERIAL TRUE) set_tests_properties(kconfiggui-kconfigguitest PROPERTIES RUN_SERIAL TRUE) add_subdirectory(kconfig_compiler) - +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 998a1d5..d4ca886 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,34 +1,36 @@ add_subdirectory(core) -add_subdirectory(gui) +if(TARGET Qt5::Gui) + add_subdirectory(gui) +endif() add_subdirectory(kconfig_compiler) add_subdirectory(kconf_update) add_subdirectory(kreadconfig) if (BUILD_QCH) ecm_add_qch( KF5Config_QCH NAME KConfig BASE_NAME KF5Config VERSION ${KF5_VERSION} ORG_DOMAIN org.kde SOURCES # using only public headers, to cover only public API ${KConfigCore_APIDOX_SRCS} ${KConfigGui_APIDOX_SRCS} "${CMAKE_SOURCE_DIR}/docs/options.md" MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md" LINK_QCHS Qt5Core_QCH Qt5Xml_QCH Qt5Gui_QCH BLANK_MACROS KCONFIGCORE_EXPORT KCONFIGCORE_DEPRECATED_EXPORT KCONFIGCORE_DEPRECATED KCONFIGGUI_EXPORT KCONFIGGUI_DEPRECATED_EXPORT KCONFIGGUI_DEPRECATED TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} COMPONENT Devel ) endif() diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 9b7491c..46fabd5 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,91 +1,88 @@ - -find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE) - set(libkconfigcore_SRCS kconfig.cpp kconfigbase.cpp kconfigdata.cpp kconfiggroup.cpp kconfigbackend.cpp kconfigini.cpp kdesktopfile.cpp ksharedconfig.cpp kcoreconfigskeleton.cpp kauthorized.cpp kemailsettings.cpp ) add_library(KF5ConfigCore ${libkconfigcore_SRCS}) generate_export_header(KF5ConfigCore BASE_NAME KConfigCore) add_library(KF5::ConfigCore ALIAS KF5ConfigCore) target_compile_definitions(KF5ConfigCore PRIVATE KCONF_UPDATE_INSTALL_LOCATION="${KDE_INSTALL_FULL_LIBEXECDIR_KF5}/$" ) target_include_directories(KF5ConfigCore INTERFACE "$") target_link_libraries(KF5ConfigCore PUBLIC Qt5::Core) if(WIN32) target_link_libraries(KF5ConfigCore PRIVATE ${KDEWIN_LIBRARIES}) endif() set_target_properties(KF5ConfigCore PROPERTIES VERSION ${KCONFIG_VERSION_STRING} SOVERSION ${KCONFIG_SOVERSION} EXPORT_NAME ConfigCore ) ecm_generate_headers(KConfigCore_HEADERS HEADER_NAMES KAuthorized KConfig KConfigBase KConfigGroup KDesktopFile KSharedConfig KCoreConfigSkeleton KEMailSettings ConversionCheck REQUIRED_HEADERS KConfigCore_HEADERS ) find_package(PythonModuleGeneration) if (PythonModuleGeneration_FOUND) ecm_generate_python_binding( TARGET KF5::ConfigCore PYTHONNAMESPACE PyKF5 MODULENAME KConfigCore RULES_FILE "${CMAKE_SOURCE_DIR}/cmake/rules_PyKF5.py" INSTALL_DIR_SUFFIX ${KDE_INSTALL_PYTHONBINDINGSDIR} SIP_DEPENDS QtCore/QtCoremod.sip HEADERS kauthorized.h kconfig.h kconfigbase.h kconfiggroup.h kdesktopfile.h ksharedconfig.h kcoreconfigskeleton.h kemailsettings.h conversioncheck.h ) endif() install(TARGETS KF5ConfigCore EXPORT KF5ConfigTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kconfigcore_export.h ${KConfigCore_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KConfigCore COMPONENT Devel ) # make available to ecm_add_qch in parent folder set(KConfigCore_APIDOX_SRCS ${KConfigCore_HEADERS} PARENT_SCOPE) include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME KConfigCore LIB_NAME KF5ConfigCore DEPS "core" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KConfigCore) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 9659326..08786d3 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,75 +1,71 @@ - -find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE) -find_package(Qt5Xml ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE) - set(libkconfiggui_SRCS kconfiggui.cpp kconfiggroupgui.cpp kconfigloader.cpp kconfigskeleton.cpp kstandardshortcut.cpp kwindowconfig.cpp ) ecm_create_qm_loader(libkconfiggui_SRCS kconfig5_qt) add_library(KF5ConfigGui ${libkconfiggui_SRCS}) generate_export_header(KF5ConfigGui BASE_NAME KConfigGui) add_library(KF5::ConfigGui ALIAS KF5ConfigGui) target_include_directories(KF5ConfigGui INTERFACE "$") target_link_libraries(KF5ConfigGui PUBLIC Qt5::Gui Qt5::Xml KF5::ConfigCore) set_target_properties(KF5ConfigGui PROPERTIES VERSION ${KCONFIG_VERSION_STRING} SOVERSION ${KCONFIG_SOVERSION} EXPORT_NAME ConfigGui ) ecm_generate_headers(KConfigGui_HEADERS HEADER_NAMES KConfigGui KConfigLoader KConfigSkeleton KStandardShortcut KWindowConfig REQUIRED_HEADERS KConfigGui_HEADERS ) find_package(PythonModuleGeneration) if (PythonModuleGeneration_FOUND) ecm_generate_python_binding( TARGET KF5::ConfigGui PYTHONNAMESPACE PyKF5 MODULENAME KConfigGui RULES_FILE "${CMAKE_SOURCE_DIR}/cmake/rules_PyKF5.py" INSTALL_DIR_SUFFIX ${KDE_INSTALL_PYTHONBINDINGSDIR} SIP_INCLUDES "${CMAKE_BINARY_DIR}/src/core/sip" SIP_DEPENDS QtGui/QtGuimod.sip PyKF5/KConfigCore/KConfigCoremod.sip HEADERS kconfiggui.h kconfigloader.h kconfigskeleton.h kstandardshortcut.h kwindowconfig.h ) endif() install(TARGETS KF5ConfigGui EXPORT KF5ConfigTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kconfiggui_export.h ${KConfigGui_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KConfigGui COMPONENT Devel ) # make available to ecm_add_qch in parent folder set(KConfigGui_APIDOX_SRCS ${KConfigGui_HEADERS} PARENT_SCOPE) include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME KConfigGui LIB_NAME KF5ConfigGui DEPS "gui xml KConfigCore" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KConfigGui) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) diff --git a/src/kconf_update/CMakeLists.txt b/src/kconf_update/CMakeLists.txt index b1342a8..db11511 100644 --- a/src/kconf_update/CMakeLists.txt +++ b/src/kconf_update/CMakeLists.txt @@ -1,26 +1,24 @@ -find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE) - remove_definitions(-DQT_NO_CAST_FROM_ASCII) ########### next target ############### set(kconf_update_SRCS kconf_update.cpp kconfigutils.cpp ) add_executable(kconf_update ${kconf_update_SRCS}) add_executable(KF5::kconf_update ALIAS kconf_update) target_link_libraries(kconf_update Qt5::Core KF5::ConfigCore) include(ECMMarkNonGuiExecutable) ecm_mark_nongui_executable(kconf_update) file( GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/kconf-exec.h CONTENT "#define KCONF_UPDATE_EXECUTABLE \"$\"" ) configure_file(config-kconf.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kconf.h ) # Although this is mostly an internal binary (hence installing it in # KF5_LIBEXEC_INSTALL_DIR), it is used by kded, and so we export its location install(TARGETS kconf_update EXPORT KF5ConfigTargets DESTINATION ${KDE_INSTALL_LIBEXECDIR_KF5}) diff --git a/src/kconfig_compiler/CMakeLists.txt b/src/kconfig_compiler/CMakeLists.txt index 004a649..dc0a08d 100644 --- a/src/kconfig_compiler/CMakeLists.txt +++ b/src/kconfig_compiler/CMakeLists.txt @@ -1,25 +1,23 @@ set(kconfig_compiler_SRCS kconfig_compiler.cpp) add_executable(kconfig_compiler ${kconfig_compiler_SRCS}) set_target_properties(kconfig_compiler PROPERTIES OUTPUT_NAME "kconfig_compiler_kf5" ) if(CMAKE_TOOLCHAIN_FILE) if(BUILD_TESTING) message(WARNING "Testing should be disabled on cross-compilation") endif() else() add_executable(KF5::kconfig_compiler ALIAS kconfig_compiler) endif() -find_package(Qt5Xml ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE) - target_link_libraries(kconfig_compiler Qt5::Xml) ecm_mark_nongui_executable(kconfig_compiler) install(TARGETS kconfig_compiler EXPORT KF5ConfigCompilerTargets DESTINATION ${KDE_INSTALL_LIBEXECDIR_KF5})