Fix KF6 framework recipes for Redox build compatibility

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-18 17:58:52 +01:00
parent 7904dc9b3d
commit 5451f25a7a
23 changed files with 177 additions and 116 deletions
@@ -24,7 +24,7 @@ include(ECMQtDeclareLoggingCategory)
include(ECMDeprecationSettings) include(ECMDeprecationSettings)
include(ECMMarkNonGuiExecutable) include(ECMMarkNonGuiExecutable)
include(KDEGitCommitHooks) include(KDEGitCommitHooks)
#######include(ECMQmlModule) ########include(ECMQmlModule)
include(CMakeDependentOption) include(CMakeDependentOption)
@@ -40,6 +40,7 @@ find_package(Qt6 ${REQUIRED_QT_VERSION} NO_MODULE REQUIRED Widgets)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
# shall we use DBus? # shall we use DBus?
# enabled per default on Linux & BSD systems # enabled per default on Linux & BSD systems
@@ -62,7 +63,7 @@ ecm_setup_version(PROJECT VARIABLE_PREFIX KCMUTILS
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF6KCMUtilsConfigVersion.cmake" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF6KCMUtilsConfigVersion.cmake"
SOVERSION 6) SOVERSION 6)
######find_package(KF6KIO ${KF_DEP_VERSION} REQUIRED) #######find_package(KF6KIO ${KF_DEP_VERSION} REQUIRED)
find_package(KF6ItemViews ${KF_DEP_VERSION} REQUIRED) find_package(KF6ItemViews ${KF_DEP_VERSION} REQUIRED)
find_package(KF6ConfigWidgets ${KF_DEP_VERSION} REQUIRED) find_package(KF6ConfigWidgets ${KF_DEP_VERSION} REQUIRED)
find_package(KF6CoreAddons ${KF_DEP_VERSION} REQUIRED) find_package(KF6CoreAddons ${KF_DEP_VERSION} REQUIRED)
@@ -14,8 +14,8 @@ ecm_qt_declare_logging_category(kcmutils_logging_STATIC
add_subdirectory(core) add_subdirectory(core)
######add_subdirectory(qml) #######add_subdirectory(qml)
######add_subdirectory(quick) #######add_subdirectory(quick)
########### kcmutils ############### ########### kcmutils ###############
set(kcmutils_LIB_SRCS set(kcmutils_LIB_SRCS
@@ -118,4 +118,4 @@ ecm_qt_install_logging_categories(
DESTINATION "${KDE_INSTALL_LOGGINGCATEGORIESDIR}" DESTINATION "${KDE_INSTALL_LOGGINGCATEGORIESDIR}"
) )
######add_subdirectory(kcmshell) #######add_subdirectory(kcmshell)
@@ -33,6 +33,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].") set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
@@ -41,6 +41,7 @@ find_package(Qt6 ${REQUIRED_QT_VERSION} NO_MODULE REQUIRED Widgets)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(KF6Codecs ${KF_DEP_VERSION} REQUIRED) find_package(KF6Codecs ${KF_DEP_VERSION} REQUIRED)
find_package(KF6Config ${KF_DEP_VERSION} REQUIRED) find_package(KF6Config ${KF_DEP_VERSION} REQUIRED)
@@ -28,6 +28,7 @@ set(REQUIRED_QT_VERSION 6.6.0)
find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets) find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
# shall we use DBus? # shall we use DBus?
# enabled per default on Linux & BSD systems # enabled per default on Linux & BSD systems
@@ -33,7 +33,7 @@ if(WITH_X11)
find_package(X11 REQUIRED) find_package(X11 REQUIRED)
set(HAVE_X11 TRUE) set(HAVE_X11 TRUE)
endif() endif()
######find_package(Qt6Test REQUIRED) #######find_package(Qt6Test REQUIRED)
include(ECMGenerateExportHeader) include(ECMGenerateExportHeader)
include(ECMSetupVersion) include(ECMSetupVersion)
include(ECMGenerateHeaders) include(ECMGenerateHeaders)
@@ -44,6 +44,7 @@ rm -f CMakeCache.txt
rm -rf CMakeFiles rm -rf CMakeFiles
cmake "${COOKBOOK_SOURCE}" \ cmake "${COOKBOOK_SOURCE}" \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \ -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
-DQT_HOST_PATH="${HOST_BUILD}" \ -DQT_HOST_PATH="${HOST_BUILD}" \
-DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_PREFIX=/usr \
@@ -54,6 +55,15 @@ cmake "${COOKBOOK_SOURCE}" \
-DCMAKE_DISABLE_FIND_PACKAGE_X11=ON \ -DCMAKE_DISABLE_FIND_PACKAGE_X11=ON \
-Wno-dev -Wno-dev
mkdir -p "${COOKBOOK_BUILD}/src"
if [ -e "${HOST_BUILD}/bin/qdbuscpp2xml" ]; then
ln -sf "${HOST_BUILD}/bin/qdbuscpp2xml" "${COOKBOOK_BUILD}/src/Qt6::qdbuscpp2xml"
fi
if [ -e "${HOST_BUILD}/bin/qdbusxml2cpp" ]; then
ln -sf "${HOST_BUILD}/bin/qdbusxml2cpp" "${COOKBOOK_BUILD}/src/Qt6::qdbusxml2cpp"
fi
export PATH="${COOKBOOK_BUILD}/src:${HOST_BUILD}/bin:${PATH}"
cmake --build . -j${COOKBOOK_MAKE_JOBS} || true cmake --build . -j${COOKBOOK_MAKE_JOBS} || true
BUILD_DIR="${COOKBOOK_BUILD}" BUILD_DIR="${COOKBOOK_BUILD}"
@@ -32,7 +32,7 @@ find_package(KF6GuiAddons ${KF_DEP_VERSION} REQUIRED)
if(NOT WIN32 AND NOT APPLE AND NOT ANDROID AND NOT REDOX) if(NOT WIN32 AND NOT APPLE AND NOT ANDROID AND NOT REDOX)
### find_package(KF6GlobalAccel ${KF_DEP_VERSION} REQUIRED) #### find_package(KF6GlobalAccel ${KF_DEP_VERSION} REQUIRED)
set(HAVE_KGLOBALACCEL TRUE) set(HAVE_KGLOBALACCEL TRUE)
else() else()
set(HAVE_KGLOBALACCEL FALSE) set(HAVE_KGLOBALACCEL FALSE)
@@ -36,6 +36,7 @@ rm -f CMakeCache.txt
rm -rf CMakeFiles rm -rf CMakeFiles
cmake "${COOKBOOK_SOURCE}" \ cmake "${COOKBOOK_SOURCE}" \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \ -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
-DQT_HOST_PATH="${HOST_BUILD}" \ -DQT_HOST_PATH="${HOST_BUILD}" \
-DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_PREFIX=/usr \
@@ -46,6 +47,15 @@ cmake "${COOKBOOK_SOURCE}" \
-DWITH_X11=OFF \ -DWITH_X11=OFF \
-Wno-dev -Wno-dev
mkdir -p "${COOKBOOK_BUILD}/src"
if [ -e "${HOST_BUILD}/bin/qdbuscpp2xml" ]; then
ln -sf "${HOST_BUILD}/bin/qdbuscpp2xml" "${COOKBOOK_BUILD}/src/Qt6::qdbuscpp2xml"
fi
if [ -e "${HOST_BUILD}/bin/qdbusxml2cpp" ]; then
ln -sf "${HOST_BUILD}/bin/qdbusxml2cpp" "${COOKBOOK_BUILD}/src/Qt6::qdbusxml2cpp"
fi
export PATH="${COOKBOOK_BUILD}/src:${HOST_BUILD}/bin:${PATH}"
if [ -f "${COOKBOOK_BUILD}/src/kglobalaccel_component_interface.cpp" ]; then if [ -f "${COOKBOOK_BUILD}/src/kglobalaccel_component_interface.cpp" ]; then
sed -i 's/kglobalaccel_component_interface.moc/moc_kglobalaccel_component_interface.cpp/' "${COOKBOOK_BUILD}/src/kglobalaccel_component_interface.cpp" sed -i 's/kglobalaccel_component_interface.moc/moc_kglobalaccel_component_interface.cpp/' "${COOKBOOK_BUILD}/src/kglobalaccel_component_interface.cpp"
fi fi
@@ -53,6 +63,18 @@ if [ -f "${COOKBOOK_BUILD}/src/kglobalaccel_interface.cpp" ]; then
sed -i 's/kglobalaccel_interface.moc/moc_kglobalaccel_interface.cpp/' "${COOKBOOK_BUILD}/src/kglobalaccel_interface.cpp" sed -i 's/kglobalaccel_interface.moc/moc_kglobalaccel_interface.cpp/' "${COOKBOOK_BUILD}/src/kglobalaccel_interface.cpp"
fi fi
cmake --build . -j${COOKBOOK_MAKE_JOBS} || true
BUILD_DIR="${COOKBOOK_BUILD}"
for src in "${BUILD_DIR}"/src/moc_*.cpp; do
[ -f "$src" ] || continue
base=$(basename "$src" .cpp)
mocname="${base#moc_}.moc"
if [ ! -e "${BUILD_DIR}/src/$mocname" ]; then
ln -sf "$base.cpp" "${BUILD_DIR}/src/$mocname"
fi
done
cmake --build . -j${COOKBOOK_MAKE_JOBS} cmake --build . -j${COOKBOOK_MAKE_JOBS}
cmake --install . --prefix "${COOKBOOK_STAGE}/usr" cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
@@ -25,7 +25,7 @@ include(ECMQtDeclareLoggingCategory)
include(ECMDeprecationSettings) include(ECMDeprecationSettings)
include(ECMAddQch) include(ECMAddQch)
include(CMakeDependentOption) include(CMakeDependentOption)
#############################include(ECMQmlModule) ##############################include(ECMQmlModule)
set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].") set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
@@ -69,10 +69,11 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6Svg ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE) find_package(Qt6Svg ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
if (FALSE) if (FALSE)
########################## find_package(Qt6 ${REQUIRED_QT_VERSION} NO_MODULE REQUIRED Qml Quick) ########################### find_package(Qt6 ${REQUIRED_QT_VERSION} NO_MODULE REQUIRED Qml Quick)
endif() endif()
# shall we use DBus? # shall we use DBus?
@@ -2,7 +2,7 @@ configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
add_subdirectory(tools/kiconfinder) add_subdirectory(tools/kiconfinder)
if (KICONTHEMES_USE_QTQUICK) if (KICONTHEMES_USE_QTQUICK)
######################## add_subdirectory(qml) ######################### add_subdirectory(qml)
endif() endif()
if (APPLE) if (APPLE)
add_subdirectory(tools/ksvg2icns) add_subdirectory(tools/ksvg2icns)
@@ -15,6 +15,8 @@
#include <QHostInfo> #include <QHostInfo>
#include <QHostInfo>
#include <QHostInfo> #include <QHostInfo>
#include "usernotificationhandler_p.h" #include "usernotificationhandler_p.h"
#include "workerbase.h" #include "workerbase.h"
@@ -29,6 +29,7 @@ set(REQUIRED_QT_VERSION 6.6.0)
find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets) find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].") set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
@@ -34,6 +34,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
if(NOT WIN32 AND NOT APPLE AND NOT ANDROID AND NOT HAIKU) if(NOT WIN32 AND NOT APPLE AND NOT ANDROID AND NOT HAIKU)
option(WITH_X11 "Build with support for QX11Info::appUserTime()" ON) option(WITH_X11 "Build with support for QX11Info::appUserTime()" ON)
@@ -75,7 +75,7 @@ target_link_libraries(KF6JobWidgets
KF6::CoreAddons # KJob KF6::CoreAddons # KJob
PRIVATE PRIVATE
KF6::WidgetsAddons # KSqueezedTextLabel KF6::WidgetsAddons # KSqueezedTextLabel
#KF6::Notifications ##KF6::Notifications
) )
if (HAVE_QTDBUS) if (HAVE_QTDBUS)
target_link_libraries(KF6JobWidgets PRIVATE Qt6::DBus) target_link_libraries(KF6JobWidgets PRIVATE Qt6::DBus)
@@ -93,7 +93,7 @@ ecm_generate_headers(KJobWidgets_HEADERS
KUiServerV2JobTracker KUiServerV2JobTracker
KStatusBarJobTracker KStatusBarJobTracker
KWidgetJobTracker KWidgetJobTracker
#KNotificationJobUiDelegate ##KNotificationJobUiDelegate
REQUIRED_HEADERS KJobWidgets_HEADERS REQUIRED_HEADERS KJobWidgets_HEADERS
) )
@@ -30,6 +30,7 @@ sed -i 's/^ki18n_install(po)/#ki18n_install(po)/' \
sed -i '/if (NOT APPLE AND NOT ANDROID AND NOT WIN32 AND NOT HAIKU/,/^endif()/s/^/#/' \ sed -i '/if (NOT APPLE AND NOT ANDROID AND NOT WIN32 AND NOT HAIKU/,/^endif()/s/^/#/' \
"${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
sed -i '127,137 s/^#*//' "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
sed -i 's/^include(ECMQmlModule)/#include(ECMQmlModule)/' \ sed -i 's/^include(ECMQmlModule)/#include(ECMQmlModule)/' \
"${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
@@ -37,8 +38,6 @@ sed -i 's/^ add_subdirectory(qml)/# add_subdirectory(qml)/' \
"${COOKBOOK_SOURCE}/src/CMakeLists.txt" 2>/dev/null || true "${COOKBOOK_SOURCE}/src/CMakeLists.txt" 2>/dev/null || true
sed -i 's/^#add_subdirectory(src)/add_subdirectory(src)/' \ sed -i 's/^#add_subdirectory(src)/add_subdirectory(src)/' \
"${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
sed -i '139,160 s/^##//' "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
sed -i '148,160 s/^#//' "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
rm -f CMakeCache.txt rm -f CMakeCache.txt
rm -rf CMakeFiles rm -rf CMakeFiles
@@ -78,88 +78,86 @@ endif()
find_package(KF6Config ${KF_DEP_VERSION} REQUIRED) find_package(KF6Config ${KF_DEP_VERSION} REQUIRED)
########if (NOT APPLE AND NOT ANDROID AND NOT WIN32 AND NOT HAIKU OR (WIN32 AND NOT WITH_SNORETOAST)) ##################if (NOT APPLE AND NOT ANDROID AND NOT WIN32 AND NOT HAIKU OR (WIN32 AND NOT WITH_SNORETOAST))
######## find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED DBus) ################## find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED DBus)
######## find_package(Canberra REQUIRED) ################## find_package(Canberra REQUIRED)
######## set_package_properties(Canberra PROPERTIES ################## set_package_properties(Canberra PROPERTIES
######## PURPOSE "Needed to build audio notification support") ################## PURPOSE "Needed to build audio notification support")
######## if (TARGET Canberra::Canberra) ################## if (TARGET Canberra::Canberra)
######## add_definitions(-DHAVE_CANBERRA) ################## add_definitions(-DHAVE_CANBERRA)
######## endif() ################## endif()
########endif() ##################endif()
####### #################
######## For the Python bindings ################## For the Python bindings
#######find_package(Python3 3.10 COMPONENTS Interpreter Development) #################find_package(Python3 3.10 COMPONENTS Interpreter Development)
#######find_package(Shiboken6) #################find_package(Shiboken6)
#######find_package(PySide6) #################find_package(PySide6)
####### #################
######## Python Bindings ################## Python Bindings
#######cmake_dependent_option(BUILD_PYTHON_BINDINGS "Generate Python Bindings" ON "TARGET Shiboken6::libshiboken AND TARGET PySide6::pyside6" OFF) #################cmake_dependent_option(BUILD_PYTHON_BINDINGS "Generate Python Bindings" ON "TARGET Shiboken6::libshiboken AND TARGET PySide6::pyside6" OFF)
#######add_feature_info(PYTHON_BINDINGS ${BUILD_PYTHON_BINDINGS} "Python bindings") #################add_feature_info(PYTHON_BINDINGS ${BUILD_PYTHON_BINDINGS} "Python bindings")
####### #################
######## FreeBSD CI is missing required packages ################## FreeBSD CI is missing required packages
#######if (CMAKE_SYSTEM_NAME MATCHES FreeBSD) #################if (CMAKE_SYSTEM_NAME MATCHES FreeBSD)
####### set(BUILD_PYTHON_BINDINGS OFF) ################# set(BUILD_PYTHON_BINDINGS OFF)
#######endif() #################endif()
###### ################
######remove_definitions(-DQT_NO_CAST_FROM_BYTEARRAY) ################remove_definitions(-DQT_NO_CAST_FROM_BYTEARRAY)
###### ################
#######ecm_install_po_files_as_qm(poqm) #################ecm_install_po_files_as_qm(poqm)
###### ################
######ecm_set_disabled_deprecation_versions( ################ecm_set_disabled_deprecation_versions(
###### QT 6.8 ################ QT 6.8
###### KF 6.8 ################ KF 6.8
######) ################)
###### ################
######add_subdirectory(src) ################add_subdirectory(src)
######if (BUILD_TESTING) ################if (BUILD_TESTING)
###### add_subdirectory(tests) ################ add_subdirectory(tests)
###### add_subdirectory(autotests) ################ add_subdirectory(autotests)
###### add_subdirectory(examples) ################ add_subdirectory(examples)
######endif() ################endif()
##### ###############
#####if (BUILD_PYTHON_BINDINGS) ###############if (BUILD_PYTHON_BINDINGS)
##### include(ECMGeneratePythonBindings) ############### include(ECMGeneratePythonBindings)
##### add_subdirectory(python) ############### add_subdirectory(python)
#####endif() ###############endif()
#### ##############
##### create a Config.cmake and a ConfigVersion.cmake file and install them ## create a Config.cmake and a ConfigVersion.cmake file and install them
####set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF6Notifications") set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF6Notifications")
####
####if (BUILD_QCH) if (BUILD_QCH)
#### ecm_install_qch_export( ecm_install_qch_export(
#### TARGETS KF6Notifications_QCH TARGETS KF6Notifications_QCH
#### FILE KF6NotificationsQchTargets.cmake FILE KF6NotificationsQchTargets.cmake
#### DESTINATION "${CMAKECONFIG_INSTALL_DIR}" DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
#### COMPONENT Devel COMPONENT Devel
#### ) )
#### set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF6NotificationsQchTargets.cmake\")") set(PACKAGE_INCLUDE_QCHTARGETS "include(\"${CMAKE_CURRENT_LIST_DIR}/KF6NotificationsQchTargets.cmake\")")
####endif() endif()
### include(CMakePackageConfigHelpers)
#include(CMakePackageConfigHelpers)
# configure_package_config_file(
#configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/KF6NotificationsConfig.cmake.in"
# "${CMAKE_CURRENT_SOURCE_DIR}/KF6NotificationsConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF6NotificationsConfig.cmake"
# "${CMAKE_CURRENT_BINARY_DIR}/KF6NotificationsConfig.cmake" PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR
# PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
# INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} )
#)
# install(FILES
#install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF6NotificationsConfig.cmake"
# "${CMAKE_CURRENT_BINARY_DIR}/KF6NotificationsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF6NotificationsConfigVersion.cmake"
# "${CMAKE_CURRENT_BINARY_DIR}/KF6NotificationsConfigVersion.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
# DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel
# COMPONENT Devel )
#) install(EXPORT KF6NotificationsTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF6NotificationsTargets.cmake NAMESPACE KF6:: )
#
##install(EXPORT KF6NotificationsTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF6NotificationsTargets.cmake NAMESPACE KF6:: )
install(FILES install(FILES
${knotifications_version_header} ${knotifications_version_header}
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/KNotifications COMPONENT Devel DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/KNotifications COMPONENT Devel
) )
### ##########
###include(ECMFeatureSummary) ##########include(ECMFeatureSummary)
###ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) ##########ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
### ##########
###kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT) ##########kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
@@ -15,6 +15,27 @@
#include <QFile> #include <QFile>
#include <QSharedMemory> #include <QSharedMemory>
#ifdef __redox__
static bool sharedMemoryLock(QSharedMemory &)
{
return true;
}
static void sharedMemoryUnlock(QSharedMemory &)
{
}
#else
static bool sharedMemoryLock(QSharedMemory &memory)
{
return memory.lock();
}
static void sharedMemoryUnlock(QSharedMemory &memory)
{
memory.unlock();
}
#endif
class KMemFile::Private class KMemFile::Private
{ {
public: public:
@@ -82,7 +103,7 @@ bool KMemFile::Private::loadContentsFromFile()
parent->setErrorString(QCoreApplication::translate("", "Cannot create memory segment for file %1").arg(filename)); parent->setErrorString(QCoreApplication::translate("", "Cannot create memory segment for file %1").arg(filename));
return false; return false;
} }
shmData.lock(); sharedMemoryLock(shmData);
qint64 size = 0; qint64 size = 0;
qint64 bytesRead; qint64 bytesRead;
char *data = static_cast<char *>(shmData.data()); char *data = static_cast<char *>(shmData.data());
@@ -93,15 +114,15 @@ bool KMemFile::Private::loadContentsFromFile()
return false; return false;
} }
shmDataSize = size; shmDataSize = size;
shmData.unlock(); sharedMemoryUnlock(shmData);
return true; return true;
} }
void KMemFile::Private::close() void KMemFile::Private::close()
{ {
shmData.unlock(); sharedMemoryUnlock(shmData);
shmData.detach(); shmData.detach();
shmInfo.unlock(); sharedMemoryUnlock(shmInfo);
shmInfo.detach(); shmInfo.detach();
readWritePos = 0; readWritePos = 0;
shmDataSize = 0; shmDataSize = 0;
@@ -151,44 +172,44 @@ bool KMemFile::open(OpenMode mode)
} }
QSharedMemory lock(QDir(d->filename).canonicalPath()); QSharedMemory lock(QDir(d->filename).canonicalPath());
lock.lock(); sharedMemoryLock(lock);
Private::sharedInfoData *infoPtr; Private::sharedInfoData *infoPtr;
d->shmInfo.setKey(d->getShmKey()); d->shmInfo.setKey(d->getShmKey());
// see if it's already in memory // see if it's already in memory
if (!d->shmInfo.attach(QSharedMemory::ReadWrite)) { if (!d->shmInfo.attach(QSharedMemory::ReadWrite)) {
if (!d->shmInfo.create(sizeof(Private::sharedInfoData))) { if (!d->shmInfo.create(sizeof(Private::sharedInfoData))) {
lock.unlock(); sharedMemoryUnlock(lock);
setErrorString(QCoreApplication::translate("", "Cannot create memory segment for file %1").arg(d->filename)); setErrorString(QCoreApplication::translate("", "Cannot create memory segment for file %1").arg(d->filename));
return false; return false;
} }
d->shmInfo.lock(); sharedMemoryLock(d->shmInfo);
// no -> create it // no -> create it
infoPtr = static_cast<Private::sharedInfoData *>(d->shmInfo.data()); infoPtr = static_cast<Private::sharedInfoData *>(d->shmInfo.data());
memset(infoPtr, 0, sizeof(Private::sharedInfoData)); memset(infoPtr, 0, sizeof(Private::sharedInfoData));
infoPtr->shmCounter = 1; infoPtr->shmCounter = 1;
if (!d->loadContentsFromFile()) { if (!d->loadContentsFromFile()) {
d->shmInfo.unlock(); sharedMemoryUnlock(d->shmInfo);
d->shmInfo.detach(); d->shmInfo.detach();
lock.unlock(); sharedMemoryUnlock(lock);
return false; return false;
} }
} else { } else {
d->shmInfo.lock(); sharedMemoryLock(d->shmInfo);
infoPtr = static_cast<Private::sharedInfoData *>(d->shmInfo.data()); infoPtr = static_cast<Private::sharedInfoData *>(d->shmInfo.data());
d->shmData.setKey(d->getShmKey(infoPtr->shmCounter)); d->shmData.setKey(d->getShmKey(infoPtr->shmCounter));
if (!d->shmData.attach(QSharedMemory::ReadOnly)) { if (!d->shmData.attach(QSharedMemory::ReadOnly)) {
if (!d->loadContentsFromFile()) { if (!d->loadContentsFromFile()) {
d->shmInfo.unlock(); sharedMemoryUnlock(d->shmInfo);
d->shmInfo.detach(); d->shmInfo.detach();
lock.unlock(); sharedMemoryUnlock(lock);
return false; return false;
} }
} }
} }
d->shmDataSize = infoPtr->shmDataSize; d->shmDataSize = infoPtr->shmDataSize;
d->shmInfo.unlock(); sharedMemoryUnlock(d->shmInfo);
lock.unlock(); sharedMemoryUnlock(lock);
setOpenMode(mode); setOpenMode(mode);
return true; return true;
@@ -232,17 +253,17 @@ qint64 KMemFile::writeData(const char *, qint64)
void KMemFile::fileContentsChanged(const QString &filename) void KMemFile::fileContentsChanged(const QString &filename)
{ {
QSharedMemory lock(QDir(filename).canonicalPath()); QSharedMemory lock(QDir(filename).canonicalPath());
lock.lock(); sharedMemoryLock(lock);
QSharedMemory shmData(Private::getShmKey(filename)); QSharedMemory shmData(Private::getShmKey(filename));
if (!shmData.attach()) { if (!shmData.attach()) {
return; return;
} }
shmData.lock(); sharedMemoryLock(shmData);
Private::sharedInfoData *infoPtr = static_cast<Private::sharedInfoData *>(shmData.data()); Private::sharedInfoData *infoPtr = static_cast<Private::sharedInfoData *>(shmData.data());
infoPtr->shmCounter++; infoPtr->shmCounter++;
infoPtr->shmDataSize = 0; infoPtr->shmDataSize = 0;
shmData.unlock(); sharedMemoryUnlock(shmData);
} }
#endif // QT_NO_SHAREDMEMORY #endif // QT_NO_SHAREDMEMORY
@@ -43,6 +43,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED) find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
if (WITH_TEXT_TO_SPEECH) if (WITH_TEXT_TO_SPEECH)
find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED TextToSpeech) find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED TextToSpeech)
@@ -51,6 +51,7 @@ find_package(Qt6WaylandClientPrivate REQUIRED)
find_package(Qt6WaylandClientPrivate REQUIRED) find_package(Qt6WaylandClientPrivate REQUIRED)
find_package(Qt6WaylandClientPrivate REQUIRED) find_package(Qt6WaylandClientPrivate REQUIRED)
find_package(Qt6WaylandClientPrivate REQUIRED) find_package(Qt6WaylandClientPrivate REQUIRED)
find_package(Qt6WaylandClientPrivate REQUIRED)
set_package_properties(Wayland PROPERTIES set_package_properties(Wayland PROPERTIES
TYPE REQUIRED TYPE REQUIRED
) )
@@ -99,7 +99,7 @@ PUBLIC
PRIVATE PRIVATE
#QNetworkAccessManager in kaboutapplicationpersonmodel_p #QNetworkAccessManager in kaboutapplicationpersonmodel_p
#QPrinter in kshortcutseditor #QPrinter in kshortcutseditor
## Qt6::CorePrivate #QSystemLocale in initializeLanguages ### Qt6::CorePrivate #QSystemLocale in initializeLanguages
KF6::CoreAddons #KAboutData KF6::CoreAddons #KAboutData
KF6::GuiAddons KF6::GuiAddons
KF6::WidgetsAddons KF6::WidgetsAddons
@@ -75,10 +75,10 @@ void initializeLanguages()
// Ideally setting the LANGUAGE would change the default QLocale too // Ideally setting the LANGUAGE would change the default QLocale too
// but unfortunately this is too late since the QCoreApplication constructor // but unfortunately this is too late since the QCoreApplication constructor
// already created a QLocale at this stage so we need to set the reset it // already created a QLocale at this stage so we need to set the reset it
//// // by triggering the creation and destruction of a QSystemLocale ////// // by triggering the creation and destruction of a QSystemLocale
// this is highly dependent on Qt internals, so may break, but oh well // this is highly dependent on Qt internals, so may break, but oh well
//// QSystemLocale *dummy = new QSystemLocale(); ////// QSystemLocale *dummy = new QSystemLocale();
//// delete dummy; ////// delete dummy;
} }
} }
@@ -78,7 +78,7 @@ set_package_properties(PList PROPERTIES
if (CMAKE_SYSTEM_NAME MATCHES Linux) if (CMAKE_SYSTEM_NAME MATCHES Linux)
# Used by the UDisks backend on Linux # Used by the UDisks backend on Linux
##find_package(LibMount) ###find_package(LibMount)
set_package_properties(LibMount PROPERTIES set_package_properties(LibMount PROPERTIES
TYPE REQUIRED) TYPE REQUIRED)
endif() endif()