From c9af89066bddc6a3dcef4ffa17a8a842040f7744 Mon Sep 17 00:00:00 2001 From: tobtoht Date: Thu, 28 Sep 2023 15:44:21 +0200 Subject: [PATCH] depends: qt: update to 6.5.3 --- contrib/depends/packages/native_qt.mk | 12 +- contrib/depends/packages/qt.mk | 16 ++- .../patches/native_qt/dont_hardcode_pwd.patch | 19 +-- .../patches/qt/dont_hardcode_pwd.patch | 25 ---- .../patches/qt/qtmultimedia-fixes.patch | 8 +- contrib/depends/patches/qt/toolchain.cmake | 2 + contrib/depends/patches/qt/v4l2.patch | 117 +++++++++--------- 7 files changed, 84 insertions(+), 115 deletions(-) delete mode 100644 contrib/depends/patches/qt/dont_hardcode_pwd.patch diff --git a/contrib/depends/packages/native_qt.mk b/contrib/depends/packages/native_qt.mk index 5d5ab8d..d200eb4 100644 --- a/contrib/depends/packages/native_qt.mk +++ b/contrib/depends/packages/native_qt.mk @@ -1,9 +1,9 @@ package=native_qt -$(package)_version=6.5.2 +$(package)_version=6.5.3 $(package)_download_path=https://download.qt.io/official_releases/qt/6.5/$($(package)_version)/submodules $(package)_suffix=everywhere-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) -$(package)_sha256_hash=3db4c729b4d80a9d8fda8dd77128406353baff4755ca619177eda4cddae71269 +$(package)_sha256_hash=df2f4a230be4ea04f9798f2c19ab1413a3b8ec6a80bef359f50284235307b546 $(package)_qt_libs=corelib network widgets gui plugins testlib $(package)_patches = dont_hardcode_pwd.patch $(package)_patches += fast_fixed_dtoa_no_optimize.patch @@ -13,16 +13,16 @@ $(package)_patches += rcc_hardcode_timestamp.patch $(package)_patches += root_CMakeLists.txt $(package)_qttools_file_name=qttools-$($(package)_suffix) -$(package)_qttools_sha256_hash=551ffb22751d8fd4d88e9ebd55b9131f4ca55341ee497fdbbba4da8d10d94341 +$(package)_qttools_sha256_hash=fc91d32b3f696725bbb48b0df240c25b606bbee3bd22627cfcbee876a6405e37 $(package)_qtsvg_file_name=qtsvg-$($(package)_suffix) -$(package)_qtsvg_sha256_hash=48b4cc1093af2e0ab3bea30f60651bddd877a2335d16e7207879a2e9e81963a3 +$(package)_qtsvg_sha256_hash=fc41c47b69ca1f80473cd4b11996394155781105345392961d064d04f95d5bef $(package)_qtmultimedia_file_name=qtmultimedia-$($(package)_suffix) -$(package)_qtmultimedia_sha256_hash=948f00aa679e92839a2a71bd07245a92cc849af486607417ee4c334b2b998975 +$(package)_qtmultimedia_sha256_hash=ed64f3d2bb98c20cd12df19dbf84dc0233d9fcb2078fea812adf42eef9a0ff27 $(package)_qtshadertools_file_name=qtshadertools-$($(package)_suffix) -$(package)_qtshadertools_sha256_hash=ca3fb0db8576c59b9c38bb4b271cc6e10aebeb54e2121f429f4ee80671fc0a3d +$(package)_qtshadertools_sha256_hash=201b7b3a409f048e78c5defb90a70af423166313ad4386f8e6b83990ae0f3573 $(package)_extra_sources += $($(package)_qttools_file_name) $(package)_extra_sources += $($(package)_qtsvg_file_name) diff --git a/contrib/depends/packages/qt.mk b/contrib/depends/packages/qt.mk index f80a4d8..f54173d 100644 --- a/contrib/depends/packages/qt.mk +++ b/contrib/depends/packages/qt.mk @@ -1,13 +1,12 @@ package=qt -$(package)_version=6.5.2 +$(package)_version=6.5.3 $(package)_download_path=https://download.qt.io/official_releases/qt/6.5/$($(package)_version)/submodules $(package)_suffix=everywhere-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) -$(package)_sha256_hash=3db4c729b4d80a9d8fda8dd77128406353baff4755ca619177eda4cddae71269 +$(package)_sha256_hash=df2f4a230be4ea04f9798f2c19ab1413a3b8ec6a80bef359f50284235307b546 $(package)_darwin_dependencies=native_cctools native_qt openssl $(package)_mingw32_dependencies=openssl native_qt $(package)_linux_dependencies=openssl native_qt freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm libxcb_util_cursor dbus -$(package)_patches += dont_hardcode_pwd.patch $(package)_patches += fast_fixed_dtoa_no_optimize.patch $(package)_patches += guix_cross_lib_path.patch $(package)_patches += qtbase-moc-ignore-gcc-macro.patch @@ -23,19 +22,19 @@ $(package)_patches += toolchain.cmake #$(package)_patches += fix-static-fontconfig-static-linking.patch $(package)_qttools_file_name=qttools-$($(package)_suffix) -$(package)_qttools_sha256_hash=551ffb22751d8fd4d88e9ebd55b9131f4ca55341ee497fdbbba4da8d10d94341 +$(package)_qttools_sha256_hash=fc91d32b3f696725bbb48b0df240c25b606bbee3bd22627cfcbee876a6405e37 $(package)_qtsvg_file_name=qtsvg-$($(package)_suffix) -$(package)_qtsvg_sha256_hash=48b4cc1093af2e0ab3bea30f60651bddd877a2335d16e7207879a2e9e81963a3 +$(package)_qtsvg_sha256_hash=fc41c47b69ca1f80473cd4b11996394155781105345392961d064d04f95d5bef $(package)_qtwebsockets_file_name=qtwebsockets-$($(package)_suffix) -$(package)_qtwebsockets_sha256_hash=204bd7b0dffb54c934abc6cf0eb5e3016f11b3c9721a67b4875a6b21bb8b5c76 +$(package)_qtwebsockets_sha256_hash=04e2ae17594d56cf2930c99dbd2a97eb88ff514b445c17ff7b86e8978fc7a7c3 $(package)_qtmultimedia_file_name=qtmultimedia-$($(package)_suffix) -$(package)_qtmultimedia_sha256_hash=948f00aa679e92839a2a71bd07245a92cc849af486607417ee4c334b2b998975 +$(package)_qtmultimedia_sha256_hash=ed64f3d2bb98c20cd12df19dbf84dc0233d9fcb2078fea812adf42eef9a0ff27 $(package)_qtshadertools_file_name=qtshadertools-$($(package)_suffix) -$(package)_qtshadertools_sha256_hash=ca3fb0db8576c59b9c38bb4b271cc6e10aebeb54e2121f429f4ee80671fc0a3d +$(package)_qtshadertools_sha256_hash=201b7b3a409f048e78c5defb90a70af423166313ad4386f8e6b83990ae0f3573 $(package)_extra_sources += $($(package)_qttools_file_name) $(package)_extra_sources += $($(package)_qtsvg_file_name) @@ -171,7 +170,6 @@ endef define $(package)_preprocess_cmds cp $($(package)_patch_dir)/root_CMakeLists.txt CMakeLists.txt && \ - patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \ patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \ patch -p1 -i $($(package)_patch_dir)/rcc_hardcode_timestamp.patch && \ patch -p1 -i $($(package)_patch_dir)/fast_fixed_dtoa_no_optimize.patch && \ diff --git a/contrib/depends/patches/native_qt/dont_hardcode_pwd.patch b/contrib/depends/patches/native_qt/dont_hardcode_pwd.patch index cf2c4d3..1a3b0d6 100644 --- a/contrib/depends/patches/native_qt/dont_hardcode_pwd.patch +++ b/contrib/depends/patches/native_qt/dont_hardcode_pwd.patch @@ -1,25 +1,16 @@ -commit 0e953866fc4672486e29e1ba6d83b4207e7b2f0b -Author: fanquake -Date: Tue Aug 18 15:09:06 2020 +0800 - - Don't hardcode pwd path - - Let a man use his builtins if he wants to! Also, removes the unnecessary - assumption that pwd lives under /bin/pwd. - - See #15581. - +diff --git a/qtbase/configure b/qtbase/configure +index e57707dc..d8f6c934 100755 --- a/qtbase/configure +++ b/qtbase/configure -@@ -34,9 +34,9 @@ +@@ -9,9 +9,9 @@ # the directory of this script is the "source tree" - relpath=`dirname $0` + relpath=`dirname "$0"` -relpath=`(cd "$relpath"; /bin/pwd)` +relpath=`(cd "$relpath"; pwd)` # the current directory is the "build tree" or "object tree" -outpath=`/bin/pwd` +outpath=`pwd` + outpathPrefix=$outpath # do this early so we don't store it in config.status - CFG_TOPLEVEL= diff --git a/contrib/depends/patches/qt/dont_hardcode_pwd.patch b/contrib/depends/patches/qt/dont_hardcode_pwd.patch deleted file mode 100644 index cf2c4d3..0000000 --- a/contrib/depends/patches/qt/dont_hardcode_pwd.patch +++ /dev/null @@ -1,25 +0,0 @@ -commit 0e953866fc4672486e29e1ba6d83b4207e7b2f0b -Author: fanquake -Date: Tue Aug 18 15:09:06 2020 +0800 - - Don't hardcode pwd path - - Let a man use his builtins if he wants to! Also, removes the unnecessary - assumption that pwd lives under /bin/pwd. - - See #15581. - ---- a/qtbase/configure -+++ b/qtbase/configure -@@ -34,9 +34,9 @@ - - # the directory of this script is the "source tree" - relpath=`dirname $0` --relpath=`(cd "$relpath"; /bin/pwd)` -+relpath=`(cd "$relpath"; pwd)` - # the current directory is the "build tree" or "object tree" --outpath=`/bin/pwd` -+outpath=`pwd` - - # do this early so we don't store it in config.status - CFG_TOPLEVEL= diff --git a/contrib/depends/patches/qt/qtmultimedia-fixes.patch b/contrib/depends/patches/qt/qtmultimedia-fixes.patch index f2250b5..86264d8 100644 --- a/contrib/depends/patches/qt/qtmultimedia-fixes.patch +++ b/contrib/depends/patches/qt/qtmultimedia-fixes.patch @@ -41,16 +41,16 @@ index 2f4633c34..35a276cb4 100644 set(WMF_LIBRARIES ${WMF_STRMIIDS_LIBRARY} ${WMF_AMSTRMID_LIBRARY} ${WMF_DMOGUIDS_LIBRARY} ${WMF_UUID_LIBRARY} diff --git a/src/multimedia/configure.cmake b/src/multimedia/configure.cmake -index 7fdb0af3a..868e91ba4 100644 +index 609806507..40b1b9b36 100644 --- a/src/multimedia/configure.cmake +++ b/src/multimedia/configure.cmake @@ -24,7 +24,6 @@ qt_find_package(WrapPulseAudio PROVIDED_TARGETS WrapPulseAudio::WrapPulseAudio M qt_find_package(WMF PROVIDED_TARGETS WMF::WMF MODULE_NAME multimedia QMAKE_LIB wmf) qt_find_package(EGL) - + -qt_find_package(FFmpeg OPTIONAL_COMPONENTS AVCODEC AVFORMAT AVUTIL AVDEVICE SWRESAMPLE SWSCALE PROVIDED_TARGETS FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil FFmpeg::avdevice FFmpeg::swresample FFmpeg::swscale MODULE_NAME multimedia QMAKE_LIB ffmpeg) - qt_find_package(VAAPI COMPONENTS VA DRM PROVIDED_TARGETS VAAPI::VA VAAPI::DRM MODULE_NAME multimedia QMAKE_LIB vaapi) - + qt_find_package(VAAPI COMPONENTS VA DRM PROVIDED_TARGETS VAAPI::VAAPI MODULE_NAME multimedia QMAKE_LIB vaapi) + #### Tests @@ -76,7 +75,7 @@ qt_feature("ffmpeg" PRIVATE LABEL "FFmpeg" diff --git a/contrib/depends/patches/qt/toolchain.cmake b/contrib/depends/patches/qt/toolchain.cmake index e8b0578..116af0b 100644 --- a/contrib/depends/patches/qt/toolchain.cmake +++ b/contrib/depends/patches/qt/toolchain.cmake @@ -23,6 +23,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(CMAKE_C_FLAGS "@cmake_c_flags@") set(CMAKE_CXX_FLAGS "@cmake_cxx_flags@") + set(CMAKE_OBJC_FLAGS "@cmake_c_flags@") + set(CMAKE_OBJCXX_FLAGS "@cmake_cxx_flags@") set(CMAKE_INSTALL_NAME_TOOL @target@-install_name_tool) endif() \ No newline at end of file diff --git a/contrib/depends/patches/qt/v4l2.patch b/contrib/depends/patches/qt/v4l2.patch index 0233de3..9f1f418 100644 --- a/contrib/depends/patches/qt/v4l2.patch +++ b/contrib/depends/patches/qt/v4l2.patch @@ -670,10 +670,10 @@ index 000000000..e34005bbf +#endif diff --git a/src/plugins/multimedia/v4l2/qffmpegmediaintegration.cpp b/src/plugins/multimedia/v4l2/qffmpegmediaintegration.cpp new file mode 100644 -index 000000000..c07c0ebc7 +index 000000000..44d81e489 --- /dev/null +++ b/src/plugins/multimedia/v4l2/qffmpegmediaintegration.cpp -@@ -0,0 +1,130 @@ +@@ -0,0 +1,123 @@ +// Copyright (C) 2021 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 + @@ -722,8 +722,6 @@ index 000000000..c07c0ebc7 + +QFFmpegMediaIntegration::QFFmpegMediaIntegration() +{ -+ m_formatsInfo = new QFFmpegMediaFormatInfo(); -+ +#if QT_CONFIG(linux_v4l) + m_videoDevices = std::make_unique(this); +#endif @@ -741,14 +739,9 @@ index 000000000..c07c0ebc7 +#endif +} + -+QFFmpegMediaIntegration::~QFFmpegMediaIntegration() ++QPlatformMediaFormatInfo *QFFmpegMediaIntegration::createFormatInfo() +{ -+ delete m_formatsInfo; -+} -+ -+QPlatformMediaFormatInfo *QFFmpegMediaIntegration::formatInfo() -+{ -+ return m_formatsInfo; ++ return new QFFmpegMediaFormatInfo(); +} + +QMaybe QFFmpegMediaIntegration::createCaptureSession() @@ -806,10 +799,10 @@ index 000000000..c07c0ebc7 +#include "qffmpegmediaintegration.moc" diff --git a/src/plugins/multimedia/v4l2/qffmpegmediaintegration_p.h b/src/plugins/multimedia/v4l2/qffmpegmediaintegration_p.h new file mode 100644 -index 000000000..8b44da741 +index 000000000..905c3efd5 --- /dev/null +++ b/src/plugins/multimedia/v4l2/qffmpegmediaintegration_p.h -@@ -0,0 +1,43 @@ +@@ -0,0 +1,45 @@ +// Copyright (C) 2021 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 + @@ -837,17 +830,19 @@ index 000000000..8b44da741 +{ +public: + QFFmpegMediaIntegration(); -+ ~QFFmpegMediaIntegration(); + -+ static QFFmpegMediaIntegration *instance() { return static_cast(QPlatformMediaIntegration::instance()); } -+ QPlatformMediaFormatInfo *formatInfo() override; ++ static QFFmpegMediaIntegration *instance() ++ { ++ return static_cast(QPlatformMediaIntegration::instance()); ++ } + + QMaybe createCaptureSession() override; + QMaybe createCamera(QCamera *) override; + QMaybe createImageCapture(QImageCapture *) override; + QMaybe createVideoSink(QVideoSink *sink) override; + -+ QFFmpegMediaFormatInfo *m_formatsInfo = nullptr; ++protected: ++ QPlatformMediaFormatInfo *createFormatInfo() override; +}; + +QT_END_NAMESPACE @@ -1037,10 +1032,10 @@ index 000000000..cbaa810d7 +#endif diff --git a/src/plugins/multimedia/v4l2/qv4l2camera.cpp b/src/plugins/multimedia/v4l2/qv4l2camera.cpp new file mode 100644 -index 000000000..0f7a8c91a +index 000000000..b635a7fce --- /dev/null +++ b/src/plugins/multimedia/v4l2/qv4l2camera.cpp -@@ -0,0 +1,940 @@ +@@ -0,0 +1,949 @@ +// Copyright (C) 2021 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 + @@ -1069,28 +1064,38 @@ index 000000000..0f7a8c91a + +QT_BEGIN_NAMESPACE + -+Q_LOGGING_CATEGORY(qLV4L2Camera, "qt.multimedia.ffmpeg.v4l2camera"); ++static Q_LOGGING_CATEGORY(qLV4L2Camera, "qt.multimedia.ffmpeg.v4l2camera"); ++ ++static bool areCamerasEqual(QList a, QList b) { ++ auto areCamerasDataEqual = [](const QCameraDevice& a, const QCameraDevice& b) { ++ Q_ASSERT(QCameraDevicePrivate::handle(a)); ++ Q_ASSERT(QCameraDevicePrivate::handle(b)); ++ return *QCameraDevicePrivate::handle(a) == *QCameraDevicePrivate::handle(b); ++ }; ++ ++ return std::equal(a.cbegin(), a.cend(), b.cbegin(), b.cend(), areCamerasDataEqual); ++} + +QV4L2CameraDevices::QV4L2CameraDevices(QPlatformMediaIntegration *integration) + : QPlatformVideoDevices(integration) +{ -+ deviceWatcher.addPath(QLatin1String("/dev")); -+ connect(&deviceWatcher, &QFileSystemWatcher::directoryChanged, this, &QV4L2CameraDevices::checkCameras); ++ m_deviceWatcher.addPath(QLatin1String("/dev")); ++ connect(&m_deviceWatcher, &QFileSystemWatcher::directoryChanged, this, &QV4L2CameraDevices::checkCameras); + doCheckCameras(); +} + +QList QV4L2CameraDevices::videoDevices() const +{ -+ return cameras; ++ return m_cameras; +} + +void QV4L2CameraDevices::checkCameras() +{ -+ doCheckCameras(); -+ videoInputsChanged(); ++ if (doCheckCameras()) ++ emit videoInputsChanged(); +} + -+const struct { ++static const struct { + QVideoFrameFormat::PixelFormat fmt; + uint32_t v4l2Format; +} formatMap[] = { @@ -1139,9 +1144,9 @@ index 000000000..0f7a8c91a +} + + -+void QV4L2CameraDevices::doCheckCameras() ++bool QV4L2CameraDevices::doCheckCameras() +{ -+ cameras.clear(); ++ QList newCameras; + + QDir dir(QLatin1String("/dev")); + const auto devices = dir.entryList(QDir::System); @@ -1154,25 +1159,27 @@ index 000000000..0f7a8c91a + continue; + + QByteArray file = QFile::encodeName(dir.filePath(device)); -+ int fd = open(file.constData(), O_RDONLY); ++ const int fd = open(file.constData(), O_RDONLY); + if (fd < 0) + continue; + -+ QCameraDevicePrivate *camera = nullptr; ++ auto fileCloseGuard = qScopeGuard([fd](){ close(fd); }); ++ + v4l2_fmtdesc formatDesc = {}; + + struct v4l2_capability cap; + if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) -+ goto fail; ++ continue; + + if (cap.device_caps & V4L2_CAP_META_CAPTURE) -+ goto fail; ++ continue; + if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) -+ goto fail; ++ continue; + if (!(cap.capabilities & V4L2_CAP_STREAMING)) -+ goto fail; ++ continue; ++ ++ auto camera = std::make_unique(); + -+ camera = new QCameraDevicePrivate; + camera->id = file; + camera->description = QString::fromUtf8((const char *)cap.card); +// qCDebug(qLV4L2Camera) << "found camera" << camera->id << camera->description; @@ -1193,6 +1200,7 @@ index 000000000..0f7a8c91a + frameSize.pixel_format = formatDesc.pixelformat; + + while (!ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frameSize)) { ++ ++frameSize.index; + if (frameSize.type != V4L2_FRMSIZE_TYPE_DISCRETE) + continue; + @@ -1206,9 +1214,9 @@ index 000000000..0f7a8c91a + frameInterval.height = frameSize.discrete.height; + + while (!ioctl(fd, VIDIOC_ENUM_FRAMEINTERVALS, &frameInterval)) { ++ ++frameInterval.index; + if (frameInterval.type != V4L2_FRMIVAL_TYPE_DISCRETE) + continue; -+ ++frameInterval.index; + float rate = float(frameInterval.discrete.denominator)/float(frameInterval.discrete.numerator); + if (rate > max) + max = rate; @@ -1217,15 +1225,14 @@ index 000000000..0f7a8c91a + } + +// qCDebug(qLV4L2Camera) << " " << resolution << min << max; -+ ++frameSize.index; + + if (min <= max) { -+ QCameraFormatPrivate *fmt = new QCameraFormatPrivate; ++ auto fmt = std::make_unique(); + fmt->pixelFormat = pixelFmt; + fmt->resolution = resolution; + fmt->minFrameRate = min; + fmt->maxFrameRate = max; -+ camera->videoFormats.append(fmt->create()); ++ camera->videoFormats.append(fmt.release()->create()); + camera->photoResolutions.append(resolution); + } + } @@ -1234,19 +1241,16 @@ index 000000000..0f7a8c91a + } + + // first camera is default -+ camera->isDefault = first; -+ first = false; ++ camera->isDefault = std::exchange(first, false); + -+ cameras.append(camera->create()); -+ -+ close(fd); -+ continue; -+ -+ fail: -+ if (camera) -+ delete camera; -+ close(fd); ++ newCameras.append(camera.release()->create()); + } ++ ++ if (areCamerasEqual(m_cameras, newCameras)) ++ return false; ++ ++ m_cameras = std::move(newCameras); ++ return true; +} + +class QV4L2VideoBuffer : public QAbstractVideoBuffer @@ -1983,10 +1987,10 @@ index 000000000..0f7a8c91a +QT_END_NAMESPACE diff --git a/src/plugins/multimedia/v4l2/qv4l2camera_p.h b/src/plugins/multimedia/v4l2/qv4l2camera_p.h new file mode 100644 -index 000000000..714b4c1db +index 000000000..f5df691c3 --- /dev/null +++ b/src/plugins/multimedia/v4l2/qv4l2camera_p.h -@@ -0,0 +1,160 @@ +@@ -0,0 +1,159 @@ +// Copyright (C) 2021 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 + @@ -2014,8 +2018,7 @@ index 000000000..714b4c1db + +QT_BEGIN_NAMESPACE + -+class QV4L2CameraDevices : public QObject, -+ public QPlatformVideoDevices ++class QV4L2CameraDevices : public QPlatformVideoDevices +{ + Q_OBJECT +public: @@ -2027,10 +2030,10 @@ index 000000000..714b4c1db + void checkCameras(); + +private: -+ void doCheckCameras(); ++ bool doCheckCameras(); + -+ QList cameras; -+ QFileSystemWatcher deviceWatcher; ++ QList m_cameras; ++ QFileSystemWatcher m_deviceWatcher; +}; + +struct QV4L2CameraBuffers