diff --git a/ports/qtwebengine/0ce5e91.diff b/ports/qtwebengine/0ce5e91.diff new file mode 100644 index 00000000000000..cf26bade11dd20 --- /dev/null +++ b/ports/qtwebengine/0ce5e91.diff @@ -0,0 +1,94 @@ +From 0ce5e91bdfa2cd7cac247911b9e8c4404c114937 Mon Sep 17 00:00:00 2001 +From: Peter Varga +Date: Thu, 21 Apr 2022 08:49:53 +0200 +Subject: [PATCH] Workaround MSVC2022 ICE in constexpr functions + +It happens around initialization of STL containers in a constexpr +function. In this case, aggregate initialization of std::array with +double braces seems to cause the crash. + +For some reason it doesn't seem to happen in 98-based. This workaround +can be reverted after Microsoft fixes the issue: +https://developercommunity.visualstudio.com/t/fatal-error-C1001:-Internal-compiler-err/1669485 + +Change-Id: I6bc2c71d328691cc74bc53c6d62f3d5df519b81e +Pick-to: 90-based +Fixes: QTBUG-101917 +Reviewed-by: Allan Sandfeld Jensen +--- + +diff --git a/chromium/base/hash/md5_constexpr_internal.h b/chromium/base/hash/md5_constexpr_internal.h +index b705bc8..5c9c004 100644 +--- a/chromium/base/hash/md5_constexpr_internal.h ++++ b/chromium/base/hash/md5_constexpr_internal.h +@@ -281,15 +281,63 @@ + return IntermediateDataToMD5Digest(ProcessMessage(data, n)); + } + +- static constexpr uint64_t Hash64(const char* data, uint32_t n) { +- IntermediateData intermediate = ProcessMessage(data, n); +- return (static_cast(SwapEndian(intermediate.a)) << 32) | +- static_cast(SwapEndian(intermediate.b)); ++ static constexpr uint64_t Hash64(const char* message, uint32_t n) { ++ const uint32_t m = GetPaddedMessageLength(n); ++ IntermediateData intermediate0 = kInitialIntermediateData; ++ for (uint32_t offset = 0; offset < m; offset += 64) { ++ RoundData data = { ++ GetPaddedMessageWord(message, n, m, offset), ++ GetPaddedMessageWord(message, n, m, offset + 4), ++ GetPaddedMessageWord(message, n, m, offset + 8), ++ GetPaddedMessageWord(message, n, m, offset + 12), ++ GetPaddedMessageWord(message, n, m, offset + 16), ++ GetPaddedMessageWord(message, n, m, offset + 20), ++ GetPaddedMessageWord(message, n, m, offset + 24), ++ GetPaddedMessageWord(message, n, m, offset + 28), ++ GetPaddedMessageWord(message, n, m, offset + 32), ++ GetPaddedMessageWord(message, n, m, offset + 36), ++ GetPaddedMessageWord(message, n, m, offset + 40), ++ GetPaddedMessageWord(message, n, m, offset + 44), ++ GetPaddedMessageWord(message, n, m, offset + 48), ++ GetPaddedMessageWord(message, n, m, offset + 52), ++ GetPaddedMessageWord(message, n, m, offset + 56), ++ GetPaddedMessageWord(message, n, m, offset + 60)}; ++ IntermediateData intermediate1 = intermediate0; ++ for (uint32_t i = 0; i < 64; ++i) ++ intermediate1 = ApplyStep(i, data, intermediate1); ++ intermediate0 = Add(intermediate0, intermediate1); ++ } ++ return (static_cast(SwapEndian(intermediate0.a)) << 32) | ++ static_cast(SwapEndian(intermediate0.b)); + } + +- static constexpr uint32_t Hash32(const char* data, uint32_t n) { +- IntermediateData intermediate = ProcessMessage(data, n); +- return SwapEndian(intermediate.a); ++ static constexpr uint32_t Hash32(const char* message, uint32_t n) { ++ const uint32_t m = GetPaddedMessageLength(n); ++ IntermediateData intermediate0 = kInitialIntermediateData; ++ for (uint32_t offset = 0; offset < m; offset += 64) { ++ RoundData data = { ++ GetPaddedMessageWord(message, n, m, offset), ++ GetPaddedMessageWord(message, n, m, offset + 4), ++ GetPaddedMessageWord(message, n, m, offset + 8), ++ GetPaddedMessageWord(message, n, m, offset + 12), ++ GetPaddedMessageWord(message, n, m, offset + 16), ++ GetPaddedMessageWord(message, n, m, offset + 20), ++ GetPaddedMessageWord(message, n, m, offset + 24), ++ GetPaddedMessageWord(message, n, m, offset + 28), ++ GetPaddedMessageWord(message, n, m, offset + 32), ++ GetPaddedMessageWord(message, n, m, offset + 36), ++ GetPaddedMessageWord(message, n, m, offset + 40), ++ GetPaddedMessageWord(message, n, m, offset + 44), ++ GetPaddedMessageWord(message, n, m, offset + 48), ++ GetPaddedMessageWord(message, n, m, offset + 52), ++ GetPaddedMessageWord(message, n, m, offset + 56), ++ GetPaddedMessageWord(message, n, m, offset + 60)}; ++ IntermediateData intermediate1 = intermediate0; ++ for (uint32_t i = 0; i < 64; ++i) ++ intermediate1 = ApplyStep(i, data, intermediate1); ++ intermediate0 = Add(intermediate0, intermediate1); ++ } ++ return SwapEndian(intermediate0.a); + } + }; + diff --git a/ports/qtwebengine/portfile.cmake b/ports/qtwebengine/portfile.cmake index 3ffe0b37638f1d..469852f8324e5e 100644 --- a/ports/qtwebengine/portfile.cmake +++ b/ports/qtwebengine/portfile.cmake @@ -82,15 +82,26 @@ if(WIN32) # WIN32 HOST probably has win_flex and win_bison! endif() endif() -#set(CURRENT_BUILDTREES_DIR "${CURRENT_BUILDTREES_DIR}/../tmp") # avoid long path issues in CI. -#cmake_path(NORMAL_PATH CURRENT_BUILDTREES_DIR) -#file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}") +string(LENGTH "${CURRENT_BUILDTREES_DIR}" buildtree_length) +# We know that C:/buildrees/${PORT} is to long to build Release. Debug works however. Means 24 length is too much but 23 might work. +if(buildtree_length GREATER 22 AND VCPKG_TARGET_IS_WINDOWS) + message(WARNING "Buildtree path '${CURRENT_BUILDTREES_DIR}' is too long.\nConsider passing --x-buildtrees-root= to vcpkg!\nTrying to use '${CURRENT_BUILDTREES_DIR}/../tmp'") + set(CURRENT_BUILDTREES_DIR "${CURRENT_BUILDTREES_DIR}/../tmp") # activly avoid long path issues in CI. -> Means CI will not return logs + cmake_path(NORMAL_PATH CURRENT_BUILDTREES_DIR) + string(LENGTH "${CURRENT_BUILDTREES_DIR}" buildtree_length_new) + if(buildtree_length_new GREATER 22) + message(FATAL_ERROR "Buildtree path is too long. Build will fail! Pass --x-buildtrees-root= to vcpkg!") + endif() + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}") +endif() ### Download third_party modules vcpkg_from_git( OUT_SOURCE_PATH SOURCE_PATH_WEBENGINE URL git://code.qt.io/qt/qtwebengine-chromium.git REF "${${PORT}_chromium_REF}" + PATCHES + 0ce5e91.diff ) ##### qt_install_submodule diff --git a/ports/qtwebengine/vcpkg.json b/ports/qtwebengine/vcpkg.json index 6b55e368c92c58..0c84aa2301e438 100644 --- a/ports/qtwebengine/vcpkg.json +++ b/ports/qtwebengine/vcpkg.json @@ -2,6 +2,7 @@ "$comment": "x86-windows is not within the upstream support matrix of Qt6", "name": "qtwebengine", "version": "6.3.0", + "port-version": 1, "description": "Qt WebEngine", "homepage": "https://www.qt.io/", "license": null, diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 59ab14591ea0cc..d7f870627b2108 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -927,9 +927,6 @@ qpid-proton:x64-uwp=fail qpid-proton:x64-windows-static=fail qt5-base:arm64-windows=fail -# qtwebengine:x64-windows has an ICE in VS2022 -qtwebengine:x64-windows=fail - # Skip deprecated Qt module # (remove after 1 year or longer due to vcpkg upgrade not handling removed ports correctly) qt5-canvas3d:x64-linux=skip diff --git a/versions/baseline.json b/versions/baseline.json index ddd2324713eb02..47f5b31ec3a9dd 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -5998,7 +5998,7 @@ }, "qtwebengine": { "baseline": "6.3.0", - "port-version": 0 + "port-version": 1 }, "qtwebsockets": { "baseline": "6.3.0", diff --git a/versions/q-/qtwebengine.json b/versions/q-/qtwebengine.json index 0e91c3f0b7ec38..afcecd55057c15 100644 --- a/versions/q-/qtwebengine.json +++ b/versions/q-/qtwebengine.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "6562d0a0294290afd20da039ff60602c1f3f4701", + "version": "6.3.0", + "port-version": 1 + }, { "git-tree": "47cd0b321b5eda832afbb46e58159ca3adb65ce9", "version": "6.3.0",