diff --git a/ports/qt5-webengine/portfile.cmake b/ports/qt5-webengine/portfile.cmake index 080b21b3ce..cab44c7e6b 100644 --- a/ports/qt5-webengine/portfile.cmake +++ b/ports/qt5-webengine/portfile.cmake @@ -2,12 +2,13 @@ vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) string(LENGTH "${CURRENT_BUILDTREES_DIR}" buildtrees_path_length) if(buildtrees_path_length GREATER 35 AND CMAKE_HOST_WIN32) vcpkg_buildpath_length_warning(35) - message(FATAL_ERROR "terminating due to source length.") + message(WARNING "The ${PORT} source was will be extracted to ${CURRENT_BUILDTREES_DIR} , which has more then 35 characters in length.") + message(FATAL_ERROR "terminating due to ${CURRENT_BUILDTREES_DIR} being too long.") endif() #set(VCPKG_BUILD_TYPE release) #You probably want to set this to reduce build type and space requirements message(STATUS "${PORT} requires a lot of free disk space (>100GB), ram (>8 GB) and time (>2h per configuration) to be successfully build.\n\ -- As such ${PORT} is currently experimental.\n\ --- If ${PORT} fails post build validation please open up an issue. \n\ +-- If ${PORT} fails post build validation please try manually reducing VCPKG_MAX_CONCURRENY and open up an issue if it still cannot build. \n\ -- If it fails due to post validation the successfully installed files can be found in ${CURRENT_PACKAGES_DIR} \n\ -- and just need to be copied into ${CURRENT_INSTALLED_DIR}") if(NOT VCPKG_TARGET_IS_WINDOWS) @@ -20,11 +21,13 @@ vcpkg_find_acquire_program(BISON) vcpkg_find_acquire_program(GPERF) vcpkg_find_acquire_program(PYTHON2) vcpkg_find_acquire_program(NINJA) +set(NODEJS "${CURRENT_HOST_INSTALLED_DIR}/tools/node/node${VCPKG_HOST_EXECUTABLE_SUFFIX}") get_filename_component(FLEX_DIR "${FLEX}" DIRECTORY ) get_filename_component(BISON_DIR "${BISON}" DIRECTORY ) get_filename_component(PYTHON2_DIR "${PYTHON2}" DIRECTORY ) get_filename_component(GPERF_DIR "${GPERF}" DIRECTORY ) get_filename_component(NINJA_DIR "${NINJA}" DIRECTORY ) +get_filename_component(NODEJS_DIR "${NODEJS}" DIRECTORY ) if(WIN32) # WIN32 HOST probably has win_flex and win_bison! if(NOT EXISTS "${FLEX_DIR}/flex${VCPKG_HOST_EXECUTABLE_SUFFIX}") @@ -40,11 +43,13 @@ vcpkg_add_to_path(PREPEND "${BISON_DIR}") vcpkg_add_to_path(PREPEND "${PYTHON2_DIR}") vcpkg_add_to_path(PREPEND "${GPERF_DIR}") vcpkg_add_to_path(PREPEND "${NINJA_DIR}") +vcpkg_add_to_path(PREPEND "${NODEJS_DIR}") set(PATCHES common.pri.patch gl.patch build_1.patch - build_2.patch) + build_2.patch + workaround-msvc2022-ice.patch) set(OPTIONS) if("proprietary-codecs" IN_LIST FEATURES) diff --git a/ports/qt5-webengine/vcpkg.json b/ports/qt5-webengine/vcpkg.json index c601cbf023..64338b1cbf 100644 --- a/ports/qt5-webengine/vcpkg.json +++ b/ports/qt5-webengine/vcpkg.json @@ -1,6 +1,7 @@ { "name": "qt5-webengine", "version": "5.15.4", + "port-version": 1, "description": "Qt5 webengine Module;", "license": null, "supports": "!static", @@ -23,7 +24,8 @@ "qt5-quickcontrols", "qt5-quickcontrols2", "qt5-tools", - "qt5-webchannel" + "qt5-webchannel", + "vcpkg-tool-nodejs" ], "features": { "proprietary-codecs": { diff --git a/ports/qt5-webengine/workaround-msvc2022-ice.patch b/ports/qt5-webengine/workaround-msvc2022-ice.patch new file mode 100644 index 0000000000..59cc004b62 --- /dev/null +++ b/ports/qt5-webengine/workaround-msvc2022-ice.patch @@ -0,0 +1,101 @@ +--- a/src/3rdparty/chromium/base/hash/md5_constexpr_internal.h ++++ b/src/3rdparty/chromium/base/hash/md5_constexpr_internal.h +@@ -281,15 +281,63 @@ struct MD5CE { + 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); + } + }; + +--- a/src/3rdparty/chromium/net/third_party/quiche/src/quic/core/quic_versions.h ++++ b/src/3rdparty/chromium/net/third_party/quiche/src/quic/core/quic_versions.h +@@ -26,6 +26,7 @@ + #include + #include + ++#include "absl/base/macros.h" + #include "net/third_party/quiche/src/quic/core/quic_tag.h" + #include "net/third_party/quiche/src/quic/core/quic_types.h" + #include "net/third_party/quiche/src/quic/platform/api/quic_export.h" +@@ -181,8 +182,14 @@ QUIC_EXPORT_PRIVATE constexpr bool ParsedQuicVersionIsValid( + transport_version == QUIC_VERSION_RESERVED_FOR_NEGOTIATION; + if (!transport_version_is_valid) { + // Iterators are not constexpr in C++14 which Chrome uses. +- constexpr auto supported_transport_versions = SupportedTransportVersions(); +- for (size_t i = 0; i < supported_transport_versions.size(); ++i) { ++ constexpr QuicTransportVersion supported_transport_versions[] = { ++ QUIC_VERSION_IETF_DRAFT_29, ++ QUIC_VERSION_IETF_DRAFT_27, ++ QUIC_VERSION_51, ++ QUIC_VERSION_50, ++ QUIC_VERSION_46, ++ QUIC_VERSION_43}; ++ for (size_t i = 0; i < ABSL_ARRAYSIZE(supported_transport_versions); ++i) { + const QuicTransportVersion& trans_vers = supported_transport_versions[i]; + if (trans_vers == transport_version) { + transport_version_is_valid = true; + diff --git a/versions/baseline.json b/versions/baseline.json index 1a0356ea53..6cec672b99 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -5834,7 +5834,7 @@ }, "qt5-webengine": { "baseline": "5.15.4", - "port-version": 0 + "port-version": 1 }, "qt5-webglplugin": { "baseline": "5.15.4", diff --git a/versions/q-/qt5-webengine.json b/versions/q-/qt5-webengine.json index 229b7b9fad..b5fbc94b2d 100644 --- a/versions/q-/qt5-webengine.json +++ b/versions/q-/qt5-webengine.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "ac21a058fe59c5b0272cdfc2cc1791b9b9901a79", + "version": "5.15.4", + "port-version": 1 + }, { "git-tree": "f210713d4af04f690a79188949467c8ba9b2597e", "version": "5.15.4",