commit 9ad0fd585a9410403e4b9f94a62f6d5578e7a424ee30b19146c8ec37e78acb49 Author: Christophe Marin Date: Wed Jan 22 09:09:02 2025 +0000 - Add security fix (CVE-2025-23050, boo#1236237) * 0001-QLowEnergyControllerPrivateBluez-guard-against-malfo.patch OBS-URL: https://build.opensuse.org/package/show/KDE:Qt6/qt6-connectivity?expand=0&rev=52 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/0001-QLowEnergyControllerPrivateBluez-guard-against-malfo.patch b/0001-QLowEnergyControllerPrivateBluez-guard-against-malfo.patch new file mode 100644 index 0000000..35208e2 --- /dev/null +++ b/0001-QLowEnergyControllerPrivateBluez-guard-against-malfo.patch @@ -0,0 +1,226 @@ +From 465e3f3112a9c158aa6dd2f8b9439ae6c2de336f Mon Sep 17 00:00:00 2001 +From: Ivan Solovev +Date: Thu, 2 Jan 2025 16:48:49 +0100 +Subject: [PATCH] QLowEnergyControllerPrivateBluez: guard against malformed + replies + +The QLowEnergyControllerPrivateBluez::l2cpReadyRead() slot reads the +data from a Bluetooth L2CAP socket and then tries to process it +according to ATT protocol specs. + +However, the code was missing length and sanity checks at some +codepaths in processUnsolicitedReply() and processReply() helper +methods, simply relying on the data to be in the proper format. + +This patch adds some minimal checks to make sure that we do not read +past the end of the received array and do not divide by zero. + +This problem was originally pointed out by Marc Mutz in an unrelated +patch. + +Pick-to: 6.5 5.15 +Change-Id: I8dcfe031f70ad61fa3d87dc9d771c3fabc6d0edc +Reviewed-by: Alex Blasche +Reviewed-by: Juha Vuolle +(cherry picked from commit aecbd657c841a2a8c74631ceac96b8ff1f03ab5c) +Reviewed-by: Qt Cherry-pick Bot +(cherry picked from commit 53e991671f725c136e9aa824c59ec13934c63fb4) +--- + src/bluetooth/qlowenergycontroller_bluez.cpp | 75 +++++++++++++++++--- + 1 file changed, 66 insertions(+), 9 deletions(-) + +diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp +index 6f0c9858..2bd0cb68 100644 +--- a/src/bluetooth/qlowenergycontroller_bluez.cpp ++++ b/src/bluetooth/qlowenergycontroller_bluez.cpp +@@ -64,14 +64,15 @@ using namespace QBluetooth; + + const int maxPrepareQueueSize = 1024; + +-static void dumpErrorInformation(const QByteArray &response) ++/* returns false if the format is incorrect */ ++static bool dumpErrorInformation(const QByteArray &response) + { + const char *data = response.constData(); + if (response.size() != 5 + || (static_cast(data[0]) + != QBluezConst::AttCommand::ATT_OP_ERROR_RESPONSE)) { + qCWarning(QT_BT_BLUEZ) << QLatin1String("Not a valid error response"); +- return; ++ return false; + } + + QBluezConst::AttCommand lastCommand = static_cast(data[1]); +@@ -126,6 +127,8 @@ static void dumpErrorInformation(const QByteArray &response) + + qCDebug(QT_BT_BLUEZ) << "Error:" << errorCode << "Error description:" << errorString + << "last command:" << lastCommand << "handle:" << handle; ++ ++ return true; + } + + static int getUuidSize(const QBluetoothUuid &uuid) +@@ -903,6 +906,7 @@ QLowEnergyHandle parseReadByTypeCharDiscovery( + { + Q_ASSERT(charData); + Q_ASSERT(data); ++ Q_ASSERT(elementLength >= 5); + + QLowEnergyHandle attributeHandle = bt_get_le16(&data[0]); + charData->properties = +@@ -912,7 +916,7 @@ QLowEnergyHandle parseReadByTypeCharDiscovery( + // Bluetooth LE data comes as little endian + if (elementLength == 7) // 16 bit uuid + charData->uuid = QBluetoothUuid(bt_get_le16(&data[5])); +- else ++ else if (elementLength == 21) // 128 bit uuid + charData->uuid = QUuid::fromBytes(&data[5], QSysInfo::LittleEndian); + + qCDebug(QT_BT_BLUEZ) << "Found handle:" << Qt::hex << attributeHandle +@@ -929,6 +933,7 @@ QLowEnergyHandle parseReadByTypeIncludeDiscovery( + { + Q_ASSERT(foundServices); + Q_ASSERT(data); ++ Q_ASSERT(elementLength >= 6); + + QLowEnergyHandle attributeHandle = bt_get_le16(&data[0]); + +@@ -938,9 +943,14 @@ QLowEnergyHandle parseReadByTypeIncludeDiscovery( + // data[2] -> included service start handle + // data[4] -> included service end handle + ++ // TODO: Spec v. 5.3, Vol. 3, Part G, 4.5.1 mentions that only ++ // 16-bit UUID can be returned here. If the UUID is 128-bit, ++ // then it is omitted from the response, and should be requested ++ // separately with the ATT_READ_REQ command. ++ + if (elementLength == 8) //16 bit uuid + foundServices->append(QBluetoothUuid(bt_get_le16(&data[6]))); +- else ++ else if (elementLength == 22) // 128 bit uuid + foundServices->append(QUuid::fromBytes(&data[6], QSysInfo::LittleEndian)); + + qCDebug(QT_BT_BLUEZ) << "Found included service: " << Qt::hex +@@ -949,17 +959,29 @@ QLowEnergyHandle parseReadByTypeIncludeDiscovery( + return attributeHandle; + } + ++Q_DECL_COLD_FUNCTION ++static void reportMalformedData(QBluezConst::AttCommand cmd, const QByteArray &response) ++{ ++ qCDebug(QT_BT_BLUEZ, "%s malformed data: %s", qt_getEnumName(cmd), ++ response.toHex().constData()); ++} ++ + void QLowEnergyControllerPrivateBluez::processReply( + const Request &request, const QByteArray &response) + { + Q_Q(QLowEnergyController); + ++ // We already have an isEmpty() check at the only calling site that reads ++ // incoming data, so Q_ASSERT is enough. ++ Q_ASSERT(!response.isEmpty()); ++ + QBluezConst::AttCommand command = static_cast(response.constData()[0]); + + bool isErrorResponse = false; + // if error occurred 2. byte is previous request type + if (command == QBluezConst::AttCommand::ATT_OP_ERROR_RESPONSE) { +- dumpErrorInformation(response); ++ if (!dumpErrorInformation(response)) ++ return; + command = static_cast(response.constData()[1]); + isErrorResponse = true; + } +@@ -972,6 +994,10 @@ void QLowEnergyControllerPrivateBluez::processReply( + if (isErrorResponse) { + mtuSize = ATT_DEFAULT_LE_MTU; + } else { ++ if (response.size() < 3) { ++ reportMalformedData(command, response); ++ break; ++ } + const char *data = response.constData(); + quint16 mtu = bt_get_le16(&data[1]); + mtuSize = mtu; +@@ -1000,8 +1026,15 @@ void QLowEnergyControllerPrivateBluez::processReply( + break; + } + ++ // response[1] == elementLength. According to the spec it should be ++ // at least 4 bytes. See Spec v5.3, Vol 3, Part F, 3.4.4.10 ++ if (response.size() < 2 || response[1] < 4) { ++ reportMalformedData(command, response); ++ break; ++ } ++ + QLowEnergyHandle start = 0, end = 0; +- const quint16 elementLength = response.constData()[1]; ++ const quint16 elementLength = response.constData()[1]; // value checked above + const quint16 numElements = (response.size() - 2) / elementLength; + quint16 offset = 2; + const char *data = response.constData(); +@@ -1077,16 +1110,25 @@ void QLowEnergyControllerPrivateBluez::processReply( + } + + /* packet format: +- * if GATT_CHARACTERISTIC discovery ++ * if GATT_CHARACTERISTIC discovery (Spec 5.3, Vol. 3, Part G, 4.6) + * + * []+ ++ * The minimum elementLength is 7 bytes (uuid is always included) + * +- * if GATT_INCLUDE discovery ++ * if GATT_INCLUDE discovery (Spec 5.3, Vol. 3, Part G, 4.5.1) + * + * []+ ++ * The minimum elementLength is 6 bytes (uuid can be omitted). + * + * The uuid can be 16 or 128 bit. + */ ++ ++ const quint8 minimumElementLength = attributeType == GATT_CHARACTERISTIC ? 7 : 6; ++ if (response.size() < 2 || response[1] < minimumElementLength) { ++ reportMalformedData(command, response); ++ break; ++ } ++ + QLowEnergyHandle lastHandle; + const quint16 elementLength = response.constData()[1]; + const quint16 numElements = (response.size() - 2) / elementLength; +@@ -1283,6 +1325,12 @@ void QLowEnergyControllerPrivateBluez::processReply( + break; + } + ++ // Spec 5.3, Vol. 3, Part F, 3.4.3.2 ++ if (response.size() < 6) { ++ reportMalformedData(command, response); ++ break; ++ } ++ + const quint8 format = response[1]; + quint16 elementLength; + switch (format) { +@@ -1720,9 +1768,18 @@ void QLowEnergyControllerPrivateBluez::discoverServiceDescriptors( + + void QLowEnergyControllerPrivateBluez::processUnsolicitedReply(const QByteArray &payload) + { ++ Q_ASSERT(!payload.isEmpty()); ++ + const char *data = payload.constData(); +- bool isNotification = (static_cast(data[0]) ++ const auto command = static_cast(data[0]); ++ bool isNotification = (command + == QBluezConst::AttCommand::ATT_OP_HANDLE_VAL_NOTIFICATION); ++ ++ if (payload.size() < 3) { ++ reportMalformedData(command, payload); ++ return; ++ } ++ + const QLowEnergyHandle changedHandle = bt_get_le16(&data[1]); + + if (QT_BT_BLUEZ().isDebugEnabled()) { +-- +2.48.1 + diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..46731da --- /dev/null +++ b/_multibuild @@ -0,0 +1,4 @@ + + docs + + diff --git a/qt6-connectivity-rpmlintrc b/qt6-connectivity-rpmlintrc new file mode 100644 index 0000000..978f771 --- /dev/null +++ b/qt6-connectivity-rpmlintrc @@ -0,0 +1,5 @@ +# using fdupes on include directories means looking for troubles +addFilter("files-duplicate .*") + +# library and development package names don't match +addFilter("no-dependency-on .*") diff --git a/qt6-connectivity.changes b/qt6-connectivity.changes new file mode 100644 index 0000000..5d55a53 --- /dev/null +++ b/qt6-connectivity.changes @@ -0,0 +1,199 @@ +------------------------------------------------------------------- +Wed Jan 22 09:08:10 UTC 2025 - Christophe Marin + +- Add security fix (CVE-2025-23050, boo#1236237) + * 0001-QLowEnergyControllerPrivateBluez-guard-against-malfo.patch + +------------------------------------------------------------------- +Mon Dec 2 13:01:59 UTC 2024 - Christophe Marin + +- Update to 6.8.1: + * https://www.qt.io/blog/qt-6.8.1-released + +------------------------------------------------------------------- +Tue Oct 8 09:29:41 UTC 2024 - Christophe Marin + +- Update to 6.8.0: + * https://www.qt.io/blog/qt-6.8-released + +------------------------------------------------------------------- +Sat Sep 28 08:22:56 UTC 2024 - Christophe Marin + +- Update to 6.7.3 + * https://www.qt.io/blog/qt-6.7.3-released + +------------------------------------------------------------------- +Wed Jun 19 07:25:40 UTC 2024 - Christophe Marin + +- Update to 6.7.2: + * https://www.qt.io/blog/qt-6.7.2-released + +------------------------------------------------------------------- +Tue May 21 08:31:26 UTC 2024 - Christophe Marin + +- Update to 6.7.1: + * https://www.qt.io/blog/qt-6.7.1-released + +------------------------------------------------------------------- +Tue Apr 2 13:39:37 UTC 2024 - Christophe Marin + +- Update to 6.7.0: + * https://www.qt.io/blog/qt-6.7-released + +------------------------------------------------------------------- +Tue Mar 26 14:25:30 UTC 2024 - Christophe Marin + +- Update to 6.6.3: + * https://www.qt.io/blog/qt-6.6.3-released + +------------------------------------------------------------------- +Wed Feb 14 16:53:11 UTC 2024 - Christophe Marin + +- Update to 6.6.2 + * https://www.qt.io/blog/qt-6.6.2-released + +------------------------------------------------------------------- +Mon Nov 27 14:00:07 UTC 2023 - Christophe Marin + +- Update to 6.6.1: + * https://www.qt.io/blog/qt-6.6.1-released + +------------------------------------------------------------------- +Tue Oct 10 09:39:49 UTC 2023 - Christophe Marin + +- Update to 6.6.0 + * https://www.qt.io/blog/qt-6.6-released + +------------------------------------------------------------------- +Thu Sep 28 07:34:08 UTC 2023 - Christophe Marin + +- Update to 6.5.3 + * https://www.qt.io/blog/qt-6.5.3-released + +------------------------------------------------------------------- +Thu Jul 20 08:44:02 UTC 2023 - Christophe Marin + +- Update to 6.5.2 + * https://www.qt.io/blog/qt-6.5.2-released-1 + +------------------------------------------------------------------- +Fri Jun 30 15:13:08 UTC 2023 - Christophe Marin + +- Update subpackages requirements + +------------------------------------------------------------------- +Wed May 24 07:45:35 UTC 2023 - Christophe Marin + +- Update to 6.5.1 + * https://www.qt.io/blog/qt-6.5.1-released + +------------------------------------------------------------------- +Mon Apr 3 10:01:53 UTC 2023 - Christophe Marin + +- Update to 6.5.0 + * https://www.qt.io/blog/qt-6.5-lts-released + +------------------------------------------------------------------- +Thu Mar 16 09:59:59 UTC 2023 - Christophe Marin + +- Update to 6.4.3: + * https://www.qt.io/blog/qt-6.4.3-released + +------------------------------------------------------------------- +Fri Jan 6 16:46:38 UTC 2023 - Christophe Marin + +- Update to 6.4.2: + * https://www.qt.io/blog/qt-6.4.2-released + +------------------------------------------------------------------- +Tue Nov 15 11:53:09 UTC 2022 - Christophe Giboudeaux + +- Update to 6.4.1: + * https://www.qt.io/blog/qt-6.4.1-released + +------------------------------------------------------------------- +Thu Sep 29 10:35:50 UTC 2022 - Christophe Giboudeaux + +- Update to 6.4.0: + * https://www.qt.io/blog/qt-6.4-released + +------------------------------------------------------------------- +Fri Sep 16 08:29:04 UTC 2022 - Christophe Giboudeaux + +- Update to 6.4.0 RC + +------------------------------------------------------------------- +Fri Sep 9 12:41:34 UTC 2022 - Christophe Giboudeaux + +- Update to 6.3.2: + * https://www.qt.io/blog/qt-6.3.2-released + +------------------------------------------------------------------- +Fri Jun 17 15:15:05 UTC 2022 - Christophe Giboudeaux + +- Update to 6.3.1: + * https://www.qt.io/blog/qt-6.3.1-released + +------------------------------------------------------------------- +Fri Apr 8 11:56:52 UTC 2022 - Christophe Giboudeaux + +- Update to 6.3.0: + * https://www.qt.io/blog/qt-6.3-released + +------------------------------------------------------------------- +Tue Mar 29 12:28:31 UTC 2022 - Christophe Giboudeaux + +- Update to 6.3.0-rc + +------------------------------------------------------------------- +Mon Mar 21 08:46:40 UTC 2022 - Christophe Giboudeaux + +- Update to 6.2.4 + * https://www.qt.io/blog/qt-6.2.4-released + +------------------------------------------------------------------- +Mon Jan 31 08:54:26 UTC 2022 - Christophe Giboudeaux + +- Update to 6.2.3: + * https://www.qt.io/blog/qt-6.2.3-released + +------------------------------------------------------------------- +Wed Dec 1 10:05:59 UTC 2021 - Christophe Giboudeaux + +- Update to 6.2.2 + * https://www.qt.io/blog/qt-6.2.2-released +- Make sure all dependencies are present when installing devel + packages. Qt >= 6.2.2 is much less permissive. + +------------------------------------------------------------------- +Tue Oct 26 11:22:34 UTC 2021 - Christophe Giboudeaux + +- Update to 6.2.1 + * https://www.qt.io/blog/qt-6.2.1-released + + +------------------------------------------------------------------- +Thu Sep 30 12:26:51 UTC 2021 - Christophe Giboudeaux + +- Update to 6.2.0: + * https://www.qt.io/blog/qt-6.2-lts-released + +------------------------------------------------------------------- +Sat Sep 25 07:18:34 UTC 2021 - Christophe Giboudeaux + +- Update to 6.2.0-rc2 + +------------------------------------------------------------------- +Thu Sep 16 14:07:36 UTC 2021 - Christophe Giboudeaux + +- Update to 6.2.0-rc + +------------------------------------------------------------------- +Thu Sep 9 14:05:00 UTC 2021 - Christophe Giboudeaux + +- Update to 6.2.0-beta4 + +------------------------------------------------------------------- +Sat Feb 1 14:35:48 UTC 2020 - Christophe Giboudeaux + +- Add qt6-connectivity diff --git a/qt6-connectivity.spec b/qt6-connectivity.spec new file mode 100644 index 0000000..419b57b --- /dev/null +++ b/qt6-connectivity.spec @@ -0,0 +1,163 @@ +# +# spec file for package qt6-connectivity +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%define real_version 6.8.1 +%define short_version 6.8 +%define tar_name qtconnectivity-everywhere-src +%define tar_suffix %{nil} +# +%global qt6_flavor @BUILD_FLAVOR@%{nil} +%if "%{qt6_flavor}" == "docs" +%define pkg_suffix -docs +%endif +# +Name: qt6-connectivity%{?pkg_suffix} +Version: 6.8.1 +Release: 0 +Summary: Qt 6 connectivity tools and libraries +License: LGPL-3.0-only OR (GPL-2.0-only OR GPL-3.0-or-later) +URL: https://www.qt.io +Source0: https://download.qt.io/official_releases/qt/%{short_version}/%{real_version}%{tar_suffix}/submodules/%{tar_name}-%{real_version}%{tar_suffix}.tar.xz +Source99: qt6-connectivity-rpmlintrc +# PATCH-FIX-UPSTREAM +Patch0: 0001-QLowEnergyControllerPrivateBluez-guard-against-malfo.patch +BuildRequires: pkgconfig +BuildRequires: qt6-core-private-devel +BuildRequires: qt6-network-private-devel +BuildRequires: cmake(Qt6Core) = %{real_version} +BuildRequires: cmake(Qt6DBus) = %{real_version} +BuildRequires: cmake(Qt6Gui) = %{real_version} +BuildRequires: cmake(Qt6Network) = %{real_version} +BuildRequires: cmake(Qt6Quick) = %{real_version} +BuildRequires: cmake(Qt6QuickControls2) = %{real_version} +BuildRequires: cmake(Qt6Widgets) = %{real_version} +BuildRequires: pkgconfig(bluez) +BuildRequires: pkgconfig(libpcsclite) +%if "%{qt6_flavor}" == "docs" +BuildRequires: qt6-tools +%{qt6_doc_packages} +%endif + +%description +Qt 6 connectivity tools and libraries. + +%if !%{qt6_docs_flavor} + +%package -n libQt6Bluetooth6 +Summary: Qt 6 bluetooth library + +%description -n libQt6Bluetooth6 +Provides access to Bluetooth hardware. + +%package -n libQt6Nfc6 +Summary: Qt 6 NFC library + +%description -n libQt6Nfc6 +Provides access to NFC hardware. + +%package devel +Summary: Qt 6 connectivity libraries - Development files +Requires: libQt6Bluetooth6 = %{version} +Requires: libQt6Nfc6 = %{version} +# sdoscanner in required by Qt6BluetoothToolsTargets.cmake +Requires: qt6-connectivity = %{version} +Requires: cmake(Qt6DBus) = %{real_version} +Requires: cmake(Qt6Network) = %{real_version} + +%description devel +Development files for the Qt6 connectivity libraries. + +%package private-devel +Summary: Non-ABI stable API for the Qt 6 connectivity libraries +Requires: cmake(Qt6Bluetooth) = %{real_version} +Requires: cmake(Qt6Nfc) = %{real_version} +%requires_eq qt6-core-private-devel +%requires_eq qt6-network-private-devel + +%description private-devel +This package provides private headers of qt6-connectivity that are normally +not used by application development and that do not have any ABI or +API guarantees. +The packages that build against these have to require the exact Qt version. + +%{qt6_examples_package} + +%endif + +%prep +%autosetup -p1 -n %{tar_name}-%{real_version}%{tar_suffix} + +%build +%cmake_qt6 \ + -DQT_GENERATE_SBOM:BOOL=FALSE + +%{qt6_build} + +%install +%{qt6_install} + +%if !%{qt6_docs_flavor} + +%ldconfig_scriptlets -n libQt6Bluetooth6 +%ldconfig_scriptlets -n libQt6Nfc6 + +%files +%{_qt6_libexecdir}/sdpscanner + +%files -n libQt6Bluetooth6 +%license LICENSES/* +%{_qt6_libdir}/libQt6Bluetooth.so.* + +%files -n libQt6Nfc6 +%license LICENSES/* +%{_qt6_libdir}/libQt6Nfc.so.* + +%files devel +%{_qt6_cmakedir}/Qt6/FindBlueZ.cmake +%{_qt6_cmakedir}/Qt6/FindPCSCLITE.cmake +%{_qt6_cmakedir}/Qt6Bluetooth/ +%{_qt6_cmakedir}/Qt6BuildInternals/StandaloneTests/QtConnectivityTestsConfig.cmake +%{_qt6_cmakedir}/Qt6Nfc/ +%{_qt6_descriptionsdir}/Bluetooth.json +%{_qt6_descriptionsdir}/Nfc.json +%{_qt6_includedir}/QtBluetooth/ +%{_qt6_includedir}/QtNfc/ +%{_qt6_libdir}/libQt6Bluetooth.prl +%{_qt6_libdir}/libQt6Bluetooth.so +%{_qt6_libdir}/libQt6Nfc.prl +%{_qt6_libdir}/libQt6Nfc.so +%{_qt6_metatypesdir}/qt6bluetooth*_metatypes.json +%{_qt6_metatypesdir}/qt6nfc_*_metatypes.json +%{_qt6_mkspecsdir}/modules/qt_lib_bluetooth.pri +%{_qt6_mkspecsdir}/modules/qt_lib_nfc.pri +%{_qt6_pkgconfigdir}/Qt6Bluetooth.pc +%{_qt6_pkgconfigdir}/Qt6Nfc.pc +%exclude %{_qt6_includedir}/QtBluetooth/%{real_version}/ +%exclude %{_qt6_includedir}/QtNfc/%{real_version}/ + +%files private-devel +%dir %{_qt6_includedir}/QtBluetooth +%dir %{_qt6_includedir}/QtNfc +%{_qt6_includedir}/QtBluetooth/%{real_version}/ +%{_qt6_includedir}/QtNfc/%{real_version}/ +%{_qt6_mkspecsdir}/modules/qt_lib_bluetooth_private.pri +%{_qt6_mkspecsdir}/modules/qt_lib_nfc_private.pri + +%endif + +%changelog diff --git a/qtconnectivity-everywhere-src-6.7.2.tar.xz b/qtconnectivity-everywhere-src-6.7.2.tar.xz new file mode 100644 index 0000000..5e34a96 --- /dev/null +++ b/qtconnectivity-everywhere-src-6.7.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ed321b242f0e956473a295fa31670271f9b3acb797508644cb740f89f6c08e8 +size 1061952 diff --git a/qtconnectivity-everywhere-src-6.7.3.tar.xz b/qtconnectivity-everywhere-src-6.7.3.tar.xz new file mode 100644 index 0000000..c2f6560 --- /dev/null +++ b/qtconnectivity-everywhere-src-6.7.3.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80f99b2f097b79107d4b35ed9c5c82451148364ffd814d7ae0aaf206e5b2fcc5 +size 1062684 diff --git a/qtconnectivity-everywhere-src-6.8.0.tar.xz b/qtconnectivity-everywhere-src-6.8.0.tar.xz new file mode 100644 index 0000000..31a8d52 --- /dev/null +++ b/qtconnectivity-everywhere-src-6.8.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbbefb6cc07507fcc961362b3380553eba6400aa15480600126793ba3dc21788 +size 1066392 diff --git a/qtconnectivity-everywhere-src-6.8.1.tar.xz b/qtconnectivity-everywhere-src-6.8.1.tar.xz new file mode 100644 index 0000000..ca5eaa9 --- /dev/null +++ b/qtconnectivity-everywhere-src-6.8.1.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccfd46e7ad2290710788274e145fb1f224d8a5ce360764ec10824b5908a6441c +size 1067952