Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-remoteobjects for openSUSE:Factory checked in at 2026-10-18 19:21:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-remoteobjects (Old) and /work/SRC/openSUSE:Factory/.qt6-remoteobjects.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-remoteobjects" Sun Oct 18 19:21:34 2026 rev:39 rq:1384408 version:6.12.0 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-remoteobjects/qt6-remoteobjects.changes 2026-08-21 16:52:06.834394901 +0200 +++ /work/SRC/openSUSE:Factory/.qt6-remoteobjects.new.3698736/qt6-remoteobjects.changes 2026-10-18 19:21:44.332817272 +0200 @@ -1,0 +2,6 @@ +Wed Sep 30 16:17:52 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 6.12.0 + https://www.qt.io/blog/qt-6.12-released + +------------------------------------------------------------------- Old: ---- qtremoteobjects-everywhere-src-6.11.2.tar.xz New: ---- qtremoteobjects-everywhere-src-6.12.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-remoteobjects.spec ++++++ --- /var/tmp/diff_new_pack.6YZ5Dz/_old 2026-10-18 19:21:45.146851020 +0200 +++ /var/tmp/diff_new_pack.6YZ5Dz/_new 2026-10-18 19:21:45.148851103 +0200 @@ -16,8 +16,8 @@ # -%define real_version 6.11.2 -%define short_version 6.11 +%define real_version 6.12.0 +%define short_version 6.12 %define tar_name qtremoteobjects-everywhere-src %define tar_suffix %{nil} # @@ -30,7 +30,7 @@ %global __requires_exclude qt6qmlimport\\(TimeExample\\) # Name: qt6-remoteobjects%{?pkg_suffix} -Version: 6.11.2 +Version: 6.12.0 Release: 0 Summary: Qt6 RemoteObjects Library License: GPL-2.0-only OR GPL-3.0-or-later OR LGPL-3.0-only ++++++ qtremoteobjects-everywhere-src-6.11.2.tar.xz -> qtremoteobjects-everywhere-src-6.12.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/.cmake.conf new/qtremoteobjects-everywhere-src-6.12.0/.cmake.conf --- old/qtremoteobjects-everywhere-src-6.11.2/.cmake.conf 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/.cmake.conf 2026-09-26 16:26:58.000000000 +0200 @@ -1,4 +1,4 @@ -set(QT_REPO_MODULE_VERSION "6.11.2") +set(QT_REPO_MODULE_VERSION "6.12.0") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/.tag new/qtremoteobjects-everywhere-src-6.12.0/.tag --- old/qtremoteobjects-everywhere-src-6.11.2/.tag 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/.tag 2026-09-26 16:26:58.000000000 +0200 @@ -1 +1 @@ -7271905e6e7b5ccefec0d41750b0dfe652f356e1 +5add069a1b80a345690b911b9c55826a21ca251c diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/CONTRIBUTING.md new/qtremoteobjects-everywhere-src-6.12.0/CONTRIBUTING.md --- old/qtremoteobjects-everywhere-src-6.11.2/CONTRIBUTING.md 1970-01-01 01:00:00.000000000 +0100 +++ new/qtremoteobjects-everywhere-src-6.12.0/CONTRIBUTING.md 2026-09-26 16:26:58.000000000 +0200 @@ -0,0 +1,11 @@ +## Qt contribution guidelines + +We welcome contributions to Qt! + +Note that we cannot accept pull requests on GitHub. All contributions +to the Qt project are exclusively handled through the +[Gerrit code review system](https://codereview.qt-project.org). + +See +[contribute.qt-project.org](https://contribute.qt-project.org/) to learn +more. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/REUSE.toml new/qtremoteobjects-everywhere-src-6.12.0/REUSE.toml --- old/qtremoteobjects-everywhere-src-6.11.2/REUSE.toml 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/REUSE.toml 2026-09-26 16:26:58.000000000 +0200 @@ -44,7 +44,8 @@ SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR BSD-3-Clause" [[annotations]] -path = ["**/doc/images/**", "**/README*", "**.qdocconf"] +path = ["**/doc/images/**", "**/README*", "**.qdocconf", + "CONTRIBUTING.md"] comment = "documentation" precedence = "closest" SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/dependencies.yaml new/qtremoteobjects-everywhere-src-6.12.0/dependencies.yaml --- old/qtremoteobjects-everywhere-src-6.11.2/dependencies.yaml 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/dependencies.yaml 2026-09-26 16:26:58.000000000 +0200 @@ -1,7 +1,7 @@ dependencies: ../qtbase: - ref: ef55f427f2c8b410d34f8a7681020a3000cf6866 + ref: 025bdad181de241e81bf853c8a2d7bf3d19261a9 required: true ../qtdeclarative: - ref: 4e3399c26ec57246c08de019cfcbda8d23604cfa + ref: 4332fbbb4c340463dc8cee36dda0c85d932122d8 required: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/licenseRule.json new/qtremoteobjects-everywhere-src-6.12.0/licenseRule.json --- old/qtremoteobjects-everywhere-src-6.11.2/licenseRule.json 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/licenseRule.json 2026-09-26 16:26:58.000000000 +0200 @@ -63,7 +63,9 @@ }, { "comment": "Files with the following endings are Documentation licensed.", - "file_pattern_ending": [".qdoc", ".qdocinc" , ".qdocconf", "README", "qt_attribution.json"], + "file_pattern_ending": [".qdoc", ".qdocinc" , ".qdocconf", + "README", "CONTRIBUTING.md", + "qt_attribution.json"], "location":{ "": { "comment": "", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/doc/src/cmake-macros.qdoc new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/doc/src/cmake-macros.qdoc --- old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/doc/src/cmake-macros.qdoc 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/doc/src/cmake-macros.qdoc 2026-09-26 16:26:58.000000000 +0200 @@ -6,7 +6,7 @@ \ingroup cmake-macros-qtremoteobjects \title qt_add_repc_replicas -\keyword qt6_add_repc_replicas +\keyword qt_add_repc_replicas() \brief Creates C++ header files for replica types from the Qt Remote Objects .rep files. @@ -38,7 +38,7 @@ \ingroup cmake-macros-qtremoteobjects \title qt_add_repc_sources -\keyword qt6_add_repc_sources +\keyword qt_add_repc_sources() \brief Creates C++ header files for source types from the Qt Remote Objects .rep files. @@ -70,7 +70,7 @@ \ingroup cmake-macros-qtremoteobjects \title qt_add_repc_merged -\keyword qt6_add_repc_merged +\keyword qt_add_repc_merged() \brief Creates C++ header files for source and replica types from the Qt Remote Objects .rep files. @@ -106,7 +106,7 @@ \ingroup cmake-macros-qtremoteobjects \title qt_reps_from_headers -\keyword qt6_reps_from_headers +\keyword qt_reps_from_headers() \brief Creates .rep files from the QObject header files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/doc/src/remoteobjects-repc.qdoc new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/doc/src/remoteobjects-repc.qdoc --- old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/doc/src/remoteobjects-repc.qdoc 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/doc/src/remoteobjects-repc.qdoc 2026-09-26 16:26:58.000000000 +0200 @@ -50,6 +50,11 @@ is an object based system, these interfaces are defined by APIs available through objects, that is, classes with properties, signals, and slots. + \section2 Comments + + Single-line comments in C++ style (\c{/}\c{/ text}) as well as multi-line comments + in C style (\c{/}\c{* text *}\c{/}) are supported. + \section2 The class type Each class defined in a rep file becomes a QObject in the generated header diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/doc/src/remoteobjects-toc.qdoc new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/doc/src/remoteobjects-toc.qdoc --- old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/doc/src/remoteobjects-toc.qdoc 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/doc/src/remoteobjects-toc.qdoc 2026-09-26 16:26:58.000000000 +0200 @@ -20,6 +20,7 @@ \li \l {Remote Object Interaction} \li \l {Troubleshooting Qt Remote Objects}{Troubleshooting} \li \l {Qt Remote Objects Protocol Versioning}{Protocol Versioning} + \li \l {Qt Remote Objects Security Considerations}{Security Considerations} \li \l {Changes to Qt Remote Objects}{Upgrading from Qt 5} \endlist diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qconnectionfactories.cpp new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qconnectionfactories.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qconnectionfactories.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qconnectionfactories.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -55,7 +55,7 @@ return true; } -/*! +/* All communication between nodes happens through some form of QIODevice with an associated QDataStream to handle marshalling of Qt types. QtROIoDeviceBase is an abstract base class that provides a consistent interface to QtRO, yet @@ -186,7 +186,7 @@ d->m_url = url; } -/*! +/* The Qt servers create QIODevice derived classes from handleConnection. The problem is that they behave differently, so this class adds some consistency. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qremoteobjectnode.cpp new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qremoteobjectnode.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qremoteobjectnode.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qremoteobjectnode.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -182,35 +182,11 @@ ds >> prop; } -// Like the Q_GADGET static methods above, we need constructor/destructor methods -// in order to use dynamically defined enums with QVariant or as signal/slot +// Helpers for dynamically defined enums with QVariant or used as signal/slot // parameters (i.e., the queued connection mechanism, which QtRO leverages). // // We will need the enum methods to support different sizes when typed scope enum // support is added, so might as well use that now. -template<typename T> -static void EnumDestructor(const QtPrivate::QMetaTypeInterface *, void *ptr) -{ - static_cast<T*>(ptr)->~T(); -} - -template<typename T> -static void EnumConstructor(const QtPrivate::QMetaTypeInterface *, void *where) -{ - new(where) T; -} - -template<typename T> -static void EnumCopyConstructor(const QtPrivate::QMetaTypeInterface *, void *where, const void *copy) -{ - new(where) T(*static_cast<const T*>(copy)); -} - -template<typename T> -static void EnumMoveConstructor(const QtPrivate::QMetaTypeInterface *, void *where, void *copy) -{ - new(where) T(std::move(*static_cast<T*>(copy))); -} // Not used, but keeping these in case we end up with a need for save/load. template<typename T> @@ -761,10 +737,22 @@ Requires a \l QRemoteObjectAbstractPersistedStore class implementation to control where and how persistence is handled. */ + +/*! + \fn void QRemoteObjectNode::persistedStoreChanged( + QRemoteObjectAbstractPersistedStore *persistedStore) + \since 6.12 + + This signal is emitted when the \l persistedStore property changes to + \a persistedStore. +*/ void QRemoteObjectNode::setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore) { Q_D(QRemoteObjectNode); + if (d->persistedStore == persistedStore) + return; d->persistedStore = persistedStore; + emit persistedStoreChanged(persistedStore); } QRemoteObjectAbstractPersistedStore::QRemoteObjectAbstractPersistedStore(QRemoteObjectAbstractPersistedStorePrivate &dptr, QObject *parent) @@ -875,16 +863,18 @@ template <class Int> static TypeInfo *enumMetaType(const QByteArray &name, uint size, const QMetaObject *meta=nullptr) { - static const auto flags = QMetaType::IsEnumeration | QMetaType::NeedsConstruction - | QMetaType::NeedsDestruction; + static_assert(std::is_integral_v<Int>); + Q_ASSERT(size == sizeof(Int)); auto typeInfo = new TypeInfo { { - 0, alignof(Int), size, uint(flags), 0, metaObjectFn, strDup(name), - EnumConstructor<Int>, - EnumCopyConstructor<Int>, - EnumMoveConstructor<Int>, - EnumDestructor<Int>, + 0, alignof(Int), size, + uint(QMetaType::fromType<Int>().flags() | QMetaType::IsEnumeration), + 0, metaObjectFn, strDup(name), + nullptr, + nullptr, + nullptr, + nullptr, EnumEqualsFn<Int>, EnumLessThanFn<Int>, EnumDebugStreamFn<Int>, @@ -2263,7 +2253,10 @@ */ bool QRemoteObjectRegistryHost::setRegistryUrl(const QUrl ®istryUrl) { - return d_func()->setRegistryUrlRegistryHostImpl(registryUrl); + bool success = d_func()->setRegistryUrlRegistryHostImpl(registryUrl); + if (success) + emit registryUrlChanged(registryUrl); + return success; } bool QRemoteObjectRegistryHostPrivate::setRegistryUrlRegistryHostImpl(const QUrl ®istryUrl) @@ -2316,6 +2309,14 @@ This is an empty QUrl if there is no registry in use. */ + +/*! + \fn void QRemoteObjectNode::registryUrlChanged(const QUrl ®istryUrl) + \since 6.12 + + This signal is emitted when the \l registryUrl property changes to + \a registryUrl. +*/ QUrl QRemoteObjectNode::registryUrl() const { Q_D(const QRemoteObjectNode); @@ -2325,7 +2326,10 @@ bool QRemoteObjectNode::setRegistryUrl(const QUrl ®istryAddress) { Q_D(QRemoteObjectNode); - return d->setRegistryUrlNodeImpl(registryAddress); + bool success = d->setRegistryUrlNodeImpl(registryAddress); + if (success) + emit registryUrlChanged(registryAddress); + return success; } bool QRemoteObjectNodePrivate::setRegistryUrlNodeImpl(const QUrl ®istryAddr) @@ -2693,10 +2697,10 @@ hostNode.enableRemoting<MinuteTimerSourceAPI>(&timer); \endcode - Here the MinuteTimerSourceAPI is the set of Signals/Slots/Properties - defined by the TimeModel.rep file. Compile time checks are made to verify - the input QObject can expose the requested API, it will fail to compile - otherwise. This allows a subset of \a object 's interface to be exposed, + Here the MinuteTimerSourceAPI is the \a ApiDefinition, representing the + set of Signals/Slots/Properties defined by the TimeModel.rep file. + Compile time checks are made to verify the input QObject can expose the + requested API, it will fail to compile otherwise. This allows a subset of \a object 's interface to be exposed, and allows the types of conversions supported by Signal/Slot connections. Returns \c false if the current node is a client node, or if the QObject is diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qremoteobjectnode.h new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qremoteobjectnode.h --- old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qremoteobjectnode.h 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qremoteobjectnode.h 2026-09-26 16:26:58.000000000 +0200 @@ -46,8 +46,9 @@ class Q_REMOTEOBJECTS_EXPORT QRemoteObjectNode : public QObject { Q_OBJECT - Q_PROPERTY(QUrl registryUrl READ registryUrl WRITE setRegistryUrl) - Q_PROPERTY(QRemoteObjectAbstractPersistedStore* persistedStore READ persistedStore WRITE setPersistedStore) + Q_PROPERTY(QUrl registryUrl READ registryUrl WRITE setRegistryUrl NOTIFY registryUrlChanged) + Q_PROPERTY(QRemoteObjectAbstractPersistedStore *persistedStore READ persistedStore WRITE + setPersistedStore NOTIFY persistedStoreChanged) Q_PROPERTY(int heartbeatInterval READ heartbeatInterval WRITE setHeartbeatInterval NOTIFY heartbeatIntervalChanged) public: @@ -116,6 +117,9 @@ void remoteObjectAdded(const QRemoteObjectSourceLocation &); void remoteObjectRemoved(const QRemoteObjectSourceLocation &); + Q_REVISION(6, 12) void registryUrlChanged(const QUrl ®istryUrl); + Q_REVISION(6, 12) + void persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore); void error(QRemoteObjectNode::ErrorCode errorCode); void heartbeatIntervalChanged(int heartbeatInterval); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qremoteobjectsource.cpp new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qremoteobjectsource.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qremoteobjectsource.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qremoteobjectsource.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -129,6 +129,12 @@ } // namespace QtPrivate +QByteArray QtPrivate::qtro_enum_signature_impl(const QMetaObject &mo, const char *enumName) +{ + const auto qme = mo.enumerator(mo.indexOfEnumerator(enumName)); + return QByteArrayView(qme.scope()) % "::" % qme.name(); +} + QByteArray QtPrivate::qtro_classinfo_signature(const QMetaObject *metaObject) { if (!metaObject) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qremoteobjectsource.h new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qremoteobjectsource.h --- old/qtremoteobjects-everywhere-src-6.11.2/src/remoteobjects/qremoteobjectsource.h 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/remoteobjects/qremoteobjectsource.h 2026-09-26 16:26:58.000000000 +0200 @@ -89,11 +89,13 @@ types); } +Q_REMOTEOBJECTS_EXPORT +QByteArray qtro_enum_signature_impl(const QMetaObject &mo, const char *enumName); + template <class ObjectType> QByteArray qtro_enum_signature(const char *enumName) { - const auto qme = ObjectType::staticMetaObject.enumerator(ObjectType::staticMetaObject.indexOfEnumerator(enumName)); - return QByteArrayLiteral("1::2").replace("1", qme.scope()).replace("2", qme.name()); + return qtro_enum_signature_impl(ObjectType::staticMetaObject, enumName); } QByteArray qtro_classinfo_signature(const QMetaObject *metaObject); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/src/repparser/parser.g new/qtremoteobjects-everywhere-src-6.12.0/src/repparser/parser.g --- old/qtremoteobjects-everywhere-src-6.11.2/src/repparser/parser.g 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/src/repparser/parser.g 2026-09-26 16:26:58.000000000 +0200 @@ -28,7 +28,7 @@ %token comma "[comma]," %token equals "[equals]=" %token comment "[comment](?<comment>[ \\t]*//[^\\n]*\\n)" -%token mcomment "[mcomment,M](?<comment>/\\*(.*?)\\*/)" +%token mcomment "[mcomment,M](?<comment>[ \\t]*/\\*(.*?)\\*/)" %token preprocessor_directive "[preprocessor_directive](?<preprocessor_directive>#[ \\t]*[^\\n]*\\n)" %token newline "[newline](\\r)?\\n" %token tstart "[tstart]<" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/CMakeLists.txt new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/CMakeLists.txt --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/CMakeLists.txt 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/CMakeLists.txt 2026-09-26 16:26:58.000000000 +0200 @@ -17,6 +17,7 @@ add_subdirectory(repcodegenerator) add_subdirectory(repcinlib) add_subdirectory(repparser) +add_subdirectory(stringliteral) add_subdirectory(subclassreplica) if(QT_FEATURE_ssl) add_subdirectory(external_IODevice) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/external_IODevice/tst_client/tst_client.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/external_IODevice/tst_client/tst_client.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/external_IODevice/tst_client/tst_client.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/external_IODevice/tst_client/tst_client.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -22,8 +22,8 @@ void testRun() { // TODO: This a limitation of QProcess on Android, QTBUG-88507 is relevant to this issue. -#ifdef Q_OS_ANDROID - QSKIP("QProcess doesn't support running user bundled binaries on Android"); +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) + QSKIP("QProcess doesn't support running user bundled binaries on Android or OHOS"); #endif QProcess serverProc; serverProc.setProcessChannelMode(QProcess::ForwardedChannels); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/integration/tst_integration.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/integration/tst_integration.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/integration/tst_integration.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/integration/tst_integration.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -273,8 +273,11 @@ { QRemoteObjectNode _client; Q_SET_OBJECT_NAME(_client); + QSignalSpy spy(&_client, &QRemoteObjectNode::persistedStoreChanged); TestPersistedStore store; _client.setPersistedStore(&store); + QVERIFY(spy.isValid()); + QVERIFY(spy.size() || spy.wait()); const QScopedPointer<EngineReplica> engine_r(_client.acquire<EngineReplica>()); QCOMPARE(engine_r->engineType(), EngineReplica::HYBRID); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/integration_external/external/tst_integration_external.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/integration_external/external/tst_integration_external.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/integration_external/external/tst_integration_external.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/integration_external/external/tst_integration_external.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -33,8 +33,8 @@ void testRun() { -#ifdef Q_OS_ANDROID - QSKIP("QProcess doesn't support running user bundled binaries on Android"); +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) + QSKIP("QProcess doesn't support running user bundled binaries on Android or HarmonyOS"); #endif QFETCH(bool, templated); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/integration_multiprocess/tst/tst_integration_multiprocess.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/integration_multiprocess/tst/tst_integration_multiprocess.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/integration_multiprocess/tst/tst_integration_multiprocess.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/integration_multiprocess/tst/tst_integration_multiprocess.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -33,8 +33,8 @@ void testRun() { -#ifdef Q_OS_ANDROID - QSKIP("QProcess doesn't support running user bundled binaries on Android"); +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) + QSKIP("QProcess doesn't support running user bundled binaries on Android or HarmonyOS"); #endif QFETCH(bool, templated); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/proxy/tst_proxy.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/proxy/tst_proxy.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/proxy/tst_proxy.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/proxy/tst_proxy.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -77,12 +77,20 @@ QFETCH(bool, dynamic); //Setup Local Registry - QRemoteObjectRegistryHost registry(registryUrl); + QRemoteObjectRegistryHost registry; SET_NODE_NAME(registry); + QSignalSpy spy1(®istry, &QRemoteObjectRegistryHost::registryUrlChanged); + registry.setRegistryUrl(registryUrl); + QVERIFY(spy1.isValid()); + QVERIFY(spy1.size() || spy1.wait()); + //Setup Local Host QRemoteObjectHost host(localHostUrl); SET_NODE_NAME(host); + QSignalSpy spy2(&host, &QRemoteObjectNode::registryUrlChanged); host.setRegistryUrl(registryUrl); + QVERIFY(spy2.isValid()); + QVERIFY(spy2.size() || spy2.wait()); EngineSimpleSource engine; engine.setRpm(1234); engine.setType(EngineSimpleSource::Gas); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/proxy_multiprocess/tst/tst_proxy_multiprocess.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/proxy_multiprocess/tst/tst_proxy_multiprocess.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/proxy_multiprocess/tst/tst_proxy_multiprocess.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/proxy_multiprocess/tst/tst_proxy_multiprocess.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -39,8 +39,8 @@ void testRun() { -#ifdef Q_OS_ANDROID - QSKIP("QProcess doesn't support running user bundled binaries on Android"); +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) + QSKIP("QProcess doesn't support running user bundled binaries on Android or HarmonyOS"); #endif QFETCH(bool, templated); QFETCH(ObjectMode, objectMode); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/reconnect/tst/tst_reconnect.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/reconnect/tst/tst_reconnect.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/reconnect/tst/tst_reconnect.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/reconnect/tst/tst_reconnect.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -21,8 +21,8 @@ void testRun() { -#ifdef Q_OS_ANDROID - QSKIP("QProcess doesn't support running user bundled binaries on Android"); +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) + QSKIP("QProcess doesn't support running user bundled binaries on Android or HarmonyOS"); #endif QFETCH(QString, url); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/rep_from_header/tst_rep_from_header.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/rep_from_header/tst_rep_from_header.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/rep_from_header/tst_rep_from_header.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/rep_from_header/tst_rep_from_header.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -32,18 +32,16 @@ { QFETCH(QString, actualFile); QFETCH(QByteArrayList, expectedLines); - const auto readFile = [&](const QString &fileName) { - QFile f(fileName); - f.open(QIODevice::ReadOnly); - QByteArrayList lines; - while (!f.atEnd()) - lines.append(f.readLine().trimmed()); - return lines; - }; QVERIFY2(QFile::exists(actualFile), qPrintable(actualFile)); - QByteArrayList actualLines = readFile(actualFile); + QByteArrayList actualLines; + { + QFile f(actualFile); + QVERIFY(f.open(QIODevice::ReadOnly)); + while (!f.atEnd()) + actualLines.append(f.readLine().trimmed()); + } QVERIFY(actualLines == expectedLines); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/repc/signature/signatureTests/tst_signature.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/repc/signature/signatureTests/tst_signature.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/repc/signature/signatureTests/tst_signature.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/repc/signature/signatureTests/tst_signature.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -27,8 +27,8 @@ void testRun() { -#ifdef Q_OS_ANDROID - QSKIP("QProcess doesn't support running user bundled binaries on Android"); +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) + QSKIP("QProcess doesn't support running user bundled binaries on Android or HarmonyOS"); #endif qDebug() << "Starting signatureServer process"; QProcess serverProc; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/repparser/tst_parser.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/repparser/tst_parser.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/repparser/tst_parser.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/repparser/tst_parser.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -53,7 +53,7 @@ QTest::newRow("empty class with comment") << "class MyClass {\n//comment\n}"; QTest::newRow("empty exported class with comment") << "class Q_DECL_EXPORT MyClass {\n//comment\n}"; QTest::newRow("comment, class") << "//comment\nclass MyClass {}"; - QTest::newRow("multicomment, class") << "/* row1\n row2\n */\nclass MyClass {}"; + QTest::newRow("multicomment, class") << "/* row1\n row2\n */\nclass MyClass {}\n /* trailing */"; QTest::newRow("include, comment, class") << "#include \"foo\"\n//comment\nclass MyClass {}"; } @@ -62,7 +62,7 @@ QFETCH(QString, content); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << content << Qt::endl; file.seek(0); @@ -133,7 +133,7 @@ QFETCH(bool, expectedPersistence); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << "class TestClass" << Qt::endl; stream << "{" << Qt::endl; @@ -189,7 +189,7 @@ QFETCH(bool, voidWarning); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << "class TestClass" << Qt::endl; stream << "{" << Qt::endl; @@ -234,7 +234,7 @@ QFETCH(QString, expectedSignal); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << "class TestClass" << Qt::endl; stream << "{" << Qt::endl; @@ -284,7 +284,7 @@ QFETCH(QString, expectedvariables); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << podsdeclaration << Qt::endl; stream << "class TestClass" << Qt::endl; @@ -343,7 +343,7 @@ QFETCH(QString, expectedvariables); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << podsdeclaration << Qt::endl; stream << "class TestClass" << Qt::endl; @@ -374,7 +374,7 @@ void tst_Parser::testCompilerAttributes() { QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << "POD Q_DECL_EXPORT TestPod(int number)" << Qt::endl; stream << "class Q_DECL_EXPORT TestClass" << Qt::endl; @@ -437,7 +437,7 @@ QFETCH(bool, inclass); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); if (!inclass) stream << enumdeclaration << Qt::endl; @@ -507,7 +507,7 @@ QFETCH(bool, isflag); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); if (!inclass) { stream << " // comment 1" << Qt::endl; @@ -578,7 +578,7 @@ QFETCH(QList<ASTModelRole>, expectedRoles); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << " // comment 1" << Qt::endl; stream << " // comment 2" << Qt::endl; @@ -626,7 +626,7 @@ QFETCH(QString, expectedName); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << " // comment 1" << Qt::endl; stream << " // comment 2" << Qt::endl; @@ -698,7 +698,7 @@ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(warning)); QTemporaryFile file; - file.open(); + QVERIFY(file.open()); QTextStream stream(&file); stream << content << Qt::endl; file.seek(0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/restart/tst/tst_restart.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/restart/tst/tst_restart.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/restart/tst/tst_restart.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/restart/tst/tst_restart.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -47,8 +47,8 @@ void testRun() { -#ifdef Q_OS_ANDROID - QSKIP("QProcess doesn't support running user bundled binaries on Android"); +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) + QSKIP("QProcess doesn't support running user bundled binaries on Android or HarmonyOS"); #endif QFETCH(RunMode, runMode); QFETCH(ObjectMode, objectMode); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/stringliteral/CMakeLists.txt new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/stringliteral/CMakeLists.txt --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/stringliteral/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/stringliteral/CMakeLists.txt 2026-09-26 16:26:58.000000000 +0200 @@ -0,0 +1,24 @@ +# Copyright (C) 2026 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_modelreplicatest Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_stringliteraltest LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_stringliteraltest + SOURCES + tst_stringliteraltest.cpp + DEFINES + SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}/" + LIBRARIES + Qt::RemoteObjects +) +qt6_add_repc_merged(tst_stringliteraltest + stringliteral.rep +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/stringliteral/stringliteral.rep new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/stringliteral/stringliteral.rep --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/stringliteral/stringliteral.rep 1970-01-01 01:00:00.000000000 +0100 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/stringliteral/stringliteral.rep 2026-09-26 16:26:58.000000000 +0200 @@ -0,0 +1,4 @@ +class StringLiteral +{ + PROP(QString name="Default") +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/stringliteral/tst_stringliteraltest.cpp new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/stringliteral/tst_stringliteraltest.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tests/auto/stringliteral/tst_stringliteraltest.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/auto/stringliteral/tst_stringliteraltest.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -0,0 +1,52 @@ +// Copyright (C) 2026 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QString> +#include <QtTest> +#include "rep_stringliteral_merged.h" + +class StringLiteralTest : public QObject +{ + Q_OBJECT + +public: + StringLiteralTest() = default; + +private Q_SLOTS: + void basicFunctions(); + void basicFunctions_data(); +}; + +void StringLiteralTest::basicFunctions_data() +{ + QTest::addColumn<bool>("templated"); + QTest::newRow("non-templated enableRemoting") << false; + QTest::newRow("templated enableRemoting") << true; +} + +void StringLiteralTest::basicFunctions() +{ + QFETCH(bool, templated); + + QRemoteObjectRegistryHost host(QUrl("tcp://localhost:5550")); + StringLiteralSimpleSource source; + if (templated) + host.enableRemoting<StringLiteralSourceAPI>(&source); + else + host.enableRemoting(&source); + + QRemoteObjectNode client(QUrl("tcp://localhost:5550")); + const QScopedPointer<StringLiteralReplica> replica(client.acquire<StringLiteralReplica>()); + + QVERIFY(replica->waitForSource(300)); + QCOMPARE(replica->name(), u"Default"_s); + + QSignalSpy nameChangeSpy(replica.get(), &StringLiteralReplica::nameChanged); + source.setName(u"Changed"_s); + QVERIFY(nameChangeSpy.wait()); + QCOMPARE(replica->name(), u"Changed"_s); +} + +QTEST_MAIN(StringLiteralTest) + +#include "tst_stringliteraltest.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tests/shared/testutils.h new/qtremoteobjects-everywhere-src-6.12.0/tests/shared/testutils.h --- old/qtremoteobjects-everywhere-src-6.11.2/tests/shared/testutils.h 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tests/shared/testutils.h 2026-09-26 16:26:58.000000000 +0200 @@ -10,7 +10,7 @@ #include <QStandardPaths> #include <QCoreApplication> -#ifdef Q_OS_ANDROID +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) #define LOCAL_SOCKET "localabstract" #else #define LOCAL_SOCKET "local" @@ -26,7 +26,7 @@ if (!TestUtils::rootFolder.isEmpty()) return true; -#ifdef Q_OS_ANDROID +#if defined(Q_OS_ANDROID) || defined(Q_OS_HARMONY) // All libraries are at located at the native libraries folder return true; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtremoteobjects-everywhere-src-6.11.2/tools/repc/repcodegenerator.cpp new/qtremoteobjects-everywhere-src-6.12.0/tools/repc/repcodegenerator.cpp --- old/qtremoteobjects-everywhere-src-6.11.2/tools/repc/repcodegenerator.cpp 2026-08-12 03:33:55.000000000 +0200 +++ new/qtremoteobjects-everywhere-src-6.12.0/tools/repc/repcodegenerator.cpp 2026-09-26 16:26:58.000000000 +0200 @@ -735,6 +735,11 @@ m_stream << " properties << QVariant::fromValue((" << typeForMode(property, mode) << ")" << property.defaultValue << ");" << Qt::endl; + else if (typeForMode(property, mode) == "QString"_L1 + && !property.defaultValue.isEmpty()) + m_stream << " properties << QVariant::fromValue(" + << "u" << property.defaultValue << "_s" + << ");" << Qt::endl; // Use string literal syntax for QString else m_stream << " properties << QVariant::fromValue(" << typeForMode(property, mode) << "(" << property.defaultValue
