From 818b3fe7798ddde544af169eeed5f2c2f8a7769c Mon Sep 17 00:00:00 2001 From: TellowKrinkle Date: Wed, 8 Oct 2025 16:25:17 -0500 Subject: [PATCH] macOS: Update to Qt 6.9.3 --- .github/workflows/macos_build.yml | 2 +- .../macos/build-dependencies-universal.sh | 24 +++--- .../scripts/macos/build-dependencies.sh | 38 ++++----- .../scripts/macos/qt-macos11compat.patch | 78 +++++++++++++++++++ 4 files changed, 107 insertions(+), 35 deletions(-) create mode 100644 .github/workflows/scripts/macos/qt-macos11compat.patch diff --git a/.github/workflows/macos_build.yml b/.github/workflows/macos_build.yml index 7a4b5cefa6..0da3f5a0f5 100644 --- a/.github/workflows/macos_build.yml +++ b/.github/workflows/macos_build.yml @@ -91,7 +91,7 @@ jobs: uses: actions/cache@v4 with: path: ~/deps - key: ${{ inputs.os }} deps ${{ hashFiles('.github/workflows/scripts/macos/build-dependencies.sh', '.github/workflows/scripts/common/*.patch') }} + key: ${{ inputs.os }} deps ${{ hashFiles('.github/workflows/scripts/macos/*', '.github/workflows/scripts/common/*.patch') }} - name: Build Dependencies if: steps.cache-deps.outputs.cache-hit != 'true' diff --git a/.github/workflows/scripts/macos/build-dependencies-universal.sh b/.github/workflows/scripts/macos/build-dependencies-universal.sh index 44861830e7..8162acddb2 100755 --- a/.github/workflows/scripts/macos/build-dependencies-universal.sh +++ b/.github/workflows/scripts/macos/build-dependencies-universal.sh @@ -48,7 +48,7 @@ LIBJPEGTURBO=3.1.2 LIBWEBP=1.6.0 FFMPEG=8.0 MOLTENVK=1.2.9 -QT=6.7.3 +QT=6.9.3 QTAPNG=1.3.0 KDDOCKWIDGETS=2.3.0 PLUTOVG=1.3.1 @@ -89,11 +89,11 @@ e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 libwebp-$LIBWE 8f0012234b464ce50890c490f18194f913a7b1f4e6a03d6644179fa0f867d0cf libjpeg-turbo-$LIBJPEGTURBO.tar.gz b2751fccb6cc4c77708113cd78b561059b6fa904b24162fa0be2d60273d27b8e ffmpeg-$FFMPEG.tar.xz f415a09385030c6510a936155ce211f617c31506db5fbc563e804345f1ecf56e v$MOLTENVK.tar.gz -8ccbb9ab055205ac76632c9eeddd1ed6fc66936fc56afc2ed0fd5d9e23da3097 qtbase-everywhere-src-$QT.tar.xz -9fd58144081654c3373768dd96ead294023830927b14fe3d3c1ef641fb324753 qtimageformats-everywhere-src-$QT.tar.xz -40142cb71fb1e07ad612bc361b67f5d54cd9367f9979ae6b86124a064deda06b qtsvg-everywhere-src-$QT.tar.xz -f03bb7df619cd9ac9dba110e30b7bcab5dd88eb8bdc9cc752563b4367233203f qttools-everywhere-src-$QT.tar.xz -dcc762acac043b9bb5e4d369b6d6f53e0ecfcf76a408fe0db5f7ef071c9d6dc8 qttranslations-everywhere-src-$QT.tar.xz +c5a1a2f660356ec081febfa782998ae5ddbc5925117e64f50e4be9cd45b8dc6e qtbase-everywhere-src-$QT.tar.xz +4fb26bdbfbd4b8e480087896514e11c33aba7b6b39246547355ea340c4572ffe qtimageformats-everywhere-src-$QT.tar.xz +db76aa3358cbbe6fce7da576ff4669cb9801920188c750d3b12783bbe97026e2 qtsvg-everywhere-src-$QT.tar.xz +0cf7ab0e975fc57f5ce1375576a0a76e9ede25e6b01db3cf2339cd4d9750b4e9 qttools-everywhere-src-$QT.tar.xz +f36d545e6681b146fd79b3ebb74ef275e88694cf81eae8323327cae3bfc490a1 qttranslations-everywhere-src-$QT.tar.xz f1d3be3489f758efe1a8f12118a212febbe611aa670af32e0159fa3c1feab2a6 QtApng-$QTAPNG.tar.gz a8e4a25e5c2686fd36981e527ed05e451fcfc226bddf350f4e76181371190937 shaderc-$SHADERC.tar.gz 9427deccbdf4bde6a269938df38c6bd75247493786a310d8d733a2c82065ef47 shaderc-glslang-$SHADERC_GLSLANG.tar.gz @@ -285,6 +285,10 @@ echo "Installing Qt Base..." rm -fr "qtbase-everywhere-src-$QT" tar xf "qtbase-everywhere-src-$QT.tar.xz" cd "qtbase-everywhere-src-$QT" + +# Patch Qt to support macOS 11 +patch -p1 < "$SCRIPTDIR/qt-macos11compat.patch" + # since we don't have a direct reference to QtSvg, it doesn't deployed directly from the main binary # (only indirectly from iconengines), and the libqsvg.dylib imageformat plugin does not get deployed. # We could run macdeployqt twice, but that's even more janky than patching it. @@ -320,7 +324,7 @@ tar xf "qtsvg-everywhere-src-$QT.tar.xz" cd "qtsvg-everywhere-src-$QT" mkdir build cd build -"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" +"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DQT_GENERATE_SBOM=OFF make "-j$NPROCS" make install cd ../.. @@ -331,7 +335,7 @@ tar xf "qtimageformats-everywhere-src-$QT.tar.xz" cd "qtimageformats-everywhere-src-$QT" mkdir build cd build -"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DFEATURE_system_webp=ON +"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DQT_GENERATE_SBOM=OFF -DFEATURE_system_webp=ON make "-j$NPROCS" make install cd ../.. @@ -342,7 +346,7 @@ tar xf "qttools-everywhere-src-$QT.tar.xz" cd "qttools-everywhere-src-$QT" mkdir build cd build -"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DFEATURE_assistant=OFF -DFEATURE_clang=OFF -DFEATURE_designer=OFF -DFEATURE_kmap2qmap=OFF -DFEATURE_pixeltool=OFF -DFEATURE_pkg_config=OFF -DFEATURE_qev=OFF -DFEATURE_qtattributionsscanner=OFF -DFEATURE_qtdiag=OFF -DFEATURE_qtplugininfo=OFF +"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DQT_GENERATE_SBOM=OFF -DFEATURE_assistant=OFF -DFEATURE_clang=OFF -DFEATURE_designer=OFF -DFEATURE_kmap2qmap=OFF -DFEATURE_pixeltool=OFF -DFEATURE_pkg_config=OFF -DFEATURE_qev=OFF -DFEATURE_qtattributionsscanner=OFF -DFEATURE_qtdiag=OFF -DFEATURE_qtplugininfo=OFF make "-j$NPROCS" make install cd ../.. @@ -371,7 +375,7 @@ tar xf "qttranslations-everywhere-src-$QT.tar.xz" cd "qttranslations-everywhere-src-$QT" mkdir build cd build -"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" +"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DQT_GENERATE_SBOM=OFF make "-j$NPROCS" make install cd ../.. diff --git a/.github/workflows/scripts/macos/build-dependencies.sh b/.github/workflows/scripts/macos/build-dependencies.sh index 4358429832..e02fe79017 100755 --- a/.github/workflows/scripts/macos/build-dependencies.sh +++ b/.github/workflows/scripts/macos/build-dependencies.sh @@ -30,7 +30,7 @@ LIBJPEGTURBO=3.1.2 LIBWEBP=1.6.0 FFMPEG=8.0 MOLTENVK=1.2.9 -QT=6.7.3 +QT=6.9.3 QTAPNG=1.3.0 KDDOCKWIDGETS=2.3.0 PLUTOVG=1.3.1 @@ -54,6 +54,7 @@ CMAKE_COMMON=( -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DCMAKE_OSX_ARCHITECTURES="x86_64" + -DCMAKE_APPLE_SILICON_PROCESSOR="x86_64" -DCMAKE_INSTALL_NAME_DIR='$/lib' ) @@ -69,11 +70,11 @@ e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 libwebp-$LIBWE 8f0012234b464ce50890c490f18194f913a7b1f4e6a03d6644179fa0f867d0cf libjpeg-turbo-$LIBJPEGTURBO.tar.gz b2751fccb6cc4c77708113cd78b561059b6fa904b24162fa0be2d60273d27b8e ffmpeg-$FFMPEG.tar.xz f415a09385030c6510a936155ce211f617c31506db5fbc563e804345f1ecf56e v$MOLTENVK.tar.gz -8ccbb9ab055205ac76632c9eeddd1ed6fc66936fc56afc2ed0fd5d9e23da3097 qtbase-everywhere-src-$QT.tar.xz -9fd58144081654c3373768dd96ead294023830927b14fe3d3c1ef641fb324753 qtimageformats-everywhere-src-$QT.tar.xz -40142cb71fb1e07ad612bc361b67f5d54cd9367f9979ae6b86124a064deda06b qtsvg-everywhere-src-$QT.tar.xz -f03bb7df619cd9ac9dba110e30b7bcab5dd88eb8bdc9cc752563b4367233203f qttools-everywhere-src-$QT.tar.xz -dcc762acac043b9bb5e4d369b6d6f53e0ecfcf76a408fe0db5f7ef071c9d6dc8 qttranslations-everywhere-src-$QT.tar.xz +c5a1a2f660356ec081febfa782998ae5ddbc5925117e64f50e4be9cd45b8dc6e qtbase-everywhere-src-$QT.tar.xz +4fb26bdbfbd4b8e480087896514e11c33aba7b6b39246547355ea340c4572ffe qtimageformats-everywhere-src-$QT.tar.xz +db76aa3358cbbe6fce7da576ff4669cb9801920188c750d3b12783bbe97026e2 qtsvg-everywhere-src-$QT.tar.xz +0cf7ab0e975fc57f5ce1375576a0a76e9ede25e6b01db3cf2339cd4d9750b4e9 qttools-everywhere-src-$QT.tar.xz +f36d545e6681b146fd79b3ebb74ef275e88694cf81eae8323327cae3bfc490a1 qttranslations-everywhere-src-$QT.tar.xz f1d3be3489f758efe1a8f12118a212febbe611aa670af32e0159fa3c1feab2a6 QtApng-$QTAPNG.tar.gz a8e4a25e5c2686fd36981e527ed05e451fcfc226bddf350f4e76181371190937 shaderc-$SHADERC.tar.gz 9427deccbdf4bde6a269938df38c6bd75247493786a310d8d733a2c82065ef47 shaderc-glslang-$SHADERC_GLSLANG.tar.gz @@ -233,26 +234,15 @@ rm -fr "qtbase-everywhere-src-$QT" tar xf "qtbase-everywhere-src-$QT.tar.xz" cd "qtbase-everywhere-src-$QT" +# Patch Qt to support macOS 11 +patch -p1 < "$SCRIPTDIR/qt-macos11compat.patch" + # since we don't have a direct reference to QtSvg, it doesn't deployed directly from the main binary # (only indirectly from iconengines), and the libqsvg.dylib imageformat plugin does not get deployed. # We could run macdeployqt twice, but that's even more janky than patching it. - -# https://github.com/qt/qtbase/commit/7b018629c3c3ab23665bf1da00c43c1546042035 -# The QProcess default wait time of 30s may be too short in e.g. CI environments where processes may be blocked -# for a longer time waiting for CPU or IO. - patch -u src/tools/macdeployqt/shared/shared.cpp <) + char uuid[UuidStringLen + 1]; +- io_service_t service = IOServiceGetMatchingService(kIOMainPortDefault, IOServiceMatching("IOPlatformExpertDevice")); ++ io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice")); + QCFString stringRef = (CFStringRef)IORegistryEntryCreateCFProperty(service, CFSTR(kIOPlatformUUIDKey), kCFAllocatorDefault, 0); + CFStringGetCString(stringRef, uuid, sizeof(uuid), kCFStringEncodingMacRoman); + return QByteArray(uuid); +diff --git a/src/corelib/kernel/qcore_mac.mm b/src/corelib/kernel/qcore_mac.mm +index 9f27dbe694e..c023a48cad3 100644 +--- a/src/corelib/kernel/qcore_mac.mm ++++ b/src/corelib/kernel/qcore_mac.mm +@@ -372,7 +372,7 @@ bool qt_apple_runningWithLiquidGlass() + return config; + #endif + +- QIOType nvram = IORegistryEntryFromPath(kIOMainPortDefault, "IODeviceTree:/options"); ++ QIOType nvram = IORegistryEntryFromPath(kIOMasterPortDefault, "IODeviceTree:/options"); + if (!nvram) { + qWarning("Failed to locate NVRAM entry in IO registry"); + return {}; +diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm +index 6b33d94d58c..867389e4c93 100644 +--- a/src/plugins/platforms/cocoa/qcocoawindow.mm ++++ b/src/plugins/platforms/cocoa/qcocoawindow.mm +@@ -323,6 +323,8 @@ a normal (not maximized or full screen) top-level window. + m_view.safeAreaInsets.bottom + }; + ++ if (@available(macOS 12, *)) { ++ + // The screen's safe area insets represent the distances from the screen's + // edges at which content isn't obscured. The view's safe area margins do + // not include the screen's insets automatically, so we need to manually +@@ -355,6 +357,10 @@ a normal (not maximized or full screen) top-level window. + }; + + return (screenSafeAreaMargins | viewSafeAreaMargins).toMargins(); ++ ++ } else { ++ return viewSafeAreaMargins.toMargins(); ++ } + } + + void QCocoaWindow::updateSafeAreaMarginsIfNeeded()