Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-opcua for openSUSE:Factory checked in at 2026-03-28 20:13:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-opcua (Old) and /work/SRC/openSUSE:Factory/.qt6-opcua.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-opcua" Sat Mar 28 20:13:54 2026 rev:41 rq:1342802 version:6.11.0 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-opcua/qt6-opcua.changes 2026-02-03 21:31:40.797110979 +0100 +++ /work/SRC/openSUSE:Factory/.qt6-opcua.new.8177/qt6-opcua.changes 2026-03-28 20:15:27.722650316 +0100 @@ -1,0 +2,6 @@ +Mon Mar 23 10:37:50 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 6.11.0 + https://www.qt.io/blog/qt-6.11-released + +------------------------------------------------------------------- Old: ---- qtopcua-everywhere-src-6.10.2.tar.xz New: ---- qtopcua-everywhere-src-6.11.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-opcua.spec ++++++ --- /var/tmp/diff_new_pack.zowXHG/_old 2026-03-28 20:15:28.306674419 +0100 +++ /var/tmp/diff_new_pack.zowXHG/_new 2026-03-28 20:15:28.306674419 +0100 @@ -1,7 +1,7 @@ # # spec file for package qt6-opcua # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,8 +16,8 @@ # -%define real_version 6.10.2 -%define short_version 6.10 +%define real_version 6.11.0 +%define short_version 6.11 %define tar_name qtopcua-everywhere-src %define tar_suffix %{nil} # @@ -30,7 +30,7 @@ %global __requires_exclude qt6qmlimport\\(OpcUaMachineBackend\\) # Name: qt6-opcua%{?pkg_suffix} -Version: 6.10.2 +Version: 6.11.0 Release: 0 Summary: Qt wrapper for existing OPC UA stacks # src/plugins/opcua is GPL-3.0-or-later, rest is dual licensed ++++++ _service ++++++ --- /var/tmp/diff_new_pack.zowXHG/_old 2026-03-28 20:15:28.362676731 +0100 +++ /var/tmp/diff_new_pack.zowXHG/_new 2026-03-28 20:15:28.366676895 +0100 @@ -1,9 +1,9 @@ <services> <service name="tar_scm" mode="disabled"> <param name="changesgenerate">disable</param> - <param name="version">6.10.2</param> + <param name="version">6.11.0</param> <param name="url">git://code.qt.io/qt/qtopcua.git</param> - <param name="revision">v6.10.2</param> + <param name="revision">v6.11.0</param> <param name="scm">git</param> <param name="filename">qtopcua-everywhere-src</param> </service> ++++++ qtopcua-everywhere-src-6.10.2.tar.xz -> qtopcua-everywhere-src-6.11.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/.cmake.conf new/qtopcua-everywhere-src-6.11.0/.cmake.conf --- old/qtopcua-everywhere-src-6.10.2/.cmake.conf 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/.cmake.conf 2026-03-10 06:08:03.000000000 +0100 @@ -1,4 +1,4 @@ -set(QT_REPO_MODULE_VERSION "6.10.2") +set(QT_REPO_MODULE_VERSION "6.11.0") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") set(QT_EXTRA_INTERNAL_TARGET_DEFINES @@ -9,4 +9,5 @@ "QT_NO_CONTEXTLESS_CONNECT=1" "QT_NO_FOREACH=1" "QT_NO_QASCONST=1" + "QT_NO_URL_CAST_FROM_STRING=1" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/CMakeLists.txt new/qtopcua-everywhere-src-6.11.0/CMakeLists.txt --- old/qtopcua-everywhere-src-6.10.2/CMakeLists.txt 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/CMakeLists.txt 2026-03-10 06:08:03.000000000 +0100 @@ -11,12 +11,14 @@ LANGUAGES CXX C ) -find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core Network) -find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Gui Quick QuickTest Widgets) +find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals) + +# This should be called as early as possible, just after find_package(BuildInternals) where it is +# defined. qt_internal_project_setup() -# Needed for qt_opcua_disable_optimizations_in_current_dir. -include(src/opcua/Qt6OpcUaMacros.cmake) +find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS Core Network) +find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Gui Quick QuickTest Widgets) if(QNX) message(NOTICE "Skipping the build as the condition \"NOT QNX\" is not met.") @@ -26,4 +28,8 @@ message(NOTICE "Skipping the build as the condition \"NOT WASM\" is not met.") return() endif() + +# Ensure macros are available when configuring tests in-tree with the Qt build +include(src/opcua/Qt6OpcUaMacros.cmake) + qt_build_repo() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/REUSE.toml new/qtopcua-everywhere-src-6.11.0/REUSE.toml --- old/qtopcua-everywhere-src-6.10.2/REUSE.toml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/REUSE.toml 2026-03-10 06:08:03.000000000 +0100 @@ -18,14 +18,14 @@ "tests/open62541-testserver/TestModel/qtopcuatestmodel.tt2pro"] precedence = "closest" comment = "test" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR GPL-3.0-only" [[annotations]] path = "src/plugins/opcua/open62541/open62541-metadata.json" precedence = "closest" comment = "src and plugins" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only" [[annotations]] @@ -33,42 +33,42 @@ "**.pri", "**BLACKLIST", "**ci_config_linux.json"] precedence = "closest" comment = "build system" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "BSD-3-Clause" [[annotations]] path = ["**/.gitattributes", "**.gitignore", "**.gitreview"] precedence = "closest" comment = "version control system. Infrastructure" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR BSD-3-Clause" [[annotations]] path = ["examples/**", "**/doc/snippets/**"] comment = "this must be after the build system table because example and snippets take precedence over build system" precedence = "closest" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR BSD-3-Clause" [[annotations]] path = ["**.qdocconf", "**/doc/images/**"] comment = "documentation" precedence = "closest" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only" [[annotations]] path = ["**.toml", "licenseRule.json"] comment = "infrastructure" precedence = "override" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR BSD-3-Clause" [[annotations]] path = ["**/qt_attribution.json"] comment = "documentation" precedence = "override" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only" [[annotations]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/dependencies.yaml new/qtopcua-everywhere-src-6.11.0/dependencies.yaml --- old/qtopcua-everywhere-src-6.10.2/dependencies.yaml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/dependencies.yaml 2026-03-10 06:08:03.000000000 +0100 @@ -1,7 +1,7 @@ dependencies: ../qtbase: - ref: 000d6c62f7880bb8d3054724e8da0b8ae244130e + ref: 8ba7ea4b77a4b8f1948760221e264917ddc9e1c8 required: true ../qtdeclarative: - ref: 09c70541c76659bcd8c49f05841b0e778c9ffd4c + ref: e602a097ca314e9610b1fd3b7dbfa467a868731a required: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/dist/REUSE.toml new/qtopcua-everywhere-src-6.11.0/dist/REUSE.toml --- old/qtopcua-everywhere-src-6.10.2/dist/REUSE.toml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/dist/REUSE.toml 2026-03-10 06:08:03.000000000 +0100 @@ -4,5 +4,5 @@ path = ["*"] precedence = "override" comment = "Licensed as documentation." -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/examples/opcua/waterpump/simulationserver/CMakeLists.txt new/qtopcua-everywhere-src-6.11.0/examples/opcua/waterpump/simulationserver/CMakeLists.txt --- old/qtopcua-everywhere-src-6.10.2/examples/opcua/waterpump/simulationserver/CMakeLists.txt 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/examples/opcua/waterpump/simulationserver/CMakeLists.txt 2026-03-10 06:08:03.000000000 +0100 @@ -67,12 +67,6 @@ ) endif() -# We need to disable optimizations on MSVC, to circumvent buggy code in the open62541.c file. -# Otherwise the test server fails to launch on Windows MSVC with UA_STATUSCODE_BADOUTOFMEMORY. -# We also disable them on Unixy platforms, to mimic the qmake fix done in QTBUG-75020. -# See QTBUG-85939 for details. -qt_opcua_disable_optimizations_in_current_dir() - if (QT_FEATURE_open62541 AND NOT QT_FEATURE_system_open62541) if(WIN32 AND (GCC OR CLANG)) target_link_libraries(simulationserver PRIVATE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/qt_cmdline.cmake new/qtopcua-everywhere-src-6.11.0/qt_cmdline.cmake --- old/qtopcua-everywhere-src-6.10.2/qt_cmdline.cmake 1970-01-01 01:00:00.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/qt_cmdline.cmake 2026-03-10 06:08:03.000000000 +0100 @@ -0,0 +1,3 @@ +# Copyright (C) 2025 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause +qt_commandline_subconfig(src/opcua) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/3rdparty/open62541/open62541.c new/qtopcua-everywhere-src-6.11.0/src/3rdparty/open62541/open62541.c --- old/qtopcua-everywhere-src-6.10.2/src/3rdparty/open62541/open62541.c 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/3rdparty/open62541/open62541.c 2026-03-10 06:08:03.000000000 +0100 @@ -1,6 +1,6 @@ /* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES * visit http://open62541.org/ for information about this software - * Git-Revision: v1.4.13 + * Git-Revision: v1.4.14 */ /* @@ -9427,16 +9427,14 @@ /************************/ /* Can we reuse the integer encoding mechanism by casting floating point - * values? */ -#if (UA_FLOAT_IEEE754 == 1) && (UA_LITTLE_ENDIAN == UA_FLOAT_LITTLE_ENDIAN) -# define Float_encodeBinary UInt32_encodeBinary -# define Float_decodeBinary UInt32_decodeBinary -# define Double_encodeBinary UInt64_encodeBinary -# define Double_decodeBinary UInt64_decodeBinary -#else + * values? For single float values we ensure that only quiet NAN are used. + * For float arrays we want to have the speed advantage of just memcpy (if + * the processor architecture uses IEE754). We get array-memcpy by the + * "overlayable" bit in the datatype description. */ +#if (UA_FLOAT_IEEE754 < 1) || (UA_LITTLE_ENDIAN != UA_FLOAT_LITTLE_ENDIAN) #include <math.h> - +#define UA_SLOW_IEEE754 1 #pragma message "No native IEEE 754 format detected. Use slow generic encoding." /* Handling of IEEE754 floating point values was taken from Beej's Guide to @@ -9472,6 +9470,8 @@ return result; } +#endif + /* Float */ #define FLOAT_NAN 0xffc00000 #define FLOAT_INF 0x7f800000 @@ -9481,19 +9481,26 @@ ENCODE_BINARY(Float) { UA_Float f = *src; u32 encoded; - /* cppcheck-suppress duplicateExpression */ - if(f != f) encoded = FLOAT_NAN; + if(UA_UNLIKELY(f != f)) encoded = FLOAT_NAN; /* quit NAN */ +#ifndef UA_SLOW_IEEE754 + else memcpy(&encoded, &f, sizeof(UA_Float)); +#else else if(f == 0.0f) encoded = signbit(f) ? FLOAT_NEG_ZERO : 0; else if(f/f != f/f) encoded = f > 0 ? FLOAT_INF : FLOAT_NEG_INF; else encoded = (u32)pack754(f, 32, 8); +#endif return ENCODE_DIRECT(&encoded, UInt32); } DECODE_BINARY(Float) { u32 decoded; status ret = DECODE_DIRECT(&decoded, UInt32); - if(ret != UA_STATUSCODE_GOOD) - return ret; + UA_CHECK_STATUS(ret, return ret); +#ifndef UA_SLOW_IEEE754 + if(UA_UNLIKELY((decoded >= 0x7f800001 && decoded <= 0x7fffffff) || + (decoded >= 0xff800001))) decoded = FLOAT_NAN; + memcpy(dst, &decoded, sizeof(UA_Float)); +#else if(decoded == 0) *dst = 0.0f; else if(decoded == FLOAT_NEG_ZERO) *dst = -0.0f; else if(decoded == FLOAT_INF) *dst = INFINITY; @@ -9501,6 +9508,7 @@ else if((decoded >= 0x7f800001 && decoded <= 0x7fffffff) || (decoded >= 0xff800001)) *dst = NAN; else *dst = (UA_Float)unpack754(decoded, 32, 8); +#endif return UA_STATUSCODE_GOOD; } @@ -9514,10 +9522,14 @@ UA_Double d = *src; u64 encoded; /* cppcheck-suppress duplicateExpression */ - if(d != d) encoded = DOUBLE_NAN; + if(UA_UNLIKELY(d != d)) encoded = DOUBLE_NAN; /* quiet NAN*/ +#ifndef UA_SLOW_IEEE754 + else memcpy(&encoded, &d, sizeof(UA_Double)); +#else else if(d == 0.0) encoded = signbit(d) ? DOUBLE_NEG_ZERO : 0; else if(d/d != d/d) encoded = d > 0 ? DOUBLE_INF : DOUBLE_NEG_INF; else encoded = pack754(d, 64, 11); + #endif return ENCODE_DIRECT(&encoded, UInt64); } @@ -9525,6 +9537,11 @@ u64 decoded; status ret = DECODE_DIRECT(&decoded, UInt64); UA_CHECK_STATUS(ret, return ret); +#ifndef UA_SLOW_IEEE754 + if(UA_UNLIKELY((decoded >= 0x7ff0000000000001L && decoded <= 0x7fffffffffffffffL) || + (decoded >= 0xfff0000000000001L))) decoded = DOUBLE_NAN; + memcpy(dst, &decoded, sizeof(UA_Double)); +#else if(decoded == 0) *dst = 0.0; else if(decoded == DOUBLE_NEG_ZERO) *dst = -0.0; else if(decoded == DOUBLE_INF) *dst = INFINITY; @@ -9532,11 +9549,10 @@ else if((decoded >= 0x7ff0000000000001L && decoded <= 0x7fffffffffffffffL) || (decoded >= 0xfff0000000000001L)) *dst = NAN; else *dst = (UA_Double)unpack754(decoded, 64, 11); +#endif return UA_STATUSCODE_GOOD; } -#endif - /******************/ /* Array Handling */ /******************/ @@ -37182,6 +37198,28 @@ goto cleanup; } + /* Check the NodeClass */ + if(method->head.nodeClass != UA_NODECLASS_METHOD || + object->head.nodeClass != UA_NODECLASS_OBJECT) { + opResult->statusCode = UA_STATUSCODE_BADNODECLASSINVALID; + goto cleanup; + } + + /* Check the access rights */ + UA_Boolean executable = method->methodNode.executable; + if(session != &server->adminSession) { + executable = executable && server->config.accessControl. + getUserExecutableOnObject(server, &server->config.accessControl, + &session->sessionId, session->sessionHandle, + &opRequest->methodId, method->head.context, + &opRequest->objectId, object->head.context); + } + + if(!executable) { + opResult->statusCode = UA_STATUSCODE_BADNOTEXECUTABLE; + goto cleanup; + } + /* <-- Async method call --> */ /* No AsyncResponse allocated so far */ @@ -64794,9 +64832,15 @@ cc->clientData = sub; /* Send the request as asynchronous service call */ - return __UA_Client_AsyncService(client, &request, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONREQUEST], - ua_Subscriptions_create_handler, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONRESPONSE], - cc, requestId); + UA_StatusCode res = + __UA_Client_AsyncService(client, &request, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONREQUEST], + ua_Subscriptions_create_handler, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONRESPONSE], + cc, requestId); + if (res != UA_STATUSCODE_GOOD) { + UA_free(cc); + UA_free(sub); + } + return res; } static UA_Client_Subscription * @@ -65018,9 +65062,14 @@ } /* Make the async call */ - return __UA_Client_AsyncService(client, &request, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSREQUEST], - ua_Subscriptions_delete_handler, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSRESPONSE], - dsc, requestId); + res = __UA_Client_AsyncService(client, &request, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSREQUEST], + ua_Subscriptions_delete_handler, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSRESPONSE], + dsc, requestId); + if (res != UA_STATUSCODE_GOOD) { + UA_DeleteSubscriptionsRequest_clear(&dsc->request); + UA_free(dsc); + } + return res; } UA_DeleteSubscriptionsResponse @@ -65306,11 +65355,16 @@ return res; } - return __Client_AsyncService(client, &data->request, - &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSREQUEST], - ua_MonitoredItems_create_async_handler, - &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSRESPONSE], - data, requestId); + res = __Client_AsyncService(client, &data->request, + &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSREQUEST], + ua_MonitoredItems_create_async_handler, + &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSRESPONSE], + data, requestId); + if (res != UA_STATUSCODE_GOOD) { + MonitoredItems_CreateData_clear(client, data); + UA_free(data); + } + return res; } UA_CreateMonitoredItemsResponse @@ -65545,9 +65599,15 @@ cc->userCallback = callback; cc->userData = userdata; - return __UA_Client_AsyncService(client, &request, &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSREQUEST], - ua_MonitoredItems_delete_handler, - &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSRESPONSE], cc, requestId); + UA_StatusCode res = + __UA_Client_AsyncService(client, &request, &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSREQUEST], + ua_MonitoredItems_delete_handler, + &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSRESPONSE], cc, requestId); + if (res != UA_STATUSCODE_GOOD) { + UA_DeleteMonitoredItemsRequest_delete(req_copy); + UA_free(cc); + } + return res; } UA_StatusCode @@ -115436,7 +115496,7 @@ const unsigned char *ss2 = s2; /* handle special case */ if(l1 == 0) - return (NULL); + return NULL; if(l2 == 0) return s1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/3rdparty/open62541/open62541.h new/qtopcua-everywhere-src-6.11.0/src/3rdparty/open62541/open62541.h --- old/qtopcua-everywhere-src-6.10.2/src/3rdparty/open62541/open62541.h 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/3rdparty/open62541/open62541.h 2026-03-10 06:08:03.000000000 +0100 @@ -1,6 +1,6 @@ /* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES * visit http://open62541.org/ for information about this software - * Git-Revision: v1.4.13 + * Git-Revision: v1.4.14 */ /* @@ -30,10 +30,10 @@ * ----------------- */ #define UA_OPEN62541_VER_MAJOR 1 #define UA_OPEN62541_VER_MINOR 4 -#define UA_OPEN62541_VER_PATCH 13 +#define UA_OPEN62541_VER_PATCH 14 #define UA_OPEN62541_VER_LABEL "" /* Release candidate label, etc. */ -#define UA_OPEN62541_VER_COMMIT "v1.4.13" -#define UA_OPEN62541_VERSION "v1.4.13" +#define UA_OPEN62541_VER_COMMIT "v1.4.14" +#define UA_OPEN62541_VERSION "v1.4.14" /** * Architecture diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/3rdparty/open62541/qt_attribution.json new/qtopcua-everywhere-src-6.11.0/src/3rdparty/open62541/qt_attribution.json --- old/qtopcua-everywhere-src-6.10.2/src/3rdparty/open62541/qt_attribution.json 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/3rdparty/open62541/qt_attribution.json 2026-03-10 06:08:03.000000000 +0100 @@ -11,7 +11,7 @@ "CPE": [ "cpe:2.3:a:open62541:open62541:$<VERSION>:*:*:*:*:*:*:*" ], - "Version": "1.4.13", + "Version": "1.4.14", "License": "Mozilla Public License 2.0 and Creative Commons Zero v1.0 Universal and Creative Commons Attribution Share Alike 4.0 International and BSD 3-Clause \"New\" or \"Revised\" License and Apache License 2.0 and MIT License", "LicenseId": "MPL-2.0 AND CC0-1.0 AND CC-BY-SA-4.0 AND BSD-3-Clause AND Apache-2.0 AND MIT", "LicenseFiles": [ "mpl-2.0.815ca599c9df.txt", "LICENSE-CC0", "CC-BY-SA-4.0", "BSD-3-CLAUSE", "LICENSE-2.0.txt", "MIT" ], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/declarative_opcua/opcuaconnection.cpp new/qtopcua-everywhere-src-6.11.0/src/declarative_opcua/opcuaconnection.cpp --- old/qtopcua-everywhere-src-6.10.2/src/declarative_opcua/opcuaconnection.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/declarative_opcua/opcuaconnection.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -297,7 +297,7 @@ } /*! - \qmlmethod Connection::connectToEndpoint(endpointDescription) + \qmlmethod void Connection::connectToEndpoint(endpointDescription) Connects to the endpoint specified with \a endpointDescription. @@ -313,7 +313,7 @@ } /*! - \qmlmethod Connection::disconnectFromEndpoint() + \qmlmethod void Connection::disconnectFromEndpoint() Disconnects an established connection. */ @@ -389,7 +389,7 @@ } /*! - \qmlmethod Connection::readNodeAttributes(valuesToBeRead) + \qmlmethod bool Connection::readNodeAttributes(valuesToBeRead) This function is used to read multiple values from a server in one go. Returns \c true if the read request was dispatched successfully. @@ -472,7 +472,7 @@ } /*! - \qmlmethod Connection::writeNodeAttributes(valuesToBeWritten) + \qmlmethod bool Connection::writeNodeAttributes(valuesToBeWritten) This function is used to write multiple values to a server in one go. Returns \c true if the write request was dispatched successfully. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/declarative_opcua/opcuaendpointdiscovery.cpp new/qtopcua-everywhere-src-6.11.0/src/declarative_opcua/opcuaendpointdiscovery.cpp --- old/qtopcua-everywhere-src-6.10.2/src/declarative_opcua/opcuaendpointdiscovery.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/declarative_opcua/opcuaendpointdiscovery.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -173,7 +173,7 @@ void OpcUaEndpointDiscovery::handleEndpoints(const QList<QOpcUaEndpointDescription> &endpoints, QOpcUa::UaStatusCode statusCode, const QUrl &requestUrl) { - if (requestUrl != m_serverUrl) + if (requestUrl != QUrl{m_serverUrl}) return; // response is not for last request m_status = OpcUaStatus(statusCode); @@ -214,7 +214,7 @@ m_status = OpcUaStatus(QOpcUa::BadInvalidArgument); } else { m_status = OpcUaStatus(QOpcUa::GoodCompletesAsynchronously); - conn->m_client->requestEndpoints(m_serverUrl); + conn->m_client->requestEndpoints(QUrl{m_serverUrl}); } emit endpointsChanged(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/declarative_opcua/opcuamethodnode.cpp new/qtopcua-everywhere-src-6.11.0/src/declarative_opcua/opcuamethodnode.cpp --- old/qtopcua-everywhere-src-6.10.2/src/declarative_opcua/opcuamethodnode.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/declarative_opcua/opcuamethodnode.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -53,7 +53,7 @@ */ /*! - \qmlmethod MethodNode::callMethod + \qmlmethod void MethodNode::callMethod() Calls the method on the connected server. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/declarative_opcua/opcuaserverdiscovery.cpp new/qtopcua-everywhere-src-6.11.0/src/declarative_opcua/opcuaserverdiscovery.cpp --- old/qtopcua-everywhere-src-6.10.2/src/declarative_opcua/opcuaserverdiscovery.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/declarative_opcua/opcuaserverdiscovery.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -184,7 +184,7 @@ void OpcUaServerDiscovery::handleServers(const QList<QOpcUaApplicationDescription> &servers, QOpcUa::UaStatusCode statusCode, const QUrl &requestUrl) { - if (requestUrl != m_discoveryUrl) + if (requestUrl != QUrl{m_discoveryUrl}) return; // response is not for last request m_status = OpcUaStatus(statusCode); @@ -227,7 +227,7 @@ m_status = OpcUaStatus(QOpcUa::BadInvalidArgument); } else { m_status = OpcUaStatus(QOpcUa::GoodCompletesAsynchronously); - conn->m_client->findServers(m_discoveryUrl); + conn->m_client->findServers(QUrl{m_discoveryUrl}); } emit serversChanged(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/opcua/Qt6OpcUaMacros.cmake new/qtopcua-everywhere-src-6.11.0/src/opcua/Qt6OpcUaMacros.cmake --- old/qtopcua-everywhere-src-6.10.2/src/opcua/Qt6OpcUaMacros.cmake 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/opcua/Qt6OpcUaMacros.cmake 2026-03-10 06:08:03.000000000 +0100 @@ -3,32 +3,7 @@ # Removes optimizations flags in the called directory scope. function(qt_opcua_disable_optimizations_in_current_dir) - if(CMAKE_CONFIGURATION_TYPES) - set(configs ${CMAKE_CONFIGURATION_TYPES}) - elseif(CMAKE_BUILD_TYPE) - set(configs ${CMAKE_BUILD_TYPE}) - else() - message(WARNING "No value set for CMAKE_BUILD_TYPE. Can't disable optimizations.") - return() - endif() - foreach(config ${configs}) - string(TOUPPER "${config}" config_upper_case) - set(flags_var_name "CMAKE_C_FLAGS_${config_upper_case}") - - if(MSVC) - set(optimize_flags_to_replace "/O1" "/O2" "/O3") - set(flag_replacement "/O0") - else() - set(optimize_flags_to_replace "-O1" "-O2" "-O3") - set(flag_replacement "-O0") - endif() - foreach(flag_to_replace ${optimize_flags_to_replace}) - string(REPLACE - "${flag_to_replace}" "${flag_replacement}" - "${flags_var_name}" "${${flags_var_name}}") - endforeach() - endforeach() - set("${flags_var_name}" "${${flags_var_name}}" PARENT_SCOPE) + message(AUTHOR_WARNING "From Qt 6.11 onwards, qt_opcua_disable_optimizations_in_current_dir() is deprecated, and will be removed in a future Qt version.") endfunction() # Generates code for OPC UA data types and/or node ids using the qopcuaxmldatatypes2cpp tool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/opcua/client/qopcuaauthenticationinformation.cpp new/qtopcua-everywhere-src-6.11.0/src/opcua/client/qopcuaauthenticationinformation.cpp --- old/qtopcua-everywhere-src-6.10.2/src/opcua/client/qopcuaauthenticationinformation.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/opcua/client/qopcuaauthenticationinformation.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -109,7 +109,7 @@ } /*! - \qmlmethod AuthenticationInformation::setAnonymousAuthentication() + \qmlmethod void AuthenticationInformation::setAnonymousAuthentication() Sets the authentication method to anonymous. */ @@ -124,7 +124,7 @@ } /*! - \qmlmethod AuthenticationInformation::setUsernameAuthentication(string username, string password) + \qmlmethod void AuthenticationInformation::setUsernameAuthentication(string username, string password) Sets the authentication method to username, using the given \a username and \a password. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/opcua/configure.cmake new/qtopcua-everywhere-src-6.11.0/src/opcua/configure.cmake --- old/qtopcua-everywhere-src-6.10.2/src/opcua/configure.cmake 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/opcua/configure.cmake 2026-03-10 06:08:03.000000000 +0100 @@ -12,11 +12,12 @@ #### Libraries -# special case begin -if (INPUT_open62541 STREQUAL "system") - qt_find_package(open62541 PROVIDED_TARGETS open62541) +if(INPUT_open62541 STREQUAL "system" OR QT_FIND_ALL_PACKAGES_ALWAYS) + qt_find_package(open62541 PROVIDED_TARGETS open62541 + VCPKG_PORT open62541 + VCPKG_ADD_TO_FEATURE open62541 + ) endif() -# special case end # Find out if the system open62541 is built with encryption support include(CheckSymbolExists) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/src/opcua/doc/src/qtopcua.qdoc new/qtopcua-everywhere-src-6.11.0/src/opcua/doc/src/qtopcua.qdoc --- old/qtopcua-everywhere-src-6.10.2/src/opcua/doc/src/qtopcua.qdoc 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/src/opcua/doc/src/qtopcua.qdoc 2026-03-10 06:08:03.000000000 +0100 @@ -389,7 +389,7 @@ The Open62541 plugin is built by default from the included 3rd party sources and has no external dependencies. The open62541 library uses OpenSSL for security. If the OpenSSL library is detected during configuration, security is enabled for the tests and the open62541 backend. - The Open62541 source and header files bundled with Qt OPC UA have been generated from the open62541 v1.4.13 + The Open62541 source and header files bundled with Qt OPC UA have been generated from the open62541 v1.4.14 tag using the following commands: \code @@ -397,7 +397,7 @@ make \endcode - In case you want to build a custom version of the open62541 plugin, an installed open62541 v1.4.13 built with the default options is required. + In case you want to build a custom version of the open62541 plugin, an installed open62541 v1.4.14 built with the default options is required. To enable encryption support, the open62541 build must be configured using the following parameters: \code diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/clientSetupInCpp/tst_clientSetupInCpp.cpp new/qtopcua-everywhere-src-6.11.0/tests/auto/clientSetupInCpp/tst_clientSetupInCpp.cpp --- old/qtopcua-everywhere-src-6.10.2/tests/auto/clientSetupInCpp/tst_clientSetupInCpp.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/clientSetupInCpp/tst_clientSetupInCpp.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -3,6 +3,7 @@ #include <QtQuickTest/quicktest.h> #include <QObject> +#include <QOperatingSystemVersion> #include <QProcess> #include <QQmlContext> #include <QQmlEngine> @@ -23,13 +24,25 @@ return qEnvironmentVariableIsSet(env) ? QString::fromUtf8(qgetenv(env).constData()) : def; } +static bool isRunningOnMacOs26Ci() +{ +#if defined(Q_OS_MACOS) + const bool runsOnCI = qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci"); + const auto osVer = QOperatingSystemVersion::current(); + if (runsOnCI && osVer >= QOperatingSystemVersion::MacOSTahoe) + return true; +#endif + return false; +} + class MyClass : public QObject { Q_OBJECT Q_PROPERTY(QOpcUaClient* connection READ connection NOTIFY connectionChanged) + Q_PROPERTY(bool skipTest READ skipTest FINAL) public: - MyClass (QObject* parent = nullptr) : QObject(parent) { + MyClass (QObject* parent = nullptr) : QObject(parent), m_skipTest(isRunningOnMacOs26Ci()) { } ~MyClass() { @@ -41,11 +54,17 @@ return m_client; } + bool skipTest() const { + return m_skipTest; + } + signals: void connectionChanged(QOpcUaClient *); public slots: void startConnection() { + if (m_skipTest) + return; QOpcUaProvider p; QOpcUaClient *client = p.createClient(u"open62541"_s); @@ -56,7 +75,7 @@ QString host = envOrDefault("OPCUA_HOST", defaultHost.toString()); QString port = envOrDefault("OPCUA_PORT", QString::number(defaultPort)); - const auto discoveryEndpoint = u"opc.tcp://%1:%2"_s.arg(host, port); + const auto discoveryEndpoint = QUrl{u"opc.tcp://%1:%2"_s.arg(host, port)}; QSignalSpy endpointSpy(client, &QOpcUaClient::endpointsRequestFinished); client->requestEndpoints(discoveryEndpoint); @@ -75,6 +94,7 @@ private: QPointer<QOpcUaClient> m_client; + bool m_skipTest; }; class SetupClass : public QObject @@ -89,6 +109,8 @@ public slots: void applicationAvailable() { + if (isRunningOnMacOs26Ci()) + return; if (qEnvironmentVariableIsEmpty("OPCUA_HOST") && qEnvironmentVariableIsEmpty("OPCUA_PORT")) { m_testServerPath = qApp->applicationDirPath() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/clientSetupInCpp/tst_clientSetupInCpp.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/clientSetupInCpp/tst_clientSetupInCpp.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/clientSetupInCpp/tst_clientSetupInCpp.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/clientSetupInCpp/tst_clientSetupInCpp.qml 2026-03-10 06:08:03.000000000 +0100 @@ -20,7 +20,12 @@ TestCase { name: "Create String Node Id" - when: node1.readyToUse + when: node1.readyToUse || myclass.skipTest + + function initTestCase() { + if (myclass.skipTest) + skip("The tests fails on macOS 26 in CI: QTBUG-139354"); + } function test_nodeTest() { compare(node1.value, "Value", ""); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/codegenerator/tst_codegen.cpp new/qtopcua-everywhere-src-6.11.0/tests/auto/codegenerator/tst_codegen.cpp --- old/qtopcua-everywhere-src-6.10.2/tests/auto/codegenerator/tst_codegen.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/codegenerator/tst_codegen.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -11,6 +11,7 @@ #include <QtOpcUa/QOpcUaProvider> #include <QtCore/QCoreApplication> +#include <QtCore/QOperatingSystemVersion> #include <QtCore/QProcess> #include <QtCore/QScopedPointer> #include <QtNetwork/QTcpServer> @@ -136,7 +137,7 @@ return QOpcUa::nodeIdFromInteger(4, static_cast<int>(id)); } - QString m_discoveryEndpoint; + QUrl m_discoveryEndpoint; QOpcUaProvider m_opcUa; QStringList m_backends; QList<QOpcUaClient *> m_clients; @@ -172,6 +173,13 @@ void Tst_GeneratedDataTypes::initTestCase() { +#if defined(Q_OS_MACOS) && defined(Q_PROCESSOR_ARM) + const bool runsOnCI = qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci"); + const auto osVer = QOperatingSystemVersion::current(); + if (runsOnCI && osVer >= QOperatingSystemVersion::MacOSTahoe) + QSKIP("The tests fails on macOS 26 in CI: QTBUG-139354"); +#endif + const quint16 defaultPort = 43344; const QHostAddress defaultHost(QHostAddress::LocalHost); @@ -251,7 +259,7 @@ } QString host = envOrDefault("OPCUA_HOST", defaultHost.toString()); QString port = envOrDefault("OPCUA_PORT", QString::number(defaultPort)); - m_discoveryEndpoint = u"opc.tcp://%1:%2"_s.arg(host, port); + m_discoveryEndpoint.setUrl("opc.tcp://%1:%2"_L1.arg(host, port)); qDebug() << "Using endpoint:" << m_discoveryEndpoint; QOpcUaClient *client = m_clients.first(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/connection/tst_connection.cpp new/qtopcua-everywhere-src-6.11.0/tests/auto/connection/tst_connection.cpp --- old/qtopcua-everywhere-src-6.10.2/tests/auto/connection/tst_connection.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/connection/tst_connection.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -6,6 +6,7 @@ #include <QtOpcUa/QOpcUaProvider> #include <QtCore/QCoreApplication> +#include <QtCore/QOperatingSystemVersion> #include <QtCore/QProcess> #include <QtCore/QScopedPointer> @@ -47,7 +48,7 @@ return qEnvironmentVariableIsSet(env) ? QString::fromUtf8(qgetenv(env).constData()) : def; } - QString m_discoveryEndpoint; + QUrl m_discoveryEndpoint; QOpcUaProvider m_opcUa; QStringList m_backends; QList<QOpcUaClient *> m_clients; @@ -68,6 +69,13 @@ void Tst_Connection::initTestCase() { +#if defined(Q_OS_MACOS) && defined(Q_PROCESSOR_ARM) + const bool runsOnCI = qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci"); + const auto osVer = QOperatingSystemVersion::current(); + if (runsOnCI && osVer >= QOperatingSystemVersion::MacOSTahoe) + QSKIP("The tests fails on macOS 26 in CI: QTBUG-139354"); +#endif + const quint16 defaultPort = 43344; const QHostAddress defaultHost(QHostAddress::LocalHost); @@ -144,7 +152,7 @@ } QString host = envOrDefault("OPCUA_HOST", defaultHost.toString()); QString port = envOrDefault("OPCUA_PORT", QString::number(defaultPort)); - m_discoveryEndpoint = u"opc.tcp://%1:%2"_s.arg(host, port); + m_discoveryEndpoint.setUrl("opc.tcp://%1:%2"_L1.arg(host, port)); qDebug() << "Using endpoint:" << m_discoveryEndpoint; QOpcUaClient *client = m_clients.first(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/AbsoluteNodeTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/AbsoluteNodeTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/AbsoluteNodeTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/AbsoluteNodeTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -51,7 +51,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Create String Node Id" - when: node1.readyToUse && shouldRun + when: (node1.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { compare(node1.value, "Value", ""); @@ -80,7 +80,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Create GUID Node Id" - when: node2.readyToUse && shouldRun + when: (node2.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { compare(node2.value, "Value", ""); @@ -99,7 +99,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Create Opaque Node Id" - when: node3.readyToUse && shouldRun + when: (node3.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { compare(node3.value, "Value", ""); @@ -118,7 +118,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Create Integer Node Id" - when: node4.readyToUse && shouldRun + when: (node4.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { compare(node4.value, 255, ""); @@ -137,7 +137,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Write Value Node with Multiple Listeners" - when: node5.readyToUse && node6.readyToUse && node7.readyToUse && shouldRun + when: (node5.readyToUse && node6.readyToUse && node7.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { compare(node5.valueType, QtOpcUa.Constants.Double); @@ -197,7 +197,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Emitting signals on node changes" - when: node8.readyToUse && shouldRun + when: (node8.readyToUse && shouldRun) || SKIP_TESTS function test_changeIdentifier() { compare(node8.valueType, QtOpcUa.Constants.Double); @@ -275,7 +275,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Node with namespace in Id" - when: node9.readyToUse && shouldRun + when: (node9.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { compare(node9.valueType, QtOpcUa.Constants.String); @@ -293,7 +293,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Standard attributes on variable node" - when: node10.readyToUse && shouldRun + when: (node10.readyToUse && shouldRun) || SKIP_TESTS SignalSpy { id: node10NodeClassSpy @@ -352,7 +352,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Node timestamps" - when: node11.readyToUse && shouldRun + when: (node11.readyToUse && shouldRun) || SKIP_TESTS SignalSpy { id: node11ValueSpy @@ -380,7 +380,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Assign int value to double node" - when: node12.readyToUse && shouldRun + when: (node12.readyToUse && shouldRun) || SKIP_TESTS SignalSpy { id: node12ValueSpy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/BatchReadWriteTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/BatchReadWriteTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/BatchReadWriteTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/BatchReadWriteTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -51,7 +51,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Reading multiple items" - when: connection.connected && shouldRun + when: (connection.connected && shouldRun) || SKIP_TESTS SignalSpy { id: readNodeAttributesFinishedSpy @@ -112,7 +112,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Writing multiple items" - when: connection.connected && shouldRun + when: (connection.connected && shouldRun) || SKIP_TESTS SignalSpy { id: writeNodeAttributesFinishedSpy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/CompletionLoggingTestCase.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/CompletionLoggingTestCase.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/CompletionLoggingTestCase.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/CompletionLoggingTestCase.qml 2026-03-10 06:08:03.000000000 +0100 @@ -6,4 +6,9 @@ TestCase { onCompletedChanged: parent.completedTestCases += (completed ? 1 : -1) objectName: "TestCase" + + function initTestCase() { + if (SKIP_TESTS) + skip("The tests fails on macOS 26 in CI: QTBUG-139354"); + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/DataChangeFilterTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/DataChangeFilterTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/DataChangeFilterTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/DataChangeFilterTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -60,7 +60,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Data Change Filter" - when: node1.readyToUse && shouldRun + when: (node1.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { tryCompare(node1, "monitored", true); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/DiscoveryTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/DiscoveryTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/DiscoveryTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/DiscoveryTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -26,7 +26,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Fetch data from discovery server using default connection" - when: shouldRun + when: shouldRun || SKIP_TESTS QtOpcUa.Connection { id: connection1 @@ -139,7 +139,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Fetch data from discovery server using specified connection" - when: shouldRun + when: shouldRun || SKIP_TESTS QtOpcUa.Connection { id: connection2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/MethodnodeTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/MethodnodeTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/MethodnodeTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/MethodnodeTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -51,7 +51,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Standard attributes on method node" - when: node1.readyToUse && shouldRun + when: (node1.readyToUse && shouldRun) || SKIP_TESTS SignalSpy { id: node1BrowseNameSpy @@ -118,7 +118,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Use method arguments" - when: node2.readyToUse && shouldRun + when: (node2.readyToUse && shouldRun) || SKIP_TESTS SignalSpy { id: node2resultStatusSpy @@ -168,7 +168,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Multiple Output Arguments" - when: node3.readyToUse && shouldRun + when: (node3.readyToUse && shouldRun) || SKIP_TESTS SignalSpy { id: node3resultStatusSpy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/MonitoringFilterTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/MonitoringFilterTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/MonitoringFilterTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/MonitoringFilterTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -61,7 +61,7 @@ /* // In order to run this test you need to compile the example tutorial_server_event from open62541 master branch. CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Event filter" - when: node3.readyToUse && shouldRun + when: (node3.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { eventSpy.clear(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/RelativenodeTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/RelativenodeTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/RelativenodeTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/RelativenodeTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -51,7 +51,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": RelativeNodePath" - when: node1.readyToUse && shouldRun + when: (node1.readyToUse && shouldRun) || SKIP_TESTS function test_nodeRead() { tryVerify(function() { return node1.value > 0 }); @@ -76,7 +76,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": CascadedRelativeNodePath" - when: node2.readyToUse && shouldRun + when: (node2.readyToUse && shouldRun) || SKIP_TESTS function test_nodeRead() { tryVerify(function() { return node2.value > 0 }); @@ -111,7 +111,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Emitting signals on node changes" - when: node3.readyToUse && shouldRun + when: (node3.readyToUse && shouldRun) || SKIP_TESTS function test_changeStartNode() { node3NamespaceSpy.clear(); @@ -194,7 +194,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Emitting signals on cascaded node changes" - when: node4.readyToUse && shouldRun + when: (node4.readyToUse && shouldRun) || SKIP_TESTS function test_nodeRead() { node4NamespaceSpy.clear(); @@ -296,7 +296,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Relative Node Path with References" - when: node5.readyToUse && shouldRun + when: (node5.readyToUse && shouldRun) || SKIP_TESTS function test_nodeRead() { tryVerify(function() { return node5.value > 0 }); @@ -322,7 +322,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Relative Node Path with NodeId reference" - when: node6.readyToUse && shouldRun + when: (node6.readyToUse && shouldRun) || SKIP_TESTS function test_nodeRead() { tryVerify(function() { return node6.value > 0 }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/SecurityTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/SecurityTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/SecurityTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/SecurityTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -19,7 +19,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Check supported security features" - when: shouldRun + when: shouldRun || SKIP_TESTS QtOpcUa.Connection { id: connection2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/SubscriptionsTest.qml new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/SubscriptionsTest.qml --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/SubscriptionsTest.qml 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/SubscriptionsTest.qml 2026-03-10 06:08:03.000000000 +0100 @@ -55,7 +55,7 @@ CompletionLoggingTestCase { name: parent.parent.testName + ": " + backendName + ": Create String Node Id" - when: node1.readyToUse && shouldRun + when: (node1.readyToUse && shouldRun) || SKIP_TESTS function test_nodeTest() { tryCompare(node1, "monitored", true); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/tst_opcua.cpp new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/tst_opcua.cpp --- old/qtopcua-everywhere-src-6.10.2/tests/auto/declarative/tst_opcua.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/declarative/tst_opcua.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -3,6 +3,7 @@ #include <QtQuickTest/quicktest.h> #include <QObject> +#include <QOperatingSystemVersion> #include <QProcess> #include <QQmlContext> #include <QQmlEngine> @@ -16,6 +17,17 @@ return qEnvironmentVariableIsSet(env) ? QString::fromUtf8(qgetenv(env).constData()) : def; } +static bool isRunningOnMacOs26Ci() +{ +#if defined(Q_OS_MACOS) && defined(Q_PROCESSOR_ARM) + const bool runsOnCI = qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci"); + const auto osVer = QOperatingSystemVersion::current(); + if (runsOnCI && osVer >= QOperatingSystemVersion::MacOSTahoe) + return true; +#endif + return false; +} + class SetupClass : public QObject { Q_OBJECT @@ -28,6 +40,9 @@ public slots: void applicationAvailable() { + if (isRunningOnMacOs26Ci()) + return; + const quint16 defaultPort = 43344; const QHostAddress defaultHost(QHostAddress::LocalHost); @@ -105,6 +120,7 @@ #endif engine->rootContext()->setContextProperty(u"SERVER_SUPPORTS_SECURITY"_s, value); engine->rootContext()->setContextProperty(u"OPCUA_DISCOVERY_URL"_s, m_opcuaDiscoveryUrl); + engine->rootContext()->setContextProperty(u"SKIP_TESTS"_s, isRunningOnMacOs26Ci()); } void cleanupTestCase() { if (m_serverProcess.state() == QProcess::Running) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/qopcuaclient/tst_client.cpp new/qtopcua-everywhere-src-6.11.0/tests/auto/qopcuaclient/tst_client.cpp --- old/qtopcua-everywhere-src-6.10.2/tests/auto/qopcuaclient/tst_client.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/qopcuaclient/tst_client.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -32,6 +32,7 @@ #include <private/qopcuasecuritypolicyuris_p.h> #include <QtCore/QCoreApplication> +#include <QtCore/QOperatingSystemVersion> #include <QtCore/QProcess> #include <QtCore/QScopedPointer> #include <QtCore/QThread> @@ -748,7 +749,7 @@ return qEnvironmentVariableIsSet(env) ? QString::fromUtf8(qgetenv(env).constData()) : def; } - QString m_discoveryEndpoint; + QUrl m_discoveryEndpoint; QOpcUaProvider m_opcUa; QStringList m_backends; QList<QOpcUaClient *> m_clients; @@ -801,6 +802,13 @@ void Tst_QOpcUaClient::initTestCase() { +#if defined(Q_OS_MACOS) && defined(Q_PROCESSOR_ARM) + const bool runsOnCI = qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci"); + const auto osVer = QOperatingSystemVersion::current(); + if (runsOnCI && osVer >= QOperatingSystemVersion::MacOSTahoe) + QSKIP("The tests fails on macOS 26 in CI: QTBUG-139354"); +#endif + const quint16 defaultPort = 43344; const QHostAddress defaultHost(QHostAddress::LocalHost); @@ -880,7 +888,7 @@ } QString host = envOrDefault("OPCUA_HOST", defaultHost.toString()); QString port = envOrDefault("OPCUA_PORT", QString::number(defaultPort)); - m_discoveryEndpoint = u"opc.tcp://%1:%2"_s.arg(host, port); + m_discoveryEndpoint.setUrl("opc.tcp://%1:%2"_L1.arg(host, port)); qDebug() << "Using endpoint:" << m_discoveryEndpoint; QOpcUaClient *client = m_clients.first(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/auto/security/tst_security.cpp new/qtopcua-everywhere-src-6.11.0/tests/auto/security/tst_security.cpp --- old/qtopcua-everywhere-src-6.10.2/tests/auto/security/tst_security.cpp 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/auto/security/tst_security.cpp 2026-03-10 06:08:03.000000000 +0100 @@ -8,6 +8,7 @@ #include <QtOpcUa/QOpcUaErrorState> #include <QtCore/QCoreApplication> +#include <QtCore/QOperatingSystemVersion> #include <QtCore/QProcess> #include <QtCore/QScopedPointer> @@ -116,7 +117,7 @@ QProcess m_serverProcess; QList<QOpcUaEndpointDescription> m_endpoints; QOpcUaEndpointDescription m_noneEndpoint; - QString m_discoveryEndpoint; + QUrl m_discoveryEndpoint; QOpcUaProvider m_opcUa; QSharedPointer<QTemporaryDir> m_pkiData; }; @@ -128,6 +129,13 @@ void Tst_QOpcUaSecurity::initTestCase() { +#if defined(Q_OS_MACOS) && defined(Q_PROCESSOR_ARM) + const bool runsOnCI = qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci"); + const auto osVer = QOperatingSystemVersion::current(); + if (runsOnCI && osVer >= QOperatingSystemVersion::MacOSTahoe) + QSKIP("The tests fails on macOS 26 in CI: QTBUG-139354"); +#endif + const quint16 defaultPort = 43344; const QHostAddress defaultHost(QHostAddress::LocalHost); @@ -197,7 +205,7 @@ } QString host = envOrDefault("OPCUA_HOST", defaultHost.toString()); QString port = envOrDefault("OPCUA_PORT", QString::number(defaultPort)); - m_discoveryEndpoint = u"opc.tcp://%1:%2"_s.arg(host, port); + m_discoveryEndpoint.setUrl("opc.tcp://%1:%2"_L1.arg(host, port)); qDebug() << "Using endpoint:" << m_discoveryEndpoint; QScopedPointer<QOpcUaClient> client(m_opcUa.createClient(m_backends.first())); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtopcua-everywhere-src-6.10.2/tests/open62541-testserver/CMakeLists.txt new/qtopcua-everywhere-src-6.11.0/tests/open62541-testserver/CMakeLists.txt --- old/qtopcua-everywhere-src-6.10.2/tests/open62541-testserver/CMakeLists.txt 2026-01-22 20:42:30.000000000 +0100 +++ new/qtopcua-everywhere-src-6.11.0/tests/open62541-testserver/CMakeLists.txt 2026-03-10 06:08:03.000000000 +0100 @@ -59,12 +59,6 @@ ${certs_resource_files} ) -# We need to disable optimizations on MSVC, to circumvent buggy code in the open62541.c file. -# Otherwise the test server fails to launch on Windows MSVC with UA_STATUSCODE_BADOUTOFMEMORY. -# We also disable them on Unixy platforms, to mimic the qmake fix done in QTBUG-75020. -# See QTBUG-85939 for details. -qt_opcua_disable_optimizations_in_current_dir() - ## Scopes: #####################################################################
