aboutsummaryrefslogtreecommitdiff
path: root/www/qt5-webengine
diff options
context:
space:
mode:
authorPiotr Kubaj <pkubaj@FreeBSD.org>2019-11-23 17:30:05 +0000
committerPiotr Kubaj <pkubaj@FreeBSD.org>2019-11-23 17:30:05 +0000
commit16d89059b0ea0bfe94e1cfba1b56acda7ffa050c (patch)
tree024d913f94b78358fd2061a545c883c50fc92b85 /www/qt5-webengine
parent8fb2f4b55d8d23a3144faf94cc5babdef8475066 (diff)
downloadports-16d89059b0ea0bfe94e1cfba1b56acda7ffa050c.tar.gz
ports-16d89059b0ea0bfe94e1cfba1b56acda7ffa050c.zip
www/qt5-webengine: fix build on powerpc64 (elfv2 only)
Tested with otter-browser on my Talos. Approved by: tcberner (mentor, maintainer, earlier version) Differential Revision: https://reviews.freebsd.org/D22184
Notes
Notes: svn path=/head/; revision=518257
Diffstat (limited to 'www/qt5-webengine')
-rw-r--r--www/qt5-webengine/Makefile16
-rw-r--r--www/qt5-webengine/files/patch-mkspecs_features_functions.prf12
-rw-r--r--www/qt5-webengine/files/patch-mkspecs_features_platform.prf10
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_partition__alloc.cc11
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_i18n_icu__util.cc18
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_memory_shared__memory__mapping__unittest.cc39
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_metrics_bucket__ranges__unittest.cc32
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_pickle.cc16
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_sha1.cc24
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_strings_string__number__conversions__unittest.cc24
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_system_sys__info__posix.cc6
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_base_third__party_dmg__fp_dtoa.cc14
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_build_download__nacl__toolchains.py13
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_build_toolchain_linux_BUILD.gn21
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_util__unittest.cc24
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_v4__rice.cc39
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_v4__rice__unittest.cc33
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_components_update__client_update__query__params.cc24
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_media_ffmpeg_ffmpeg__common.cc13
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_media_formats_mp4_box__definitions.cc26
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_media_renderers_paint__canvas__video__renderer.cc22
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_net_cert_crl__set.cc48
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_services_service__manager_sandbox_linux_bpf__renderer__policy__linux.cc14
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_config_SkUserConfig.h39
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_ext_image__operations__unittest.cc59
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_abseil-cpp_base_internal_unscaledcycleclock.cc20
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_angle_src_libANGLE_Constants.h10
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_gpu_webgl__image__conversion.cc13
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_gpu_webgl__image__conversion__test.cc15
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_graphics__context__test.cc134
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_highcontrast_highcontrast__classifier.cc79
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_heap_asm_BUILD.gn13
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_heap_asm_SaveRegisters__ppc64.S63
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_bmp_bmp__image__reader.h24
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_jpeg_jpeg__image__decoder.cc40
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_webp_webp__image__decoder.cc29
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_wtf_dtoa_utils.h11
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_BUILD.gn20
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_asn1_a__int.c12
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_chacha_chacha.c77
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_cipher__extra_e__aesgcmsiv.c28
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_compiler__test.cc17
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_curve25519_spake25519.c36
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_evp_scrypt.c30
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_bn_bytes.c64
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_ecdsa_ecdsa.c14
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_gcm.c257
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_internal.h20
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_polyval.c29
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_rand_ctrdrbg.c15
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_poly1305_poly1305.c19
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_include_openssl_base.h17
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_third__party_fiat_curve25519.c19
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_third__party_fiat_p256.c51
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_crc32c_BUILD.gn16
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_flatbuffers_src_include_flatbuffers_base.h24
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_flatbuffers_src_include_flatbuffers_minireflect.h73
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_leveldatabase_port_port__chromium.h15
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_BUILD.gn14
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_powerpc_filter__vsx__intrinsics.c770
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_powerpc_powerpc__init.c128
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_modp__b64_BUILD.gn19
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_modp__b64_modp__b64.cc11
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__constants.h11
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_base_utils.h19
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_protozero_message.h16
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_src_protozero_message.cc15
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_src_protozero_proto__decoder.cc12
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_include_core_SkPostConfig.h15
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_include_private_GrTypesPriv.h12
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_codec_SkCodecPriv.h10
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkColor.cpp34
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkPixmap.cpp12
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_Sk4px__none.h10
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkBlitRow__opts.h13
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkRasterPipeline__opts.h106
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_utils_SkJSON.cpp22
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_utils_SkJSON.h51
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_third__party_skcms_skcms.cc47
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_third__party_skcms_src_Transform__inl.h400
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_smhasher_src_City.cpp17
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_common__audio_wav__file.cc50
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_common__audio_wav__header.cc30
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_modules_desktop__capture_differ__block.cc26
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_rtc__base_system_arch.h21
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_aura_mus_os__exchange__data__provider__mus.cc24
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_base_resource_data__pack.cc166
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_jpeg__codec.cc24
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec.cc33
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec.h13
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec__unittest.cc11
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_color__analysis.cc87
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_skbitmap__operations__unittest.cc11
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_url_url__canon__host.cc12
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_url_url__canon__internal.h14
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn18
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_ppc_constants-ppc.h30
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_ppc_register-ppc.h12
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_test_BUILD.gn36
-rw-r--r--www/qt5-webengine/files/patch-src_3rdparty_gn_tools_gn_args.cc11
-rw-r--r--www/qt5-webengine/pkg-plist3
101 files changed, 4264 insertions, 33 deletions
diff --git a/www/qt5-webengine/Makefile b/www/qt5-webengine/Makefile
index 568cdd132ad8..c301dc37f755 100644
--- a/www/qt5-webengine/Makefile
+++ b/www/qt5-webengine/Makefile
@@ -110,6 +110,14 @@ MAKE_ENV+= CC="${CC}" CXX="${CXX}" \
CPLUS_INCLUDE_PATH=${LOCALBASE}/include \
${CONFIGURE_ENV}
+.include <bsd.port.pre.mk>
+
+.if ${ARCH:Mmips*} || ${ARCH:Mpowerpc*} || ${ARCH} == sparc64
+PLIST_SUB+= BE="" LE="@comment "
+.else
+PLIST_SUB+= BE="@comment " LE=""
+.endif
+
post-extract:
# Install FreeBSD's freebsd.pri file.
${CP} ${FILESDIR}/freebsd.pri ${WRKSRC}/src/core/config/freebsd.pri
@@ -121,6 +129,12 @@ post-extract-SNDIO-on:
@${CP} ${FILESDIR}/audio_manager_openbsd.* \
${WRKSRC}/src/3rdparty/chromium/media/audio/openbsd
+.if ${ARCH:Mmips*} || ${ARCH:Mpowerpc*} || ${ARCH} == sparc64
+post-patch:
+ @${REINPLACE_CMD} -e 's/icudtl.dat/icudtb.dat/' \
+ ${WRKSRC}/src/core/core_module.pro
+.endif
+
pre-configure:
# Link in ${PYTHON_CMD} to ${CONFIGURE_WRKSRC}/bin -- the scripts hardcode 'python'
# in too many places to reasonably patch. So just link in ${PYTHON_CMD} to work around
@@ -132,4 +146,4 @@ pre-configure:
# Rerun syncqt.pl -- otherwise the resulting package misses some forwarding headers.
cd ${WRKSRC} && ${QT_BINDIR}/syncqt.pl -version ${QT5_VERSION}
-.include <bsd.port.mk>
+.include <bsd.port.post.mk>
diff --git a/www/qt5-webengine/files/patch-mkspecs_features_functions.prf b/www/qt5-webengine/files/patch-mkspecs_features_functions.prf
index e21d21db79ec..3b2619581de5 100644
--- a/www/qt5-webengine/files/patch-mkspecs_features_functions.prf
+++ b/www/qt5-webengine/files/patch-mkspecs_features_functions.prf
@@ -1,7 +1,7 @@
Include the freebsd.pri file provided by the port, to pass FreeBSD specific
settings to gn.
---- mkspecs/features/functions.prf.orig 2019-01-16 22:42:58 UTC
+--- mkspecs/features/functions.prf.orig 2019-05-24 09:01:39 UTC
+++ mkspecs/features/functions.prf
@@ -82,6 +82,7 @@ defineReplace(gnArgs) {
linux: include($$QTWEBENGINE_ROOT/src/core/config/linux.pri)
@@ -11,7 +11,15 @@ settings to gn.
isEmpty(gn_args): error(No gn_args found please make sure you have valid configuration.)
return($$gn_args)
}
-@@ -101,6 +102,7 @@ defineReplace(gnOS) {
+@@ -94,6 +95,7 @@ defineReplace(gnArch) {
+ contains(qtArch, "arm64"): return(arm64)
+ contains(qtArch, "mips"): return(mipsel)
+ contains(qtArch, "mips64"): return(mips64el)
++ contains(qtArch, "power64"): return(ppc64)
+ return(unknown)
+ }
+
+@@ -101,6 +103,7 @@ defineReplace(gnOS) {
macos: return(mac)
win32: return(win)
linux: return(linux)
diff --git a/www/qt5-webengine/files/patch-mkspecs_features_platform.prf b/www/qt5-webengine/files/patch-mkspecs_features_platform.prf
index dcafb31bfd23..9e6614c3a0e8 100644
--- a/www/qt5-webengine/files/patch-mkspecs_features_platform.prf
+++ b/www/qt5-webengine/files/patch-mkspecs_features_platform.prf
@@ -1,4 +1,4 @@
---- mkspecs/features/platform.prf.orig 2018-11-27 04:10:38 UTC
+--- mkspecs/features/platform.prf.orig 2019-05-24 09:01:39 UTC
+++ mkspecs/features/platform.prf
@@ -11,7 +11,7 @@ defineTest(isQtMinimum) {
@@ -9,3 +9,11 @@
if(!gcc:!clang)|intel_icc {
skipBuild("Qt WebEngine on Linux requires clang or GCC.")
return(false)
+@@ -84,6 +84,7 @@ defineTest(isArchSupported) {
+ contains(QT_ARCH, "arm")|contains(QT_ARCH, "arm64"): return(true)
+ contains(QT_ARCH, "mips"): return(true)
+ # contains(QT_ARCH, "mips64"): return(true)
++ contains(QT_ARCH, "power64"): return(true)
+
+ skipBuild("QtWebEngine can only be built for x86, x86-64, ARM, Aarch64, and MIPSel architectures.")
+ return(false)
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_partition__alloc.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_partition__alloc.cc
new file mode 100644
index 000000000000..99737cac979c
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_allocator_partition__allocator_partition__alloc.cc
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.cc
+@@ -440,7 +440,7 @@ static size_t PartitionPurgePage(internal::PartitionPa
+ #endif
+ }
+ // Terminate the freelist chain.
+- *entry_ptr = nullptr;
++ *entry_ptr = internal::PartitionFreelistEntry::Transform(nullptr);
+ // The freelist head is stored unmasked.
+ page->freelist_head =
+ internal::PartitionFreelistEntry::Transform(page->freelist_head);
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_i18n_icu__util.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_i18n_icu__util.cc
index fd29b6232156..e159f1cf4383 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_i18n_icu__util.cc
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_i18n_icu__util.cc
@@ -1,5 +1,5 @@
---- src/3rdparty/chromium/base/i18n/icu_util.cc.orig 2018-11-13 18:25:11 UTC
-+++ src/3rdparty/chromium/base/i18n/icu_util.cc
+--- src/3rdparty/chromium/base/i18n/icu_util.cc.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/base/i18n/icu_util.cc 2019-10-27 22:58:57.501541000 +0100
@@ -20,7 +20,7 @@
#include "build/build_config.h"
#include "third_party/icu/source/common/unicode/putil.h"
@@ -9,7 +9,19 @@
#include "third_party/icu/source/i18n/unicode/timezone.h"
#endif
-@@ -320,7 +320,7 @@ bool InitializeICU() {
+@@ -75,7 +75,11 @@
+ // No need to change the filename in multiple places (gyp files, windows
+ // build pkg configurations, etc). 'l' stands for Little Endian.
+ // This variable is exported through the header file.
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ const char kIcuDataFileName[] = "icudtl.dat";
++#else
++const char kIcuDataFileName[] = "icudtb.dat";
++#endif
+ #if defined(OS_ANDROID)
+ const char kAndroidAssetsIcuDataFileName[] = "assets/icudtl.dat";
+ #endif
+@@ -320,7 +324,7 @@
// TODO(jungshik): Some callers do not care about tz at all. If necessary,
// add a boolean argument to this function to init'd the default tz only
// when requested.
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_memory_shared__memory__mapping__unittest.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_memory_shared__memory__mapping__unittest.cc
new file mode 100644
index 000000000000..6505106475d0
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_memory_shared__memory__mapping__unittest.cc
@@ -0,0 +1,39 @@
+--- src/3rdparty/chromium/base/memory/shared_memory_mapping_unittest.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/base/memory/shared_memory_mapping_unittest.cc
+@@ -12,6 +12,7 @@
+ #include "base/containers/span.h"
+ #include "base/memory/read_only_shared_memory_region.h"
+ #include "testing/gtest/include/gtest/gtest.h"
++#include "base/sys_byteorder.h"
+
+ namespace base {
+
+@@ -69,8 +70,8 @@ TEST_F(SharedMemoryMappingTest, SpanWithAutoDeducedEle
+
+ for (size_t i = 0; i < write_span.size(); ++i)
+ write_span[i] = i + 1;
+- EXPECT_EQ(0x04030201u, read_span[0]);
+- EXPECT_EQ(0x08070605u, read_span[1]);
++ EXPECT_EQ(HostToNet32(0x01020304u), read_span[0]);
++ EXPECT_EQ(HostToNet32(0x05060708u), read_span[1]);
+ }
+
+ TEST_F(SharedMemoryMappingTest, SpanWithExplicitElementCount) {
+@@ -95,13 +96,13 @@ TEST_F(SharedMemoryMappingTest, SpanWithExplicitElemen
+
+ for (size_t i = 0; i < write_span.size(); ++i)
+ write_span[i] = i + 1;
+- EXPECT_EQ(0x04030201u, read_span[0]);
+- EXPECT_EQ(0x08070605u, read_span[1]);
+- EXPECT_EQ(0x04030201u, read_span_2[0]);
++ EXPECT_EQ(HostToNet32(0x01020304u), read_span[0]);
++ EXPECT_EQ(HostToNet32(0x05060708u), read_span[1]);
++ EXPECT_EQ(HostToNet32(0x01020304u), read_span_2[0]);
+
+ std::fill(write_span_2.begin(), write_span_2.end(), 0);
+ EXPECT_EQ(0u, read_span[0]);
+- EXPECT_EQ(0x08070605u, read_span[1]);
++ EXPECT_EQ(HostToNet32(0x05060708u), read_span[1]);
+ EXPECT_EQ(0u, read_span_2[0]);
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_metrics_bucket__ranges__unittest.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_metrics_bucket__ranges__unittest.cc
new file mode 100644
index 000000000000..a360b48af449
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_metrics_bucket__ranges__unittest.cc
@@ -0,0 +1,32 @@
+--- src/3rdparty/chromium/base/metrics/bucket_ranges_unittest.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/base/metrics/bucket_ranges_unittest.cc
+@@ -7,6 +7,7 @@
+ #include <stdint.h>
+
+ #include "testing/gtest/include/gtest/gtest.h"
++#include "base/sys_byteorder.h"
+
+ namespace base {
+ namespace {
+@@ -64,13 +65,21 @@ TEST(BucketRangesTest, Checksum) {
+ ranges.set_range(2, 2);
+
+ ranges.ResetChecksum();
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ EXPECT_EQ(289217253u, ranges.checksum());
++#else
++ EXPECT_EQ(2767231596u, ranges.checksum());
++#endif
+
+ ranges.set_range(2, 3);
+ EXPECT_FALSE(ranges.HasValidChecksum());
+
+ ranges.ResetChecksum();
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ EXPECT_EQ(2843835776u, ranges.checksum());
++#else
++ EXPECT_EQ(3556223738u, ranges.checksum());
++#endif
+ EXPECT_TRUE(ranges.HasValidChecksum());
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_pickle.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_pickle.cc
new file mode 100644
index 000000000000..0e14033fbf0c
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_pickle.cc
@@ -0,0 +1,16 @@
+--- src/3rdparty/chromium/base/pickle.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/base/pickle.cc
+@@ -82,7 +82,12 @@ inline const char* PickleIterator::GetReadPointerAndAd
+ }
+
+ bool PickleIterator::ReadBool(bool* result) {
+- return ReadBuiltinType(result);
++ int int_result;
++ if (ReadBuiltinType(&int_result)) {
++ *result = static_cast<bool>(int_result);
++ return true;
++ } else
++ return false;
+ }
+
+ bool PickleIterator::ReadInt(int* result) {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_sha1.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_sha1.cc
new file mode 100644
index 000000000000..a60da5d76ee7
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_sha1.cc
@@ -0,0 +1,24 @@
+--- src/3rdparty/chromium/base/sha1.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/base/sha1.cc
+@@ -110,8 +110,10 @@ void SecureHashAlgorithm::Final() {
+ Pad();
+ Process();
+
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ for (auto& t : H)
+ t = ByteSwap(t);
++#endif
+ }
+
+ void SecureHashAlgorithm::Update(const void* data, size_t nbytes) {
+@@ -157,8 +159,10 @@ void SecureHashAlgorithm::Process() {
+ //
+ // W and M are in a union, so no need to memcpy.
+ // memcpy(W, M, sizeof(M));
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ for (t = 0; t < 16; ++t)
+ W[t] = ByteSwap(W[t]);
++#endif
+
+ // b.
+ for (t = 16; t < 80; ++t)
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_strings_string__number__conversions__unittest.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_strings_string__number__conversions__unittest.cc
new file mode 100644
index 000000000000..2c01ffc584ee
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_strings_string__number__conversions__unittest.cc
@@ -0,0 +1,24 @@
+--- src/3rdparty/chromium/base/strings/string_number_conversions_unittest.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/base/strings/string_number_conversions_unittest.cc
+@@ -829,12 +829,21 @@ TEST(StringNumberConversionsTest, DoubleToString) {
+ }
+
+ // The following two values were seen in crashes in the wild.
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ const char input_bytes[8] = {0, 0, 0, 0, '\xee', '\x6d', '\x73', '\x42'};
++#else
++ const char input_bytes[8] = {'\x42', '\x73', '\x6d', '\xee', 0, 0, 0, 0};
++#endif
+ double input = 0;
+ memcpy(&input, input_bytes, base::size(input_bytes));
+ EXPECT_EQ("1335179083776", NumberToString(input));
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ const char input_bytes2[8] =
+ {0, 0, 0, '\xa0', '\xda', '\x6c', '\x73', '\x42'};
++#else
++ const char input_bytes2[8] =
++ {'\x42', '\x73', '\x6c', '\xda', '\xa0', 0, 0, 0};
++#endif
+ input = 0;
+ memcpy(&input, input_bytes2, base::size(input_bytes2));
+ EXPECT_EQ("1334890332160", NumberToString(input));
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_system_sys__info__posix.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_system_sys__info__posix.cc
index 2681b9db969e..422d934916fb 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_system_sys__info__posix.cc
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_system_sys__info__posix.cc
@@ -27,12 +27,14 @@
int SysInfo::NumberOfProcessors() {
return g_lazy_number_of_processors.Get().value();
}
-@@ -225,6 +225,8 @@ std::string SysInfo::OperatingSystemArchitecture() {
+@@ -225,7 +225,9 @@ std::string SysInfo::OperatingSystemArchitecture() {
arch = "x86";
} else if (arch == "amd64") {
arch = "x86_64";
+- } else if (std::string(info.sysname) == "AIX") {
+ } else if (arch == "arm64") {
+ arch = "aarch64";
- } else if (std::string(info.sysname) == "AIX") {
++ } else if (arch == "powerpc" || arch == "powerpc64") {
arch = "ppc64";
}
+ return arch;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_third__party_dmg__fp_dtoa.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_third__party_dmg__fp_dtoa.cc
new file mode 100644
index 000000000000..f55aef76e854
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_third__party_dmg__fp_dtoa.cc
@@ -0,0 +1,14 @@
+--- src/3rdparty/chromium/base/third_party/dmg_fp/dtoa.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/base/third_party/dmg_fp/dtoa.cc
+@@ -186,7 +186,11 @@
+ * used for input more than STRTOD_DIGLIM digits long (default 40).
+ */
+
++#ifdef __BIG_ENDIAN__
++#define IEEE_MC68k
++#else
+ #define IEEE_8087
++#endif
+ #define NO_HEX_FP
+
+ #ifndef Long
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_download__nacl__toolchains.py b/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_download__nacl__toolchains.py
new file mode 100644
index 000000000000..3127e29b0064
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_download__nacl__toolchains.py
@@ -0,0 +1,13 @@
+--- src/3rdparty/chromium/build/download_nacl_toolchains.py.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/build/download_nacl_toolchains.py
+@@ -11,6 +11,10 @@ import sys
+
+
+ def Main(args):
++ # If `disable_nacl=1` is in GYP_DEFINES, exit
++ if 'disable_nacl=1' in os.environ.get('GYP_DEFINES', ''):
++ return 0
++
+ script_dir = os.path.dirname(os.path.abspath(__file__))
+ src_dir = os.path.dirname(script_dir)
+ nacl_dir = os.path.join(src_dir, 'native_client')
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_toolchain_linux_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_toolchain_linux_BUILD.gn
index 80b42eadaf2d..e063d00d1d04 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_toolchain_linux_BUILD.gn
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_toolchain_linux_BUILD.gn
@@ -1,6 +1,21 @@
---- src/3rdparty/chromium/build/toolchain/linux/BUILD.gn.orig 2018-11-13 18:25:11 UTC
-+++ src/3rdparty/chromium/build/toolchain/linux/BUILD.gn
-@@ -14,7 +14,6 @@ clang_toolchain("clang_arm") {
+--- src/3rdparty/chromium/build/toolchain/linux/BUILD.gn.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/build/toolchain/linux/BUILD.gn 2019-10-29 02:47:24.026830000 +0100
+@@ -5,6 +5,14 @@
+ import("//build/config/sysroot.gni")
+ import("//build/toolchain/gcc_toolchain.gni")
+
++clang_toolchain("clang_ppc64") {
++ enable_linker_map = true
++ toolchain_args = {
++ current_cpu = "ppc64"
++ current_os = "linux"
++ }
++}
++
+ clang_toolchain("clang_arm") {
+ toolprefix = "arm-linux-gnueabihf-"
+ toolchain_args = {
+@@ -14,7 +22,6 @@
}
clang_toolchain("clang_arm64") {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_util__unittest.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_util__unittest.cc
new file mode 100644
index 000000000000..18f884a7589f
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_util__unittest.cc
@@ -0,0 +1,24 @@
+--- src/3rdparty/chromium/components/safe_browsing/db/util_unittest.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/components/safe_browsing/db/util_unittest.cc
+@@ -12,6 +12,12 @@
+ #include "testing/gtest/include/gtest/gtest.h"
+ #include "url/gurl.h"
+
++#if defined(OS_WIN)
++#include <winsock2.h>
++#elif defined(OS_POSIX)
++#include <arpa/inet.h>
++#endif
++
+ namespace safe_browsing {
+
+ TEST(SafeBrowsingDbUtilTest, UrlToFullHashes) {
+@@ -83,7 +89,7 @@ TEST(SafeBrowsingDbUtilTest, StringToSBFullHashAndSBFu
+ // 31 chars plus the last \0 as full_hash.
+ const std::string hash_in = "12345678902234567890323456789012";
+ SBFullHash hash_out = StringToSBFullHash(hash_in);
+- EXPECT_EQ(0x34333231U, hash_out.prefix);
++ EXPECT_EQ(htonl(0x31323334U), hash_out.prefix);
+ EXPECT_EQ(0, memcmp(hash_in.data(), hash_out.full_hash, sizeof(SBFullHash)));
+
+ std::string hash_final = SBFullHashToString(hash_out);
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_v4__rice.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_v4__rice.cc
new file mode 100644
index 000000000000..74b1d869a7e3
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_v4__rice.cc
@@ -0,0 +1,39 @@
+--- src/3rdparty/chromium/components/safe_browsing/db/v4_rice.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/components/safe_browsing/db/v4_rice.cc
+@@ -8,6 +8,7 @@
+ #include "base/logging.h"
+ #include "base/numerics/safe_math.h"
+ #include "base/strings/stringprintf.h"
++#include "base/sys_byteorder.h"
+ #include "build/build_config.h"
+ #include "components/safe_browsing/db/v4_rice.h"
+
+@@ -21,10 +22,6 @@ using ::google::protobuf::RepeatedField;
+ using ::google::protobuf::int32;
+ using ::google::protobuf::int64;
+
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN) || (ARCH_CPU_LITTLE_ENDIAN != 1)
+-#error The code below assumes little-endianness.
+-#endif
+-
+ namespace safe_browsing {
+
+ namespace {
+@@ -117,7 +114,7 @@ V4DecodeResult V4RiceDecoder::DecodePrefixes(const int
+ out->reserve((num_entries + 1));
+
+ base::CheckedNumeric<uint32_t> last_value(first_value);
+- out->push_back(htonl(last_value.ValueOrDie()));
++ out->push_back(base::ByteSwap(static_cast<uint32_t>(last_value.ValueOrDie())));
+
+ if (num_entries > 0) {
+ V4RiceDecoder decoder(rice_parameter, num_entries, encoded_data);
+@@ -136,7 +133,7 @@ V4DecodeResult V4RiceDecoder::DecodePrefixes(const int
+
+ // This flipping is done so that the decoded uint32 is interpreted
+ // correcly as a string of 4 bytes.
+- out->push_back(htonl(last_value.ValueOrDie()));
++ out->push_back(base::ByteSwap(static_cast<uint32_t>(last_value.ValueOrDie())));
+ }
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_v4__rice__unittest.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_v4__rice__unittest.cc
new file mode 100644
index 000000000000..7be96c70436f
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_safe__browsing_db_v4__rice__unittest.cc
@@ -0,0 +1,33 @@
+--- src/3rdparty/chromium/components/safe_browsing/db/v4_rice_unittest.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/components/safe_browsing/db/v4_rice_unittest.cc
+@@ -6,6 +6,12 @@
+ #include "base/logging.h"
+ #include "testing/platform_test.h"
+
++#if defined(OS_WIN)
++#include <winsock2.h>
++#elif defined(OS_POSIX)
++#include <arpa/inet.h>
++#endif
++
+ using ::google::protobuf::RepeatedField;
+ using ::google::protobuf::int32;
+
+@@ -247,7 +253,7 @@ TEST_F(V4RiceTest, TestDecoderPrefixesWithOneValue) {
+ EXPECT_EQ(DECODE_SUCCESS,
+ V4RiceDecoder::DecodePrefixes(0x69F67F51u, 2, 0, "", &out));
+ EXPECT_EQ(1u, out.size());
+- EXPECT_EQ(0x69F67F51u, out[0]);
++ EXPECT_EQ(htonl(0x517FF669u), out[0]);
+ }
+
+ TEST_F(V4RiceTest, TestDecoderPrefixesWithMultipleValues) {
+@@ -256,7 +262,7 @@ TEST_F(V4RiceTest, TestDecoderPrefixesWithMultipleValu
+ V4RiceDecoder::DecodePrefixes(
+ 5, 28, 3, "\xbf\xa8\x3f\xfb\xf\xf\x5e\x27\xe6\xc3\x1d\xc6\x38",
+ &out));
+- std::vector<uint32_t> expected = {5, 0xad934c0cu, 0x6ff67f56u, 0x81316fceu};
++ std::vector<uint32_t> expected = {htonl(0x05000000), htonl(0x0c4c93adu), htonl(0x567ff66fu), htonl(0xce6f3181u)};
+ EXPECT_EQ(expected.size(), out.size());
+ for (unsigned i = 0; i < expected.size(); i++) {
+ EXPECT_EQ(expected[i], out[i]);
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_update__client_update__query__params.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_update__client_update__query__params.cc
index 7a597b01049d..73f46edf862f 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_update__client_update__query__params.cc
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_components_update__client_update__query__params.cc
@@ -1,6 +1,6 @@
---- src/3rdparty/chromium/components/update_client/update_query_params.cc.orig 2018-11-13 18:25:11 UTC
-+++ src/3rdparty/chromium/components/update_client/update_query_params.cc
-@@ -38,6 +38,8 @@ const char kOs[] =
+--- src/3rdparty/chromium/components/update_client/update_query_params.cc.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/components/update_client/update_query_params.cc 2019-10-29 02:42:47.135055000 +0100
+@@ -38,6 +38,8 @@
"fuchsia";
#elif defined(OS_OPENBSD)
"openbsd";
@@ -9,3 +9,21 @@
#else
#error "unknown os"
#endif
+@@ -55,6 +57,8 @@
+ "mips64el";
+ #elif defined(__mips__)
+ "mipsel";
++#elif defined(__powerpc64__)
++ "ppc64";
+ #else
+ #error "unknown arch"
+ #endif
+@@ -127,6 +131,8 @@
+ return "mips32";
+ #elif defined(ARCH_CPU_MIPS64EL)
+ return "mips64";
++#elif defined(ARCH_CPU_PPC64)
++ return "ppc64";
+ #else
+ // NOTE: when adding new values here, please remember to update the
+ // comment in the .h file about possible return values from this function.
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_ffmpeg_ffmpeg__common.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_ffmpeg_ffmpeg__common.cc
new file mode 100644
index 000000000000..a893b4318a9d
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_ffmpeg_ffmpeg__common.cc
@@ -0,0 +1,13 @@
+--- src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
+@@ -686,10 +686,6 @@ ChannelLayout ChannelLayoutToChromeChannelLayout(int64
+ }
+ }
+
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN)
+-#error The code below assumes little-endianness.
+-#endif
+-
+ VideoPixelFormat AVPixelFormatToVideoPixelFormat(AVPixelFormat pixel_format) {
+ // The YUVJ alternatives are FFmpeg's (deprecated, but still in use) way to
+ // specify a pixel format and full range color combination.
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_formats_mp4_box__definitions.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_formats_mp4_box__definitions.cc
new file mode 100644
index 000000000000..515da8a4cf61
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_formats_mp4_box__definitions.cc
@@ -0,0 +1,26 @@
+--- src/3rdparty/chromium/media/formats/mp4/box_definitions.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/media/formats/mp4/box_definitions.cc
+@@ -1107,15 +1107,14 @@ bool OpusSpecificBox::Parse(BoxReader* reader) {
+ RCHECK(reader->Read4(&sample_rate));
+ RCHECK(reader->Read2s(&gain_db));
+
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN)
+-#error The code below assumes little-endianness.
+-#endif
+-
+- memcpy(&extradata[OPUS_EXTRADATA_SKIP_SAMPLES_OFFSET], &codec_delay_in_frames,
+- sizeof(codec_delay_in_frames));
+- memcpy(&extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET], &sample_rate,
+- sizeof(sample_rate));
+- memcpy(&extradata[OPUS_EXTRADATA_GAIN_OFFSET], &gain_db, sizeof(gain_db));
++ extradata[OPUS_EXTRADATA_SKIP_SAMPLES_OFFSET] = (codec_delay_in_frames >> 0) & 0xff;
++ extradata[OPUS_EXTRADATA_SKIP_SAMPLES_OFFSET+1] = (codec_delay_in_frames >> 8) & 0xff;
++ extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET] = (sample_rate >> 0) & 0xff;
++ extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET+1] = (sample_rate >> 8) & 0xff;
++ extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET+2] = (sample_rate >> 16) & 0xff;
++ extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET+3] = (sample_rate >> 24) & 0xff;
++ extradata[OPUS_EXTRADATA_GAIN_OFFSET] = (gain_db >> 0) & 0xff;
++ extradata[OPUS_EXTRADATA_GAIN_OFFSET+1] = (gain_db >> 8) & 0xff;
+
+ channel_count = extradata[OPUS_EXTRADATA_CHANNELS_OFFSET];
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_renderers_paint__canvas__video__renderer.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_renderers_paint__canvas__video__renderer.cc
new file mode 100644
index 000000000000..e5bfbcdd8356
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_renderers_paint__canvas__video__renderer.cc
@@ -0,0 +1,22 @@
+--- src/3rdparty/chromium/media/renderers/paint_canvas_video_renderer.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/media/renderers/paint_canvas_video_renderer.cc
+@@ -31,8 +31,7 @@
+
+ // Skia internal format depends on a platform. On Android it is ABGR, on others
+ // it is ARGB.
+-#if SK_B32_SHIFT == 0 && SK_G32_SHIFT == 8 && SK_R32_SHIFT == 16 && \
+- SK_A32_SHIFT == 24
++#if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
+ #define LIBYUV_I420_TO_ARGB libyuv::I420ToARGB
+ #define LIBYUV_I422_TO_ARGB libyuv::I422ToARGB
+ #define LIBYUV_I444_TO_ARGB libyuv::I444ToARGB
+@@ -42,8 +41,7 @@
+ #define LIBYUV_I010_TO_ARGB libyuv::I010ToARGB
+ #define LIBYUV_H010_TO_ARGB libyuv::H010ToARGB
+ #define LIBYUV_NV12_TO_ARGB libyuv::NV12ToARGB
+-#elif SK_R32_SHIFT == 0 && SK_G32_SHIFT == 8 && SK_B32_SHIFT == 16 && \
+- SK_A32_SHIFT == 24
++#elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
+ #define LIBYUV_I420_TO_ARGB libyuv::I420ToABGR
+ #define LIBYUV_I422_TO_ARGB libyuv::I422ToABGR
+ #define LIBYUV_I444_TO_ARGB libyuv::I444ToABGR
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_net_cert_crl__set.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_net_cert_crl__set.cc
new file mode 100644
index 000000000000..cf0d9530bf8c
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_net_cert_crl__set.cc
@@ -0,0 +1,48 @@
+--- src/3rdparty/chromium/net/cert/crl_set.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/net/cert/crl_set.cc
+@@ -6,6 +6,7 @@
+
+ #include "base/base64.h"
+ #include "base/json/json_reader.h"
++#include "base/sys_byteorder.h"
+ #include "base/time/time.h"
+ #include "base/trace_event/trace_event.h"
+ #include "base/values.h"
+@@ -44,9 +45,9 @@ base::DictionaryValue* ReadHeader(base::StringPiece* d
+ uint16_t header_len;
+ if (data->size() < sizeof(header_len))
+ return nullptr;
+- // Assumes little-endian.
+ memcpy(&header_len, data->data(), sizeof(header_len));
+ data->remove_prefix(sizeof(header_len));
++ header_len = base::ByteSwapToLE16(header_len);
+
+ if (data->size() < header_len)
+ return nullptr;
+@@ -79,9 +80,9 @@ bool ReadCRL(base::StringPiece* data,
+ uint32_t num_serials;
+ if (data->size() < sizeof(num_serials))
+ return false;
+- // Assumes little endian.
+ memcpy(&num_serials, data->data(), sizeof(num_serials));
+ data->remove_prefix(sizeof(num_serials));
++ num_serials = base::ByteSwapToLE32(num_serials);
+
+ if (num_serials > 32 * 1024 * 1024) // Sanity check.
+ return false;
+@@ -192,15 +193,6 @@ CRLSet::~CRLSet() = default;
+ // static
+ bool CRLSet::Parse(base::StringPiece data, scoped_refptr<CRLSet>* out_crl_set) {
+ TRACE_EVENT0(NetTracingCategory(), "CRLSet::Parse");
+-// Other parts of Chrome assume that we're little endian, so we don't lose
+-// anything by doing this.
+-#if defined(__BYTE_ORDER)
+- // Linux check
+- static_assert(__BYTE_ORDER == __LITTLE_ENDIAN, "assumes little endian");
+-#elif defined(__BIG_ENDIAN__)
+-// Mac check
+-#error assumes little endian
+-#endif
+
+ std::unique_ptr<base::DictionaryValue> header_dict(ReadHeader(&data));
+ if (!header_dict.get())
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_services_service__manager_sandbox_linux_bpf__renderer__policy__linux.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_services_service__manager_sandbox_linux_bpf__renderer__policy__linux.cc
new file mode 100644
index 000000000000..263746bdd858
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_services_service__manager_sandbox_linux_bpf__renderer__policy__linux.cc
@@ -0,0 +1,14 @@
+--- src/3rdparty/chromium/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc
+@@ -15,6 +15,11 @@
+ #include "sandbox/linux/system_headers/linux_syscalls.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+
++// On PPC64, TCGETS is defined in terms of struct termios, so we must include termios.h
++#ifdef __powerpc64__
++#include <termios.h>
++#endif
++
+ // TODO(vignatti): replace the local definitions below with #include
+ // <linux/dma-buf.h> once kernel version 4.6 becomes widely used.
+ #include <linux/types.h>
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_config_SkUserConfig.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_config_SkUserConfig.h
new file mode 100644
index 000000000000..642b4be49da4
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_config_SkUserConfig.h
@@ -0,0 +1,39 @@
+--- src/3rdparty/chromium/skia/config/SkUserConfig.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/skia/config/SkUserConfig.h
+@@ -90,11 +90,18 @@ SK_API void SkDebugf_FileLine(const char* file, int li
+ __FILE__, __LINE__, #cond); } } while (false)
+
+ #if !defined(ANDROID) // On Android, we use the skia default settings.
++#if defined(SK_CPU_BENDIAN)
++#define SK_A32_SHIFT 0
++#define SK_R32_SHIFT 8
++#define SK_G32_SHIFT 16
++#define SK_B32_SHIFT 24
++#else
+ #define SK_A32_SHIFT 24
+ #define SK_R32_SHIFT 16
+ #define SK_G32_SHIFT 8
+ #define SK_B32_SHIFT 0
+ #endif
++#endif
+
+ #if defined(SK_BUILD_FOR_MAC)
+
+@@ -107,17 +114,6 @@ SK_API void SkDebugf_FileLine(const char* file, int li
+ // TODO: skia used to just use hairline, but has improved since then, so
+ // we should revisit this choice...
+ #define SK_USE_FREETYPE_EMBOLDEN
+-
+-#if defined(SK_BUILD_FOR_UNIX) && defined(SK_CPU_BENDIAN)
+-// Above we set the order for ARGB channels in registers. I suspect that, on
+-// big endian machines, you can keep this the same and everything will work.
+-// The in-memory order will be different, of course, but as long as everything
+-// is reading memory as words rather than bytes, it will all work. However, if
+-// you find that colours are messed up I thought that I would leave a helpful
+-// locator for you. Also see the comments in
+-// base/gfx/bitmap_platform_device_linux.h
+-#error Read the comment at this location
+-#endif
+
+ #endif
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_ext_image__operations__unittest.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_ext_image__operations__unittest.cc
new file mode 100644
index 000000000000..b915e61fddc4
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_ext_image__operations__unittest.cc
@@ -0,0 +1,59 @@
+--- src/3rdparty/chromium/skia/ext/image_operations_unittest.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/skia/ext/image_operations_unittest.cc
+@@ -18,9 +18,11 @@
+ #include "skia/ext/image_operations.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+ #include "third_party/skia/include/core/SkBitmap.h"
++#include "third_party/skia/include/core/SkColorPriv.h"
+ #include "third_party/skia/include/core/SkColorSpace.h"
+ #include "third_party/skia/include/core/SkImageInfo.h"
+ #include "third_party/skia/include/core/SkRect.h"
++#include "third_party/skia/include/core/SkUnPreMultiply.h"
+ #include "ui/gfx/codec/png_codec.h"
+ #include "ui/gfx/geometry/size.h"
+
+@@ -151,7 +153,7 @@ void DrawCheckerToBitmap(int w, int h,
+
+ bool use_color2 = (x_bit != y_bit); // xor
+
+- *bmp->getAddr32(x, y) = (use_color2 ? color2 : color1);
++ *bmp->getAddr32(x, y) = SkPreMultiplyColor(use_color2 ? color2 : color1);
+ }
+ }
+ }
+@@ -273,7 +275,7 @@ void CheckResizeMethodShouldAverageGrid(
+ std::max(tested_pixel.max_color_distance,
+ tested_method.max_color_distance_override);
+
+- const SkColor actual_color = *dest.getAddr32(x, y);
++ const SkColor actual_color = SkUnPreMultiply::PMColorToColor(*dest.getAddr32(x, y));
+
+ // Check that the pixels away from the border region are very close
+ // to the expected average color
+@@ -528,7 +530,7 @@ TEST(ImageOperations, ScaleUp) {
+ for (int src_y = 0; src_y < src_h; ++src_y) {
+ for (int src_x = 0; src_x < src_w; ++src_x) {
+ *src.getAddr32(src_x, src_y) =
+- SkColorSetARGB(255, 10 + src_x * 100, 10 + src_y * 100, 0);
++ SkPackARGB32(255, 10 + src_x * 100, 10 + src_y * 100, 0);
+ }
+ }
+
+@@ -552,7 +554,7 @@ TEST(ImageOperations, ScaleUp) {
+ lanczos3(src_x + 0.5 - dst_x_in_src) *
+ lanczos3(src_y + 0.5 - dst_y_in_src);
+ sum += coeff;
+- SkColor tmp = *src.getAddr32(src_x, src_y);
++ SkColor tmp = SkUnPreMultiply::PMColorToColor(*src.getAddr32(src_x, src_y));
+ a += coeff * SkColorGetA(tmp);
+ r += coeff * SkColorGetR(tmp);
+ g += coeff * SkColorGetG(tmp);
+@@ -571,7 +573,7 @@ TEST(ImageOperations, ScaleUp) {
+ if (r > 255.0f) r = 255.0f;
+ if (g > 255.0f) g = 255.0f;
+ if (b > 255.0f) b = 255.0f;
+- SkColor dst_color = *dst.getAddr32(dst_x, dst_y);
++ SkColor dst_color = SkUnPreMultiply::PMColorToColor(*dst.getAddr32(dst_x, dst_y));
+ EXPECT_LE(fabs(SkColorGetA(dst_color) - a), 1.5f);
+ EXPECT_LE(fabs(SkColorGetR(dst_color) - r), 1.5f);
+ EXPECT_LE(fabs(SkColorGetG(dst_color) - g), 1.5f);
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_abseil-cpp_base_internal_unscaledcycleclock.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_abseil-cpp_base_internal_unscaledcycleclock.cc
new file mode 100644
index 000000000000..ec3d9dff5366
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_abseil-cpp_base_internal_unscaledcycleclock.cc
@@ -0,0 +1,20 @@
+--- src/3rdparty/chromium/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc 2019-10-27 21:56:29.777821000 +0100
+@@ -20,7 +20,7 @@
+ #include <intrin.h>
+ #endif
+
+-#if defined(__powerpc__) || defined(__ppc__)
++#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)
+ #include <sys/platform/ppc.h>
+ #endif
+
+@@ -53,7 +53,7 @@
+ return base_internal::NominalCPUFrequency();
+ }
+
+-#elif defined(__powerpc__) || defined(__ppc__)
++#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)
+
+ int64_t UnscaledCycleClock::Now() {
+ return __ppc_get_timebase();
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_angle_src_libANGLE_Constants.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_angle_src_libANGLE_Constants.h
new file mode 100644
index 000000000000..16539332ea3d
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_angle_src_libANGLE_Constants.h
@@ -0,0 +1,10 @@
+--- src/3rdparty/chromium/third_party/angle/src/libANGLE/Constants.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/angle/src/libANGLE/Constants.h
+@@ -9,6 +9,7 @@
+ #ifndef LIBANGLE_CONSTANTS_H_
+ #define LIBANGLE_CONSTANTS_H_
+
++#include <cstddef>
+ #include "common/platform.h"
+
+ namespace gl
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_gpu_webgl__image__conversion.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_gpu_webgl__image__conversion.cc
new file mode 100644
index 000000000000..d23a63ca8487
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_gpu_webgl__image__conversion.cc
@@ -0,0 +1,13 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion.cc
+@@ -456,8 +456,8 @@ void Unpack<WebGLImageConversion::kDataFormatBGRA8, ui
+ for (unsigned i = 0; i < pixels_per_row; ++i) {
+ uint32_t bgra = source32[i];
+ #if defined(ARCH_CPU_BIG_ENDIAN)
+- uint32_t brMask = 0xff00ff00;
+- uint32_t gaMask = 0x00ff00ff;
++ uint32_t br_mask = 0xff00ff00;
++ uint32_t ga_mask = 0x00ff00ff;
+ #else
+ uint32_t br_mask = 0x00ff00ff;
+ uint32_t ga_mask = 0xff00ff00;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_gpu_webgl__image__conversion__test.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_gpu_webgl__image__conversion__test.cc
new file mode 100644
index 000000000000..4b3276696fba
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_gpu_webgl__image__conversion__test.cc
@@ -0,0 +1,15 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion_test.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion_test.cc
+@@ -76,9 +76,9 @@ TEST_F(WebGLImageConversionTest, convertBGRA8toRGBA8)
+ 0x34567888, 0x12345678, 0x34567888,
+ 0x12345678, 0x34567888, 0x12345678};
+ #if defined(ARCH_CPU_BIG_ENDIAN)
+- uint32_t expectedData[9] = {0x56341278, 0x78563488, 0x56341278,
+- 0x78563488, 0x56341278, 0x78563488,
+- 0x56341278, 0x78563488, 0x56341278};
++ uint32_t expected_data[9] = {0x56341278, 0x78563488, 0x56341278,
++ 0x78563488, 0x56341278, 0x78563488,
++ 0x56341278, 0x78563488, 0x56341278};
+ #else
+ uint32_t expected_data[9] = {0x12785634, 0x34887856, 0x12785634,
+ 0x34887856, 0x12785634, 0x34887856,
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_graphics__context__test.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_graphics__context__test.cc
new file mode 100644
index 000000000000..186c79627a93
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_graphics__context__test.cc
@@ -0,0 +1,134 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/graphics_context_test.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/graphics_context_test.cc
+@@ -52,7 +52,7 @@ namespace blink {
+ { \
+ for (int y = opaqueRect.Y(); y < opaqueRect.MaxY(); ++y) \
+ for (int x = opaqueRect.X(); x < opaqueRect.MaxX(); ++x) { \
+- int alpha = *bitmap.getAddr32(x, y) >> 24; \
++ int alpha = SkGetPackedA32(*bitmap.getAddr32(x, y)); \
+ EXPECT_EQ(255, alpha); \
+ } \
+ }
+@@ -61,12 +61,16 @@ namespace blink {
+ { \
+ for (int y = 0; y < bitmap.height(); ++y) \
+ for (int x = 0; x < bitmap.width(); ++x) { \
+- int alpha = *bitmap.getAddr32(x, y) >> 24; \
++ int alpha = SkGetPackedA32(*bitmap.getAddr32(x, y)); \
+ bool opaque = opaqueRect.Contains(x, y); \
+ EXPECT_EQ(opaque, alpha == 255); \
+ } \
+ }
+
++static inline uint32_t PackARGB32(uint32_t argb) {
++ return SkPackARGB32NoCheck(argb>>24, (argb<<8)>>24, (argb<<16)>>24, (argb<<24)>>24);
++}
++
+ TEST(GraphicsContextTest, Recording) {
+ SkBitmap bitmap;
+ bitmap.allocN32Pixels(100, 100);
+@@ -184,10 +188,10 @@ class GraphicsContextHighConstrastTest : public testin
+ TEST_F(GraphicsContextHighConstrastTest, MAYBE_NoHighContrast) {
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffff0000, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xff808080, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffff0000), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xff808080), *bitmap_.getAddr32(3, 0));
+ }
+
+ // TODO(crbug.com/850782): Reenable this.
+@@ -205,10 +209,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_HighCon
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffff0000, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xff808080, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffff0000), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xff808080), *bitmap_.getAddr32(3, 0));
+ }
+
+ // Simple invert for testing. Each color component |c|
+@@ -228,10 +232,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_SimpleI
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xff00ffff, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xff7f7f7f, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xff00ffff), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xff7f7f7f), *bitmap_.getAddr32(3, 0));
+ }
+
+ // Invert brightness (with gamma correction).
+@@ -250,10 +254,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_InvertB
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xff00ffff, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xffdddddd, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xff00ffff), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xffdddddd), *bitmap_.getAddr32(3, 0));
+ }
+
+ // Invert lightness (in HSL space).
+@@ -272,10 +276,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_InvertL
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffff0000, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xffdddddd, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffff0000), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xffdddddd), *bitmap_.getAddr32(3, 0));
+ }
+
+ // Invert lightness plus grayscale.
+@@ -288,10 +292,10 @@ TEST_F(GraphicsContextHighConstrastTest, InvertLightne
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffe2e2e2, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xffdddddd, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffe2e2e2), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xffdddddd), *bitmap_.getAddr32(3, 0));
+ }
+
+ // TODO(crbug.com/850782): Reenable this.
+@@ -309,10 +313,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_InvertL
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffff0000, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xffeeeeee, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffff0000), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xffeeeeee), *bitmap_.getAddr32(3, 0));
+ }
+
+ } // namespace blink
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_highcontrast_highcontrast__classifier.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_highcontrast_highcontrast__classifier.cc
new file mode 100644
index 000000000000..7b3dd5634e3e
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_graphics_highcontrast_highcontrast__classifier.cc
@@ -0,0 +1,79 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/highcontrast/highcontrast_classifier.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/highcontrast/highcontrast_classifier.cc
+@@ -1060,55 +1060,47 @@ void DequantizeMinFirst(const int32_t rank,
+
+ // -----------------------------------------------------------------------------
+ // CONSTANTS
+-// Note that for now, endianness of the target machine needs to match that of
+-// the one training was performed on.
+ // -----------------------------------------------------------------------------
+ const int32_t dnn_hiddenlayer_0_weights_part_0_shape[2] = {4, 10};
+ const union {
+- uint8_t bytes[160];
+ float values[40];
+ } dnn_hiddenlayer_0_weights_part_0 = {{
+- 0xbc, 0x22, 0x0a, 0xbf, 0xb4, 0x46, 0x8c, 0x3f, 0xba, 0x31, 0x34, 0xbe,
+- 0x4c, 0x65, 0xdb, 0xbe, 0xf0, 0x54, 0x5e, 0xbe, 0xc1, 0x5d, 0xb3, 0x3f,
+- 0xf4, 0xe6, 0x15, 0xbf, 0x05, 0xc6, 0x34, 0xbf, 0xc0, 0x37, 0x7e, 0xbd,
+- 0x6c, 0x35, 0x0b, 0xbf, 0xca, 0x53, 0x26, 0xbf, 0x58, 0xb4, 0x87, 0x3f,
+- 0x37, 0xee, 0x39, 0xbf, 0xda, 0xfa, 0xf9, 0xbe, 0x97, 0xc1, 0x06, 0xbf,
+- 0xf9, 0x4e, 0x81, 0x3f, 0xb2, 0x44, 0x85, 0xbf, 0x7f, 0x98, 0x7c, 0x3d,
+- 0x15, 0x26, 0xbc, 0xbe, 0x5c, 0x48, 0x05, 0x3f, 0xc8, 0xaa, 0xa1, 0xbd,
+- 0x35, 0xb3, 0x43, 0xbe, 0xeb, 0x46, 0x91, 0x3f, 0x80, 0x71, 0xe3, 0x3c,
+- 0xd1, 0x98, 0x79, 0x3f, 0x3c, 0xd0, 0x0d, 0xbf, 0x1e, 0x02, 0xd3, 0x3e,
+- 0x5d, 0x4b, 0xa2, 0xbf, 0x68, 0xac, 0xaa, 0xbd, 0xf8, 0xe1, 0x75, 0x3e,
+- 0x4a, 0x9c, 0x27, 0xbe, 0xf8, 0xae, 0xb2, 0xbe, 0x7f, 0x9d, 0x91, 0x3f,
+- 0x1e, 0x8b, 0xa8, 0xbe, 0x35, 0x7e, 0xb2, 0x3f, 0xbe, 0x8c, 0xd3, 0xbe,
+- 0xf9, 0xcd, 0xb5, 0x3f, 0xa1, 0x50, 0xaa, 0x3f, 0xe4, 0x6d, 0xdd, 0xbe,
+- 0x0d, 0xce, 0xd3, 0xbe,
++ -0.539592504501343, 1.09590768814087, -0.175970941781998, -0.428507208824158,
++ -0.217120885848999, 1.40129864215851, -0.5855553150177, -0.706146538257599,
++ -0.0620648860931396, -0.543783903121948, -0.649716019630432, 1.06019115447998,
++ -0.726291120052338, -0.488241970539093, -0.526391446590424, 1.01022255420685,
++ -1.04115891456604, 0.0616688691079617, -0.367478042840958, 0.520635366439819,
++ -0.0789390206336975, -0.19111330807209, 1.13497674465179, 0.0277640819549561,
++ 0.974988043308258, -0.553958654403687, 0.412125527858734, -1.2679249048233,
++ -0.0833366513252258, 0.240119814872742, -0.163682132959366, -0.34899115562439,
++ 1.1376188993454, -0.329186379909515, 1.3944765329361, -0.413183152675629,
++ 1.42034828662872, 1.33058559894562, -0.432479023933411, -0.413681417703629
+ }};
+ const int32_t dnn_hiddenlayer_0_biases_part_0_shape[1] = {10};
+ const union {
+- uint8_t bytes[40];
+ float values[10];
+ } dnn_hiddenlayer_0_biases_part_0 = {{
+- 0x00, 0x00, 0x00, 0x00, 0xbf, 0x6a, 0x53, 0x3e, 0xd3, 0xc1,
+- 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xd8, 0xc0, 0x3e,
+- 0xca, 0xe7, 0x35, 0x3e, 0x23, 0xa5, 0x44, 0x3f, 0x61, 0xfd,
+- 0xd2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xe0, 0x43, 0x3c,
++ 0.0, 0.206461891531944,
++ 0.407728761434555, 0.0,
++ 0.376653373241425, 0.177642017602921,
++ 0.76814478635788, 0.412089377641678,
++ 0.0, 0.0119554307311773
+ }};
+ const int32_t dnn_logits_biases_part_0_shape[1] = {1};
+ const union {
+- uint8_t bytes[4];
+ float values[1];
+ } dnn_logits_biases_part_0 = {{
+- 0x75, 0xca, 0xd7, 0xbe,
++ -0.421466499567032
+ }};
+ const int32_t dnn_logits_weights_part_0_shape[2] = {10, 1};
+ const union {
+- uint8_t bytes[40];
+ float values[10];
+ } dnn_logits_weights_part_0 = {{
+- 0x13, 0x12, 0x39, 0x3f, 0xf3, 0xa5, 0xc2, 0xbf, 0x81, 0x7f,
+- 0xbe, 0x3f, 0xf8, 0x17, 0x26, 0x3e, 0xa4, 0x19, 0xa6, 0x3f,
+- 0xf0, 0xc9, 0xb7, 0xbf, 0x6a, 0x99, 0xd2, 0x3f, 0x8a, 0x7d,
+- 0xe9, 0x3f, 0x83, 0x9a, 0x3a, 0xbf, 0xf1, 0x6c, 0x08, 0x3e,
++ 0.722932040691376, -1.52068936824799,
++ 1.48826611042023, 0.162200808525085,
++ 1.29765748977661, -1.43585014343262,
++ 1.64530682563782, 1.82414364814758,
++ -0.728920161724091, 0.133228078484535
+ }};
+
+ } // anonymous namespace
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_heap_asm_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_heap_asm_BUILD.gn
new file mode 100644
index 000000000000..fd266e30f9cf
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_heap_asm_BUILD.gn
@@ -0,0 +1,13 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/BUILD.gn.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/BUILD.gn
+@@ -46,6 +46,10 @@ if (current_cpu == "x86" || current_cpu == "x64") {
+ sources = [
+ "SaveRegisters_mips64.S",
+ ]
++ } else if (current_cpu == "ppc64") {
++ sources = [
++ "SaveRegisters_ppc64.S",
++ ]
+ }
+
+ if (current_cpu == "arm") {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_heap_asm_SaveRegisters__ppc64.S b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_heap_asm_SaveRegisters__ppc64.S
new file mode 100644
index 000000000000..f8d38f51277a
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_heap_asm_SaveRegisters__ppc64.S
@@ -0,0 +1,63 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/SaveRegisters_ppc64.S.orig 2019-10-27 17:23:52 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/SaveRegisters_ppc64.S
+@@ -0,0 +1,60 @@
++/*
++ * typedef void (*PushAllRegistersCallback)(SafePointBarrier*, ThreadState*, intptr_t*);
++ * extern "C" void PushAllRegisters(SafePointBarrier*, ThreadState*, PushAllRegistersCallback)
++ */
++
++.type PushAllRegisters, %function
++.global PushAllRegisters
++.hidden PushAllRegisters
++PushAllRegisters:
++ // Push all callee-saves registers to get them
++ // on the stack for conservative stack scanning.
++ // Reserve space for callee-saved registers and minimal stack frame.
++ mflr 0 # r0 = LR
++ std 0,16(1) # store LR at addr sp+16
++ stdu 1,-176(1) # grow stack by 176 bytes and store new stack top ptr to r1
++ # 3218*8 = min stack non-volatile registers
++
++ // Save the callee-saved registers
++ std 31,168(1) # store r31 to addr sp+168
++ std 30,160(1) # etc...
++ std 29,152(1)
++ std 28,144(1)
++ std 27,136(1)
++ std 26,128(1)
++ std 25,120(1)
++ std 24,112(1)
++ std 23,104(1)
++ std 22,96(1)
++ std 21,88(1)
++ std 20,80(1)
++ std 19,72(1)
++ std 18,64(1)
++ std 17,56(1)
++ std 16,48(1)
++ std 15,40(1)
++ std 14,32(1)
++
++ // Note: the callee-saved floating point registers do not need to be
++ // copied to the stack, because fp registers never hold heap pointers
++ // and so do not need to be kept visible to the garbage collector.
++
++ // Pass the two first arguments untouched in r3 and r4 and the
++ // stack pointer to the callback.
++
++ std 2, 24(1) # save r2 to sp+24 addr
++ mtctr 5 # copy 3rd function arg (callback fn pointer) to CTR
++ mr 12, 5 # r12 must hold address of callback we are going to call
++ # for position-idependent functions inside the callback to work
++ mr 5, 1 # set current sp (stack top) as 3rd argument for the callback
++ bctrl # set LR to PC+4 and call the callback
++ ld 2, 24(1) # restore r2 from sp+24 addr
++
++ // Adjust stack, restore return address and return.
++ // Note: the copied registers do not need to be reloaded here,
++ // because they were preserved by the called routine.
++ addi 1,1,176 # restore original SP by doing sp += 176
++ ld 0,16(1) # restore original LR from addr sp+16
++ mtlr 0 # ... copy it to the actual LR
++ blr # return to LR addr
++
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_bmp_bmp__image__reader.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_bmp_bmp__image__reader.h
new file mode 100644
index 000000000000..2f966c9674ad
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_bmp_bmp__image__reader.h
@@ -0,0 +1,24 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_reader.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_reader.h
+@@ -37,6 +37,7 @@
+ #include "third_party/blink/renderer/platform/wtf/allocator.h"
+ #include "third_party/blink/renderer/platform/wtf/cpu.h"
+ #include "third_party/blink/renderer/platform/wtf/noncopyable.h"
++#include "base/sys_byteorder.h"
+
+ namespace blink {
+
+@@ -50,11 +51,11 @@ class PLATFORM_EXPORT BMPImageReader final {
+ // Read a value from |buffer|, converting to an int assuming little
+ // endianness
+ static inline uint16_t ReadUint16(const char* buffer) {
+- return *reinterpret_cast<const uint16_t*>(buffer);
++ return base::ByteSwapToLE16(*reinterpret_cast<const uint16_t*>(buffer));
+ }
+
+ static inline uint32_t ReadUint32(const char* buffer) {
+- return *reinterpret_cast<const uint32_t*>(buffer);
++ return base::ByteSwapToLE32(*reinterpret_cast<const uint32_t*>(buffer));
+ }
+
+ // |parent| is the decoder that owns us.
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_jpeg_jpeg__image__decoder.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_jpeg_jpeg__image__decoder.cc
new file mode 100644
index 000000000000..9d5b6b7c187c
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_jpeg_jpeg__image__decoder.cc
@@ -0,0 +1,40 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc
+@@ -49,23 +49,30 @@ extern "C" {
+ #include <setjmp.h>
+ }
+
+-#if defined(ARCH_CPU_BIG_ENDIAN)
+-#error Blink assumes a little-endian target.
+-#endif
+-
+ #if defined(JCS_ALPHA_EXTENSIONS)
+ #define TURBO_JPEG_RGB_SWIZZLE
+-#if SK_B32_SHIFT // Output little-endian RGBA pixels (Android).
++#if SK_PMCOLOR_BYTE_ORDER(R, G, B, A)
+ inline J_COLOR_SPACE rgbOutputColorSpace() {
+ return JCS_EXT_RGBA;
+ }
+-#else // Output little-endian BGRA pixels.
++#elif SK_PMCOLOR_BYTE_ORDER(B, G, R, A)
+ inline J_COLOR_SPACE rgbOutputColorSpace() {
+ return JCS_EXT_BGRA;
+ }
++#elif SK_PMCOLOR_BYTE_ORDER(A, R, G, B)
++inline J_COLOR_SPACE rgbOutputColorSpace() {
++ return JCS_EXT_ARGB;
++}
++#elif SK_PMCOLOR_BYTE_ORDER(A, B, G, R)
++inline J_COLOR_SPACE rgbOutputColorSpace() {
++ return JCS_EXT_ABGR;
++}
++#else
++#error Component order not supported by libjpeg_turbo
+ #endif
+ inline bool turboSwizzled(J_COLOR_SPACE colorSpace) {
+- return colorSpace == JCS_EXT_RGBA || colorSpace == JCS_EXT_BGRA;
++ return colorSpace == JCS_EXT_RGBA || colorSpace == JCS_EXT_BGRA ||
++ colorSpace == JCS_EXT_ABGR || colorSpace == JCS_EXT_ARGB;
+ }
+ #else
+ inline J_COLOR_SPACE rgbOutputColorSpace() {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_webp_webp__image__decoder.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_webp_webp__image__decoder.cc
new file mode 100644
index 000000000000..de881b4549d3
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_image-decoders_webp_webp__image__decoder.cc
@@ -0,0 +1,29 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/webp/webp_image_decoder.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/webp/webp_image_decoder.cc
+@@ -32,18 +32,20 @@
+ #include "third_party/blink/renderer/platform/histogram.h"
+ #include "third_party/skia/include/core/SkData.h"
+
+-#if defined(ARCH_CPU_BIG_ENDIAN)
+-#error Blink assumes a little-endian target.
+-#endif
+-
+-#if SK_B32_SHIFT // Output little-endian RGBA pixels (Android).
++#if SK_PMCOLOR_BYTE_ORDER(R, G, B, A)
+ inline WEBP_CSP_MODE outputMode(bool hasAlpha) {
+ return hasAlpha ? MODE_rgbA : MODE_RGBA;
+ }
+-#else // Output little-endian BGRA pixels.
++#elif SK_PMCOLOR_BYTE_ORDER(B, G, R, A)
+ inline WEBP_CSP_MODE outputMode(bool hasAlpha) {
+ return hasAlpha ? MODE_bgrA : MODE_BGRA;
+ }
++#elif SK_PMCOLOR_BYTE_ORDER(A, R, G, B)
++inline WEBP_CSP_MODE outputMode(bool hasAlpha) {
++ return hasAlpha ? MODE_Argb : MODE_ARGB;
++}
++#else
++#error Component order not supported by libwebp
+ #endif
+
+ namespace {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_wtf_dtoa_utils.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_wtf_dtoa_utils.h
new file mode 100644
index 000000000000..f577fe50e8d4
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_wtf_dtoa_utils.h
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/dtoa/utils.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/dtoa/utils.h
+@@ -45,7 +45,7 @@
+ // disabled.)
+ // On Linux,x86 89255e-22 != Div_double(89255.0/1e22)
+ #if defined(_M_X64) || defined(__x86_64__) || defined(__ARMEL__) || \
+- defined(__aarch64__) || defined(__MIPSEL__)
++ defined(__aarch64__) || defined(__MIPSEL__) || defined(__powerpc64__)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__)
+ #if defined(_WIN32)
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_BUILD.gn
index 840291df0722..5fa1360bfd13 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_BUILD.gn
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_BUILD.gn
@@ -1,6 +1,6 @@
---- src/3rdparty/chromium/third_party/boringssl/BUILD.gn.orig 2018-11-13 18:25:11 UTC
-+++ src/3rdparty/chromium/third_party/boringssl/BUILD.gn
-@@ -72,7 +72,7 @@ if (is_win && !is_msan) {
+--- src/3rdparty/chromium/third_party/boringssl/BUILD.gn.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/third_party/boringssl/BUILD.gn 2019-10-29 02:28:30.690043000 +0100
+@@ -71,7 +77,7 @@
} else if (current_cpu == "x64") {
if (is_mac) {
sources += crypto_sources_mac_x86_64
@@ -9,7 +9,7 @@
sources += crypto_sources_linux_x86_64
} else {
public_configs = [ ":no_asm_config" ]
-@@ -80,13 +80,13 @@ if (is_win && !is_msan) {
+@@ -79,13 +85,13 @@
} else if (current_cpu == "x86") {
if (is_mac) {
sources += crypto_sources_mac_x86
@@ -25,7 +25,7 @@
sources += crypto_sources_linux_arm
} else if (is_ios) {
sources += crypto_sources_ios_arm
-@@ -94,7 +94,7 @@ if (is_win && !is_msan) {
+@@ -93,10 +99,17 @@
public_configs = [ ":no_asm_config" ]
}
} else if (current_cpu == "arm64") {
@@ -34,3 +34,13 @@
sources += crypto_sources_linux_aarch64
} else if (is_ios) {
sources += crypto_sources_ios_aarch64
++ } else {
++ public_configs = [ ":no_asm_config" ]
++ }
++ } else if (current_cpu == "ppc64") {
++ if (is_linux || is_bsd) {
++ # TODO: ppc64 (be) check
++ sources += crypto_sources_linux_ppc64le
+ } else {
+ public_configs = [ ":no_asm_config" ]
+ }
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_asn1_a__int.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_asn1_a__int.c
new file mode 100644
index 000000000000..aa8f47e8d3ff
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_asn1_a__int.c
@@ -0,0 +1,12 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/asn1/a_int.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/asn1/a_int.c
+@@ -369,7 +369,9 @@ int ASN1_INTEGER_set_uint64(ASN1_INTEGER *out, uint64_
+
+ OPENSSL_free(out->data);
+ out->data = newdata;
++#ifndef OPENSSL_BIGENDIAN
+ v = CRYPTO_bswap8(v);
++#endif
+ memcpy(out->data, &v, sizeof(v));
+
+ out->type = V_ASN1_INTEGER;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_chacha_chacha.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_chacha_chacha.c
new file mode 100644
index 000000000000..48772c855570
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_chacha_chacha.c
@@ -0,0 +1,77 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/chacha/chacha.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/chacha/chacha.c
+@@ -29,6 +29,14 @@
+ (((uint32_t)((p)[0])) | ((uint32_t)((p)[1]) << 8) | \
+ ((uint32_t)((p)[2]) << 16) | ((uint32_t)((p)[3]) << 24))
+
++#define U32TO8_LITTLE(p, v) \
++ { \
++ (p)[0] = (v >> 0) & 0xff; \
++ (p)[1] = (v >> 8) & 0xff; \
++ (p)[2] = (v >> 16) & 0xff; \
++ (p)[3] = (v >> 24) & 0xff; \
++ }
++
+ // sigma contains the ChaCha constants, which happen to be an ASCII string.
+ static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
+ '2', '-', 'b', 'y', 't', 'e', ' ', 'k' };
+@@ -45,10 +53,28 @@ static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a',
+ void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
+ const uint8_t nonce[16]) {
+ uint32_t x[16];
+- OPENSSL_memcpy(x, sigma, sizeof(sigma));
+- OPENSSL_memcpy(&x[4], key, 32);
+- OPENSSL_memcpy(&x[12], nonce, 16);
++ int i;
+
++ x[0] = U8TO32_LITTLE(sigma + 0);
++ x[1] = U8TO32_LITTLE(sigma + 4);
++ x[2] = U8TO32_LITTLE(sigma + 8);
++ x[3] = U8TO32_LITTLE(sigma + 12);
++
++ x[4] = U8TO32_LITTLE(key + 0);
++ x[5] = U8TO32_LITTLE(key + 4);
++ x[6] = U8TO32_LITTLE(key + 8);
++ x[7] = U8TO32_LITTLE(key + 12);
++
++ x[8] = U8TO32_LITTLE(key + 16);
++ x[9] = U8TO32_LITTLE(key + 20);
++ x[10] = U8TO32_LITTLE(key + 24);
++ x[11] = U8TO32_LITTLE(key + 28);
++
++ x[12] = U8TO32_LITTLE(nonce + 0);
++ x[13] = U8TO32_LITTLE(nonce + 4);
++ x[14] = U8TO32_LITTLE(nonce + 8);
++ x[15] = U8TO32_LITTLE(nonce + 12);
++
+ for (size_t i = 0; i < 20; i += 2) {
+ QUARTERROUND(0, 4, 8, 12)
+ QUARTERROUND(1, 5, 9, 13)
+@@ -60,8 +86,10 @@ void CRYPTO_hchacha20(uint8_t out[32], const uint8_t k
+ QUARTERROUND(3, 4, 9, 14)
+ }
+
+- OPENSSL_memcpy(out, &x[0], sizeof(uint32_t) * 4);
+- OPENSSL_memcpy(&out[16], &x[12], sizeof(uint32_t) * 4);
++ for (i = 0; i < 4; ++i) {
++ U32TO8_LITTLE(out + 4 * i, x[i]);
++ U32TO8_LITTLE(&out[16] + 4 * i, x[12+i]);
++ }
+ }
+
+ #if !defined(OPENSSL_NO_ASM) && \
+@@ -104,14 +132,6 @@ void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in,
+ }
+
+ #else
+-
+-#define U32TO8_LITTLE(p, v) \
+- { \
+- (p)[0] = (v >> 0) & 0xff; \
+- (p)[1] = (v >> 8) & 0xff; \
+- (p)[2] = (v >> 16) & 0xff; \
+- (p)[3] = (v >> 24) & 0xff; \
+- }
+
+ // chacha_core performs 20 rounds of ChaCha on the input words in
+ // |input| and writes the 64 output bytes to |output|.
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_cipher__extra_e__aesgcmsiv.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_cipher__extra_e__aesgcmsiv.c
new file mode 100644
index 000000000000..62e35fe4be7a
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_cipher__extra_e__aesgcmsiv.c
@@ -0,0 +1,28 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.c
+@@ -625,7 +625,11 @@ static void gcm_siv_crypt(uint8_t *out, const uint8_t
+ for (size_t done = 0; done < in_len;) {
+ uint8_t keystream[AES_BLOCK_SIZE];
+ enc_block(counter.c, keystream, key);
++#ifdef OPENSSL_BIGENDIAN
++ counter.w[0] = CRYPTO_bswap4(CRYPTO_bswap4(counter.w[0]) + 1);
++#else
+ counter.w[0]++;
++#endif
+
+ size_t todo = AES_BLOCK_SIZE;
+ if (in_len - done < todo) {
+@@ -673,8 +677,13 @@ static void gcm_siv_polyval(
+ } bitlens;
+ } length_block;
+
++#ifdef OPENSSL_BIGENDIAN
++ length_block.bitlens.ad = CRYPTO_bswap8(ad_len * 8);
++ length_block.bitlens.in = CRYPTO_bswap8(in_len * 8);
++#else
+ length_block.bitlens.ad = ad_len * 8;
+ length_block.bitlens.in = in_len * 8;
++#endif
+ CRYPTO_POLYVAL_update_blocks(&polyval_ctx, length_block.c,
+ sizeof(length_block));
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_compiler__test.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_compiler__test.cc
new file mode 100644
index 000000000000..d3a064eb1140
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_compiler__test.cc
@@ -0,0 +1,17 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/compiler_test.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/compiler_test.cc
+@@ -40,9 +40,13 @@ static void CheckRepresentation(T value) {
+ UnsignedT value_u = static_cast<UnsignedT>(value);
+ EXPECT_EQ(sizeof(UnsignedT), sizeof(T));
+
+- // Integers must be little-endian.
++ // Integers must be either big-endian or little-endian.
+ uint8_t expected[sizeof(UnsignedT)];
++#ifdef OPENSSL_BIGENDIAN
++ for (size_t i = sizeof(UnsignedT); i-- > 0; ) {
++#else
+ for (size_t i = 0; i < sizeof(UnsignedT); i++) {
++#endif
+ expected[i] = static_cast<uint8_t>(value_u);
+ // Divide instead of right-shift to appease compilers that warn if |T| is a
+ // char. The explicit cast is also needed to appease MSVC if integer
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_curve25519_spake25519.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_curve25519_spake25519.c
new file mode 100644
index 000000000000..32a5c15854dc
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_curve25519_spake25519.c
@@ -0,0 +1,36 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/curve25519/spake25519.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/curve25519/spake25519.c
+@@ -339,8 +339,17 @@ static void scalar_double(scalar *s) {
+ uint32_t carry = 0;
+
+ for (size_t i = 0; i < 8; i++) {
+- const uint32_t carry_out = s->words[i] >> 31;
+- s->words[i] = (s->words[i] << 1) | carry;
++#ifdef OPENSSL_BIGENDIAN
++ const uint32_t si = CRYPTO_bswap4(s->words[i]);
++#else
++ const uint32_t si = s->words[i];
++#endif
++ const uint32_t carry_out = si >> 31;
++#ifdef OPENSSL_BIGENDIAN
++ s->words[i] = CRYPTO_bswap4((si << 1) | carry);
++#else
++ s->words[i] = (si << 1) | carry;
++#endif
+ carry = carry_out;
+ }
+ }
+@@ -350,8 +359,13 @@ static void scalar_add(scalar *dest, const scalar *src
+ uint32_t carry = 0;
+
+ for (size_t i = 0; i < 8; i++) {
++#ifdef OPENSSL_BIGENDIAN
++ uint64_t tmp = ((uint64_t)CRYPTO_bswap4(dest->words[i]) + CRYPTO_bswap4(src->words[i])) + carry;
++ dest->words[i] = CRYPTO_bswap4((uint32_t)tmp);
++#else
+ uint64_t tmp = ((uint64_t)dest->words[i] + src->words[i]) + carry;
+ dest->words[i] = (uint32_t)tmp;
++#endif
+ carry = (uint32_t)(tmp >> 32);
+ }
+ }
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_evp_scrypt.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_evp_scrypt.c
new file mode 100644
index 000000000000..03bb6186ffb9
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_evp_scrypt.c
@@ -0,0 +1,30 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/evp/scrypt.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/evp/scrypt.c
+@@ -196,9 +196,27 @@ int EVP_PBE_scrypt(const char *password, size_t passwo
+ goto err;
+ }
+
++#ifdef OPENSSL_BIGENDIAN
++ uint32_t *B32 = B->words;
++ size_t B_words = B_bytes >> 2;
++ do {
++ *B32 = CRYPTO_bswap4(*B32);
++ B32++;
++ } while(--B_words);
++#endif
++
+ for (uint64_t i = 0; i < p; i++) {
+ scryptROMix(B + 2 * r * i, r, N, T, V);
+ }
++
++#ifdef OPENSSL_BIGENDIAN
++ B32 = B->words;
++ B_words = B_bytes >> 2;
++ do {
++ *B32 = CRYPTO_bswap4(*B32);
++ B32++;
++ } while(--B_words);
++#endif
+
+ if (!PKCS5_PBKDF2_HMAC(password, password_len, (const uint8_t *)B, B_bytes, 1,
+ EVP_sha256(), key_len, out_key)) {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_bn_bytes.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_bn_bytes.c
new file mode 100644
index 000000000000..bf7ba3a733a8
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_bn_bytes.c
@@ -0,0 +1,64 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.c
+@@ -136,9 +136,13 @@ BIGNUM *BN_le2bn(const uint8_t *in, size_t len, BIGNUM
+ // Make sure the top bytes will be zeroed.
+ ret->d[num_words - 1] = 0;
+
+- // We only support little-endian platforms, so we can simply memcpy the
+- // internal representation.
++#ifdef OPENSSL_BIGENDIAN
++ uint8_t *out = (uint8_t *)ret->d;
++ for (size_t i = 0; i < len; i++)
++ out[i ^ (BN_BYTES-1)] = in[i];
++#else
+ OPENSSL_memcpy(ret->d, in, len);
++#endif
+ return ret;
+ }
+
+@@ -157,7 +161,11 @@ size_t BN_bn2bin(const BIGNUM *in, uint8_t *out) {
+ static int fits_in_bytes(const uint8_t *bytes, size_t num_bytes, size_t len) {
+ uint8_t mask = 0;
+ for (size_t i = len; i < num_bytes; i++) {
++#ifdef OPENSSL_BIGENDIAN
++ mask |= bytes[i ^ (BN_BYTES-1)];
++#else
+ mask |= bytes[i];
++#endif
+ }
+ return mask == 0;
+ }
+@@ -172,9 +180,13 @@ int BN_bn2le_padded(uint8_t *out, size_t len, const BI
+ num_bytes = len;
+ }
+
+- // We only support little-endian platforms, so we can simply memcpy into the
+- // internal representation.
++#ifdef OPENSSL_BIGENDIAN
++ for (size_t i = 0; i < num_bytes; i++) {
++ out[i] = bytes[i ^ (BN_BYTES-1)];
++ }
++#else
+ OPENSSL_memcpy(out, bytes, num_bytes);
++#endif
+ // Pad out the rest of the buffer with zeroes.
+ OPENSSL_memset(out + num_bytes, 0, len - num_bytes);
+ return 1;
+@@ -190,11 +202,15 @@ int BN_bn2bin_padded(uint8_t *out, size_t len, const B
+ num_bytes = len;
+ }
+
+- // We only support little-endian platforms, so we can simply write the buffer
+- // in reverse.
++#ifdef OPENSSL_BIGENDIAN
+ for (size_t i = 0; i < num_bytes; i++) {
++ out[len - i - 1] = bytes[i ^ (BN_BYTES-1)];
++ }
++#else
++ for (size_t i = 0; i < num_bytes; i++) {
+ out[len - i - 1] = bytes[i];
+ }
++#endif
+ // Pad out the rest of the buffer with zeroes.
+ OPENSSL_memset(out, 0, len - num_bytes);
+ return 1;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_ecdsa_ecdsa.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_ecdsa_ecdsa.c
new file mode 100644
index 000000000000..7d539324f561
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_ecdsa_ecdsa.c
@@ -0,0 +1,14 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.c
+@@ -80,7 +80,11 @@ static void digest_to_scalar(const EC_GROUP *group, EC
+ }
+ OPENSSL_memset(out, 0, sizeof(EC_SCALAR));
+ for (size_t i = 0; i < digest_len; i++) {
++#ifdef OPENSSL_BIGENDIAN
++ out->bytes[i ^ (BN_BYTES-1)] = digest[digest_len - 1 - i];
++#else
+ out->bytes[i] = digest[digest_len - 1 - i];
++#endif
+ }
+
+ // If it is still too long, truncate remaining bits with a shift.
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_gcm.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_gcm.c
new file mode 100644
index 000000000000..6e9d7634e00e
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_gcm.c
@@ -0,0 +1,257 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.c
+@@ -78,6 +78,14 @@
+ } \
+ } while (0)
+
++#ifdef OPENSSL_BIGENDIAN
++#define GCM_bswap4(x) (x)
++#define GCM_bswap8(x) (x)
++#else
++#define GCM_bswap4 CRYPTO_bswap4
++#define GCM_bswap8 CRYPTO_bswap8
++#endif
++
+ // kSizeTWithoutLower4Bits is a mask that can be used to zero the lower four
+ // bits of a |size_t|.
+ static const size_t kSizeTWithoutLower4Bits = (size_t) -16;
+@@ -173,8 +181,8 @@ static void gcm_gmult_4bit(uint64_t Xi[2], const u128
+ Z.lo ^= Htable[nlo].lo;
+ }
+
+- Xi[0] = CRYPTO_bswap8(Z.hi);
+- Xi[1] = CRYPTO_bswap8(Z.lo);
++ Xi[0] = GCM_bswap8(Z.hi);
++ Xi[1] = GCM_bswap8(Z.lo);
+ }
+
+ // Streamed gcm_mult_4bit, see CRYPTO_gcm128_[en|de]crypt for
+@@ -233,8 +241,8 @@ static void gcm_ghash_4bit(uint64_t Xi[2], const u128
+ Z.lo ^= Htable[nlo].lo;
+ }
+
+- Xi[0] = CRYPTO_bswap8(Z.hi);
+- Xi[1] = CRYPTO_bswap8(Z.lo);
++ Xi[0] = GCM_bswap8(Z.hi);
++ Xi[1] = GCM_bswap8(Z.lo);
+ } while (inp += 16, len -= 16);
+ }
+ #else // GHASH_ASM
+@@ -360,8 +368,8 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_fun
+ OPENSSL_memcpy(H.c, gcm_key, 16);
+
+ // H is stored in host byte order
+- H.u[0] = CRYPTO_bswap8(H.u[0]);
+- H.u[1] = CRYPTO_bswap8(H.u[1]);
++ H.u[0] = GCM_bswap8(H.u[0]);
++ H.u[1] = GCM_bswap8(H.u[1]);
+
+ OPENSSL_memcpy(out_key, H.c, 16);
+
+@@ -474,15 +482,15 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const AE
+ GCM_MUL(ctx, Yi);
+ }
+ len0 <<= 3;
+- ctx->Yi.u[1] ^= CRYPTO_bswap8(len0);
++ ctx->Yi.u[1] ^= GCM_bswap8(len0);
+
+ GCM_MUL(ctx, Yi);
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+ }
+
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EK0.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ }
+
+ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
+@@ -580,7 +588,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const A
+ ctx->ares = 0;
+ }
+
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+
+ n = ctx->mres;
+ if (n) {
+@@ -602,7 +610,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const A
+ if (n == 0) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ }
+ ctx->Xi.c[n] ^= out[i] = in[i] ^ ctx->EKi.c[n];
+ n = (n + 1) % 16;
+@@ -621,7 +629,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const A
+ while (j) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ store_word_le(out + i,
+ load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -638,7 +646,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const A
+ while (len >= 16) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ store_word_le(out + i,
+ load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -653,7 +661,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const A
+ while (len >= 16) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ size_t tmp = load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)];
+ store_word_le(out + i, tmp);
+@@ -668,7 +676,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const A
+ if (len) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ while (len--) {
+ ctx->Xi.c[n] ^= out[n] = in[n] ^ ctx->EKi.c[n];
+ ++n;
+@@ -707,7 +715,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const A
+ ctx->ares = 0;
+ }
+
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+
+ n = ctx->mres;
+ if (n) {
+@@ -732,7 +740,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const A
+ if (n == 0) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ }
+ c = in[i];
+ out[i] = c ^ ctx->EKi.c[n];
+@@ -754,7 +762,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const A
+ while (j) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ store_word_le(out + i,
+ load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -771,7 +779,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const A
+ while (len >= 16) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ store_word_le(out + i,
+ load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -785,7 +793,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const A
+ while (len >= 16) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ size_t c = load_word_le(in + i);
+ store_word_le(out + i, c ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -800,7 +808,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const A
+ if (len) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ while (len--) {
+ uint8_t c = in[n];
+ ctx->Xi.c[n] ^= c;
+@@ -866,13 +874,13 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, c
+ }
+ #endif
+
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+
+ #if defined(GHASH)
+ while (len >= GHASH_CHUNK) {
+ (*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
+ ctr += GHASH_CHUNK / 16;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ GHASH(ctx, out, GHASH_CHUNK);
+ out += GHASH_CHUNK;
+ in += GHASH_CHUNK;
+@@ -885,7 +893,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, c
+
+ (*stream)(in, out, j, key, ctx->Yi.c);
+ ctr += (unsigned int)j;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ in += i;
+ len -= i;
+ #if defined(GHASH)
+@@ -904,7 +912,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, c
+ if (len) {
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ while (len--) {
+ ctx->Xi.c[n] ^= out[n] = in[n] ^ ctx->EKi.c[n];
+ ++n;
+@@ -970,14 +978,14 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, c
+ }
+ #endif
+
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+
+ #if defined(GHASH)
+ while (len >= GHASH_CHUNK) {
+ GHASH(ctx, in, GHASH_CHUNK);
+ (*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
+ ctr += GHASH_CHUNK / 16;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ out += GHASH_CHUNK;
+ in += GHASH_CHUNK;
+ len -= GHASH_CHUNK;
+@@ -1003,7 +1011,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, c
+ #endif
+ (*stream)(in, out, j, key, ctx->Yi.c);
+ ctr += (unsigned int)j;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ out += i;
+ in += i;
+ len -= i;
+@@ -1011,7 +1019,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, c
+ if (len) {
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ while (len--) {
+ uint8_t c = in[n];
+ ctx->Xi.c[n] ^= c;
+@@ -1036,8 +1044,8 @@ int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const ui
+ GCM_MUL(ctx, Xi);
+ }
+
+- alen = CRYPTO_bswap8(alen);
+- clen = CRYPTO_bswap8(clen);
++ alen = GCM_bswap8(alen);
++ clen = GCM_bswap8(clen);
+
+ ctx->Xi.u[0] ^= alen;
+ ctx->Xi.u[1] ^= clen;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_internal.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_internal.h
new file mode 100644
index 000000000000..61f90b38cbeb
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_internal.h
@@ -0,0 +1,20 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/internal.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/internal.h
+@@ -70,11 +70,17 @@ extern "C" {
+ static inline uint32_t GETU32(const void *in) {
+ uint32_t v;
+ OPENSSL_memcpy(&v, in, sizeof(v));
++#ifdef OPENSSL_BIGENDIAN
++ return v;
++#else
+ return CRYPTO_bswap4(v);
++#endif
+ }
+
+ static inline void PUTU32(void *out, uint32_t v) {
++#ifndef OPENSSL_BIGENDIAN
+ v = CRYPTO_bswap4(v);
++#endif
+ OPENSSL_memcpy(out, &v, sizeof(v));
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_polyval.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_polyval.c
new file mode 100644
index 000000000000..6815b25cd614
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_modes_polyval.c
@@ -0,0 +1,29 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/polyval.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/polyval.c
+@@ -32,16 +32,26 @@ static void byte_reverse(polyval_block *b) {
+ // the GHASH field, multiplies that by 'x' and serialises the result back into
+ // |b|, but with GHASH's backwards bit ordering.
+ static void reverse_and_mulX_ghash(polyval_block *b) {
++#ifdef OPENSSL_BIGENDIAN
++ uint64_t hi = CRYPTO_bswap8(b->u[0]);
++ uint64_t lo = CRYPTO_bswap8(b->u[1]);
++#else
+ uint64_t hi = b->u[0];
+ uint64_t lo = b->u[1];
++#endif
+ const crypto_word_t carry = constant_time_eq_w(hi & 1, 1);
+ hi >>= 1;
+ hi |= lo << 63;
+ lo >>= 1;
+ lo ^= ((uint64_t) constant_time_select_w(carry, 0xe1, 0)) << 56;
+
++#ifdef OPENSSL_BIGENDIAN
++ b->u[0] = lo;
++ b->u[1] = hi;
++#else
+ b->u[0] = CRYPTO_bswap8(lo);
+ b->u[1] = CRYPTO_bswap8(hi);
++#endif
+ }
+
+ // POLYVAL(H, X_1, ..., X_n) =
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_rand_ctrdrbg.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_rand_ctrdrbg.c
new file mode 100644
index 000000000000..8aef254ca2e7
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_fipsmodule_rand_ctrdrbg.c
@@ -0,0 +1,15 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c
+@@ -70,8 +70,12 @@ OPENSSL_STATIC_ASSERT(CTR_DRBG_ENTROPY_LEN % AES_BLOCK
+ // ctr_inc adds |n| to the last four bytes of |drbg->counter|, treated as a
+ // big-endian number.
+ static void ctr32_add(CTR_DRBG_STATE *drbg, uint32_t n) {
++#ifdef OPENSSL_BIGENDIAN
++ drbg->counter.words[3] += n;
++#else
+ drbg->counter.words[3] =
+ CRYPTO_bswap4(CRYPTO_bswap4(drbg->counter.words[3]) + n);
++#endif
+ }
+
+ static int ctr_drbg_update(CTR_DRBG_STATE *drbg, const uint8_t *data,
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_poly1305_poly1305.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_poly1305_poly1305.c
new file mode 100644
index 000000000000..6cd15931ab80
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_crypto_poly1305_poly1305.c
@@ -0,0 +1,19 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/crypto/poly1305/poly1305.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/crypto/poly1305/poly1305.c
+@@ -32,10 +32,16 @@
+ static uint32_t U8TO32_LE(const uint8_t *m) {
+ uint32_t r;
+ OPENSSL_memcpy(&r, m, sizeof(r));
++#ifdef OPENSSL_BIGENDIAN
++ r = CRYPTO_bswap4(r);
++#endif
+ return r;
+ }
+
+ static void U32TO8_LE(uint8_t *m, uint32_t v) {
++#ifdef OPENSSL_BIGENDIAN
++ v = CRYPTO_bswap4(v);
++#endif
+ OPENSSL_memcpy(m, &v, sizeof(v));
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_include_openssl_base.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_include_openssl_base.h
new file mode 100644
index 000000000000..fb1ae1fa7e1d
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_include_openssl_base.h
@@ -0,0 +1,17 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/include/openssl/base.h.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/third_party/boringssl/src/include/openssl/base.h 2019-10-29 11:49:25.706601000 +0100
+@@ -96,9 +96,13 @@
+ #elif defined(__arm) || defined(__arm__) || defined(_M_ARM)
+ #define OPENSSL_32_BIT
+ #define OPENSSL_ARM
+-#elif (defined(__PPC64__) || defined(__powerpc64__)) && defined(_LITTLE_ENDIAN)
++#elif (defined(__PPC64__) || defined(__powerpc64__)) && defined(__LITTLE_ENDIAN__)
+ #define OPENSSL_64_BIT
+ #define OPENSSL_PPC64LE
++#elif (defined(__PPC64__) || defined(__powerpc64__))
++#define OPENSSL_64_BIT
++#define OPENSSL_PPC64
++#define OPENSSL_BIGENDIAN
+ #elif defined(__mips__) && !defined(__LP64__)
+ #define OPENSSL_32_BIT
+ #define OPENSSL_MIPS
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_third__party_fiat_curve25519.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_third__party_fiat_curve25519.c
new file mode 100644
index 000000000000..52178ba0908e
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_third__party_fiat_curve25519.c
@@ -0,0 +1,19 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/curve25519.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/curve25519.c
+@@ -3032,9 +3032,14 @@ int ED25519_verify(const uint8_t *message, size_t mess
+ UINT64_C(0x1000000000000000),
+ };
+ for (size_t i = 3;; i--) {
+- if (scopy.u64[i] > kOrder[i]) {
++#ifdef OPENSSL_BIGENDIAN
++ const uint64_t n = CRYPTO_bswap8(scopy.u64[i]);
++#else
++ const uint64_t n = scopy.u64[i];
++#endif
++ if (n > kOrder[i]) {
+ return 0;
+- } else if (scopy.u64[i] < kOrder[i]) {
++ } else if (n < kOrder[i]) {
+ break;
+ } else if (i == 0) {
+ return 0;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_third__party_fiat_p256.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_third__party_fiat_p256.c
new file mode 100644
index 000000000000..130ec5ee1254
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_boringssl_src_third__party_fiat_p256.c
@@ -0,0 +1,51 @@
+--- src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/p256.c.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/p256.c
+@@ -882,12 +882,24 @@ static void fe_tobytes(uint8_t out[NBYTES], const fe i
+ }
+ }
+
++#ifdef OPENSSL_BIGENDIAN
++static void fe_tobytes_be(uint8_t out[NBYTES], const fe in) {
++ for (int i = 0; i<NBYTES; i++) {
++ out[i ^ (BN_BYTES-1)] = (uint8_t)(in[i/sizeof(in[0])] >> (8*(i%sizeof(in[0]))));
++ }
++}
++#endif
++
+ static void fe_frombytes(fe out, const uint8_t in[NBYTES]) {
+ for (int i = 0; i<NLIMBS; i++) {
+ out[i] = 0;
+ }
+ for (int i = 0; i<NBYTES; i++) {
++#ifdef OPENSSL_BIGENDIAN
++ out[i/sizeof(out[0])] |= ((limb_t)in[i ^ (BN_BYTES-1)]) << (8*(i%sizeof(out[0])));
++#else
+ out[i/sizeof(out[0])] |= ((limb_t)in[i]) << (8*(i%sizeof(out[0])));
++#endif
+ }
+ }
+
+@@ -906,7 +918,11 @@ static void fe_to_generic(EC_FELEM *out, const fe in)
+ OPENSSL_STATIC_ASSERT(
+ 256 / 8 == sizeof(BN_ULONG) * ((256 + BN_BITS2 - 1) / BN_BITS2),
+ "fe_tobytes leaves bytes uninitialized");
++#ifdef OPENSSL_BIGENDIAN
++ fe_tobytes_be(out->bytes, in);
++#else
+ fe_tobytes(out->bytes, in);
++#endif
+ }
+
+ // fe_inv calculates |out| = |in|^{-1}
+@@ -1524,7 +1540,11 @@ static char get_bit(const uint8_t *in, int i) {
+ if (i < 0 || i >= 256) {
+ return 0;
+ }
++#ifdef OPENSSL_BIGENDIAN
++ return (in[(i >> 3) ^ (sizeof(BN_ULONG)-1)] >> (i & 7)) & 1;
++#else
+ return (in[i >> 3] >> (i & 7)) & 1;
++#endif
+ }
+
+ // Interleaved point multiplication using precomputed point multiples: The
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_crc32c_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_crc32c_BUILD.gn
new file mode 100644
index 000000000000..d9cc35f2d7a1
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_crc32c_BUILD.gn
@@ -0,0 +1,16 @@
+--- src/3rdparty/chromium/third_party/crc32c/BUILD.gn.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/crc32c/BUILD.gn
+@@ -15,12 +15,9 @@ config("crc32c_config") {
+ ]
+
+ defines = [
+- "BYTE_ORDER_BIG_ENDIAN=0",
++ "BYTE_ORDER_BIG_ENDIAN=__BYTE_ORDER__==__ORDER_BIG_ENDIAN__",
+ "CRC32C_TESTS_BUILT_WITH_GLOG=0",
+ ]
+-
+- # If we ever support big-endian builds, add logic to conditionally enable
+- # BYTE_ORDER_BIG_ENDIAN.
+
+ if (target_cpu == "x86" || target_cpu == "x64") {
+ defines += [
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_flatbuffers_src_include_flatbuffers_base.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_flatbuffers_src_include_flatbuffers_base.h
new file mode 100644
index 000000000000..1aafdf3282ad
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_flatbuffers_src_include_flatbuffers_base.h
@@ -0,0 +1,24 @@
+--- src/3rdparty/chromium/third_party/flatbuffers/src/include/flatbuffers/base.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/flatbuffers/src/include/flatbuffers/base.h
+@@ -220,18 +220,15 @@ template<typename T> T EndianSwap(T t) {
+ if (sizeof(T) == 1) { // Compile-time if-then's.
+ return t;
+ } else if (sizeof(T) == 2) {
+- union { T t; uint16_t i; } u;
+- u.t = t;
++ union U { T t; uint16_t i; U(const T& t_) : t(t_) {}} u(t);
+ u.i = FLATBUFFERS_BYTESWAP16(u.i);
+ return u.t;
+ } else if (sizeof(T) == 4) {
+- union { T t; uint32_t i; } u;
+- u.t = t;
++ union U { T t; uint32_t i; U(const T& t_) : t(t_) {}} u(t);
+ u.i = FLATBUFFERS_BYTESWAP32(u.i);
+ return u.t;
+ } else if (sizeof(T) == 8) {
+- union { T t; uint64_t i; } u;
+- u.t = t;
++ union U { T t; uint64_t i; U(const T& t_) : t(t_) {}} u(t);
+ u.i = FLATBUFFERS_BYTESWAP64(u.i);
+ return u.t;
+ } else {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_flatbuffers_src_include_flatbuffers_minireflect.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_flatbuffers_src_include_flatbuffers_minireflect.h
new file mode 100644
index 000000000000..8d26cd9b60a0
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_flatbuffers_src_include_flatbuffers_minireflect.h
@@ -0,0 +1,73 @@
+--- src/3rdparty/chromium/third_party/flatbuffers/src/include/flatbuffers/minireflect.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/flatbuffers/src/include/flatbuffers/minireflect.h
+@@ -122,58 +122,58 @@ inline void IterateValue(ElementaryType type, const ui
+ soffset_t vector_index, IterationVisitor *visitor) {
+ switch (type) {
+ case ET_UTYPE: {
+- auto tval = *reinterpret_cast<const uint8_t *>(val);
++ auto tval = ReadScalar<uint8_t>(val);
+ visitor->UType(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_BOOL: {
+- visitor->Bool(*reinterpret_cast<const uint8_t *>(val) != 0);
++ visitor->Bool(ReadScalar<uint8_t>(val) != 0);
+ break;
+ }
+ case ET_CHAR: {
+- auto tval = *reinterpret_cast<const int8_t *>(val);
++ auto tval = ReadScalar<int8_t>(val);
+ visitor->Char(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_UCHAR: {
+- auto tval = *reinterpret_cast<const uint8_t *>(val);
++ auto tval = ReadScalar<uint8_t>(val);
+ visitor->UChar(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_SHORT: {
+- auto tval = *reinterpret_cast<const int16_t *>(val);
++ auto tval = ReadScalar<int16_t>(val);
+ visitor->Short(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_USHORT: {
+- auto tval = *reinterpret_cast<const uint16_t *>(val);
++ auto tval = ReadScalar<uint16_t>(val);
+ visitor->UShort(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_INT: {
+- auto tval = *reinterpret_cast<const int32_t *>(val);
++ auto tval = ReadScalar<int32_t>(val);
+ visitor->Int(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_UINT: {
+- auto tval = *reinterpret_cast<const uint32_t *>(val);
++ auto tval = ReadScalar<uint32_t>(val);
+ visitor->UInt(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_LONG: {
+- visitor->Long(*reinterpret_cast<const int64_t *>(val));
++ visitor->Long(ReadScalar<int64_t>(val));
+ break;
+ }
+ case ET_ULONG: {
+- visitor->ULong(*reinterpret_cast<const uint64_t *>(val));
++ visitor->ULong(ReadScalar<uint64_t>(val));
+ break;
+ }
+ case ET_FLOAT: {
+- visitor->Float(*reinterpret_cast<const float *>(val));
++ visitor->Float(ReadScalar<float>(val));
+ break;
+ }
+ case ET_DOUBLE: {
+- visitor->Double(*reinterpret_cast<const double *>(val));
++ visitor->Double(ReadScalar<double>(val));
+ break;
+ }
+ case ET_STRING: {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_leveldatabase_port_port__chromium.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_leveldatabase_port_port__chromium.h
new file mode 100644
index 000000000000..3a12dcc106a9
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_leveldatabase_port_port__chromium.h
@@ -0,0 +1,15 @@
+--- src/3rdparty/chromium/third_party/leveldatabase/port/port_chromium.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/leveldatabase/port/port_chromium.h
+@@ -23,8 +23,11 @@
+ namespace leveldb {
+ namespace port {
+
+-// Chromium only supports little endian.
++#if ARCH_CPU_LITTLE_ENDIAN
+ static const bool kLittleEndian = true;
++#else
++static const bool kLittleEndian = false;
++#endif
+
+ class LOCKABLE Mutex {
+ public:
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_BUILD.gn
new file mode 100644
index 000000000000..5e772932d647
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_BUILD.gn
@@ -0,0 +1,14 @@
+--- src/3rdparty/chromium/third_party/libpng/BUILD.gn.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/libpng/BUILD.gn
+@@ -93,6 +93,11 @@ source_set("libpng_sources") {
+ "mips/filter_msa_intrinsics.c",
+ "mips/mips_init.c",
+ ]
++ } else if (current_cpu == "ppc64") {
++ sources += [
++ "powerpc/filter_vsx_intrinsics.c",
++ "powerpc/powerpc_init.c",
++ ]
+ }
+
+ configs -= [ "//build/config/compiler:chromium_code" ]
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_powerpc_filter__vsx__intrinsics.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_powerpc_filter__vsx__intrinsics.c
new file mode 100644
index 000000000000..d5e9a83efdef
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_powerpc_filter__vsx__intrinsics.c
@@ -0,0 +1,770 @@
+--- src/3rdparty/chromium/third_party/libpng/powerpc/filter_vsx_intrinsics.c.orig 2019-10-27 17:23:52 UTC
++++ src/3rdparty/chromium/third_party/libpng/powerpc/filter_vsx_intrinsics.c
+@@ -0,0 +1,767 @@
++/* filter_vsx_intrinsics.c - PowerPC optimised filter functions
++ *
++ * Copyright (c) 2017 Glenn Randers-Pehrson
++ * Written by Vadim Barkov, 2017.
++ * Last changed in libpng 1.6.29 [March 16, 2017]
++ *
++ * This code is released under the libpng license.
++ * For conditions of distribution and use, see the disclaimer
++ * and license in png.h
++ */
++#include <stdio.h>
++#include <stdint.h>
++#include "../pngpriv.h"
++
++#ifdef PNG_READ_SUPPORTED
++
++/* This code requires -maltivec and -mvsx on the command line: */
++#if PNG_POWERPC_VSX_IMPLEMENTATION == 1 /* intrinsics code from pngpriv.h */
++
++#include <altivec.h>
++
++#if PNG_POWERPC_VSX_OPT > 0
++
++#ifndef __VSX__
++# error "This code requires VSX support (POWER7 and later). Please provide -mvsx compiler flag."
++#endif
++
++#define vec_ld_unaligned(vec,data) vec = vec_vsx_ld(0,data)
++#define vec_st_unaligned(vec,data) vec_vsx_st(vec,0,data)
++
++
++/* Functions in this file look at most 3 pixels (a,b,c) to predict the 4th (d).
++ * They're positioned like this:
++ * prev: c b
++ * row: a d
++ * The Sub filter predicts d=a, Avg d=(a+b)/2, and Paeth predicts d to be
++ * whichever of a, b, or c is closest to p=a+b-c.
++ * ( this is taken from ../intel/filter_sse2_intrinsics.c )
++ */
++
++#define vsx_declare_common_vars(row_info,row,prev_row,offset) \
++ png_byte i;\
++ png_bytep rp = row + offset;\
++ png_const_bytep pp = prev_row;\
++ png_size_t unaligned_top = 16 - (((png_size_t)rp % 16));\
++ png_size_t istop;\
++ if(unaligned_top == 16)\
++ unaligned_top = 0;\
++ istop = row_info->rowbytes;\
++ if((unaligned_top < istop))\
++ istop -= unaligned_top;\
++ else{\
++ unaligned_top = istop;\
++ istop = 0;\
++ }
++
++void png_read_filter_row_up_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vsx_declare_common_vars(row_info,row,prev_row,0)
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ rp_vec = vec_ld(0,rp);
++ vec_ld_unaligned(pp_vec,pp);
++
++ rp_vec = vec_add(rp_vec,pp_vec);
++
++ vec_st(rp_vec,0,rp);
++
++ pp += 16;
++ rp += 16;
++ istop -= 16;
++ }
++
++ if(istop > 0)
++ {
++ /* If byte count of row is not divisible by 16
++ * we will process remaining part as usual
++ */
++ for (i = 0; i < istop; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
++ rp++;
++ }
++}
++
++}
++
++static const vector unsigned char VSX_LEFTSHIFTED1_4 = {16,16,16,16, 0, 1, 2, 3,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED2_4 = {16,16,16,16,16,16,16,16, 4, 5, 6, 7,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED3_4 = {16,16,16,16,16,16,16,16,16,16,16,16, 8, 9,10,11};
++
++static const vector unsigned char VSX_LEFTSHIFTED1_3 = {16,16,16, 0, 1, 2,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED2_3 = {16,16,16,16,16,16, 3, 4, 5,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED3_3 = {16,16,16,16,16,16,16,16,16, 6, 7, 8,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED4_3 = {16,16,16,16,16,16,16,16,16,16,16,16, 9,10,11,16};
++
++static const vector unsigned char VSX_NOT_SHIFTED1_4 = {16,16,16,16, 4, 5, 6, 7,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED2_4 = {16,16,16,16,16,16,16,16, 8, 9,10,11,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED3_4 = {16,16,16,16,16,16,16,16,16,16,16,16,12,13,14,15};
++
++static const vector unsigned char VSX_NOT_SHIFTED1_3 = {16,16,16, 3, 4, 5,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED2_3 = {16,16,16,16,16,16, 6, 7, 8,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED3_3 = {16,16,16,16,16,16,16,16,16, 9,10,11,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED4_3 = {16,16,16,16,16,16,16,16,16,16,16,16,12,13,14,16};
++
++static const vector unsigned char VSX_CHAR_ZERO = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
++#ifdef __LITTLE_ENDIAN__
++
++static const vector unsigned char VSX_CHAR_TO_SHORT1_4 = { 4,16, 5,16, 6,16, 7,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT2_4 = { 8,16, 9,16,10,16,11,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT3_4 = {12,16,13,16,14,16,15,16,16,16,16,16,16,16,16,16};
++
++static const vector unsigned char VSX_SHORT_TO_CHAR1_4 = {16,16,16,16, 0, 2, 4, 6,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR2_4 = {16,16,16,16,16,16,16,16, 0, 2, 4, 6,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR3_4 = {16,16,16,16,16,16,16,16,16,16,16,16, 0, 2, 4, 6};
++
++static const vector unsigned char VSX_CHAR_TO_SHORT1_3 = { 3,16, 4,16, 5,16,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT2_3 = { 6,16, 7,16, 8,16,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT3_3 = { 9,16,10,16,11,16,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT4_3 = {12,16,13,16,14,16,16,16,16,16,16,16,16,16,16,16};
++
++static const vector unsigned char VSX_SHORT_TO_CHAR1_3 = {16,16,16, 0, 2, 4,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR2_3 = {16,16,16,16,16,16, 0, 2, 4,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR3_3 = {16,16,16,16,16,16,16,16,16, 0, 2, 4,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR4_3 = {16,16,16,16,16,16,16,16,16,16,16,16, 0, 2, 4,16};
++
++#elif defined(__BIG_ENDIAN__)
++
++static const vector unsigned char VSX_CHAR_TO_SHORT1_4 = {16, 4,16, 5,16, 6,16, 7,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT2_4 = {16, 8,16, 9,16,10,16,11,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT3_4 = {16,12,16,13,16,14,16,15,16,16,16,16,16,16,16,16};
++
++static const vector unsigned char VSX_SHORT_TO_CHAR1_4 = {16,16,16,16, 1, 3, 5, 7,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR2_4 = {16,16,16,16,16,16,16,16, 1, 3, 5, 7,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR3_4 = {16,16,16,16,16,16,16,16,16,16,16,16, 1, 3, 5, 7};
++
++static const vector unsigned char VSX_CHAR_TO_SHORT1_3 = {16, 3,16, 4,16, 5,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT2_3 = {16, 6,16, 7,16, 8,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT3_3 = {16, 9,16,10,16,11,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT4_3 = {16,12,16,13,16,14,16,16,16,16,16,16,16,16,16,16};
++
++static const vector unsigned char VSX_SHORT_TO_CHAR1_3 = {16,16,16, 1, 3, 5,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR2_3 = {16,16,16,16,16,16, 1, 3, 5,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR3_3 = {16,16,16,16,16,16,16,16,16, 1, 3, 5,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR4_3 = {16,16,16,16,16,16,16,16,16,16,16,16, 1, 3, 5,16};
++
++#endif
++
++#define vsx_char_to_short(vec,offset,bpp) (vector unsigned short)vec_perm((vec),VSX_CHAR_ZERO,VSX_CHAR_TO_SHORT##offset##_##bpp)
++#define vsx_short_to_char(vec,offset,bpp) vec_perm(((vector unsigned char)(vec)),VSX_CHAR_ZERO,VSX_SHORT_TO_CHAR##offset##_##bpp)
++
++#ifdef PNG_USE_ABS
++# define vsx_abs(number) abs(number)
++#else
++# define vsx_abs(number) (number > 0) ? (number) : -(number)
++#endif
++
++void png_read_filter_row_sub4_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 4;
++
++ vector unsigned char rp_vec;
++ vector unsigned char part_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++
++ PNG_UNUSED(pp)
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ for(i=0;i < bpp ; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++ rp -= bpp;
++
++ rp_vec = vec_ld(0,rp);
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED1_4);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED2_4);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED3_4);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 16;
++ istop -= 16;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp - bpp))) & 0xff);
++ rp++;
++ }
++
++}
++
++void png_read_filter_row_sub3_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 3;
++
++ vector unsigned char rp_vec;
++ vector unsigned char part_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++
++ PNG_UNUSED(pp)
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ for(i=0;i < bpp ; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++ rp -= bpp;
++
++ rp_vec = vec_ld(0,rp);
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED1_3);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED2_3);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED3_3);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED4_3);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ vec_st(rp_vec,0,rp);
++ rp += 15;
++ istop -= 16;
++
++ /* Since 16 % bpp = 16 % 3 = 1, last element of array must
++ * be proceeded manually
++ */
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++}
++
++void png_read_filter_row_avg4_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 4;
++
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vector unsigned char pp_part_vec;
++ vector unsigned char rp_part_vec;
++ vector unsigned char avg_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++ rp -= bpp;
++ if(istop >= bpp)
++ istop -= bpp;
++
++ for (i = 0; i < bpp; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ ((int)(*pp++) / 2 )) & 0xff);
++
++ rp++;
++ }
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ for(i=0;i < bpp ; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++ rp -= bpp;
++ pp -= bpp;
++
++ vec_ld_unaligned(pp_vec,pp);
++ rp_vec = vec_ld(0,rp);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED1_4);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED1_4);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED2_4);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED2_4);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED3_4);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED3_4);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 16;
++ pp += 16;
++ istop -= 16;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++}
++
++void png_read_filter_row_avg3_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 3;
++
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vector unsigned char pp_part_vec;
++ vector unsigned char rp_part_vec;
++ vector unsigned char avg_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++ rp -= bpp;
++ if(istop >= bpp)
++ istop -= bpp;
++
++ for (i = 0; i < bpp; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ ((int)(*pp++) / 2 )) & 0xff);
++
++ rp++;
++ }
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ for(i=0;i < bpp ; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++ rp -= bpp;
++ pp -= bpp;
++
++ vec_ld_unaligned(pp_vec,pp);
++ rp_vec = vec_ld(0,rp);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED1_3);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED1_3);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED2_3);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED2_3);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED3_3);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED3_3);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED4_3);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED4_3);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 15;
++ pp += 15;
++ istop -= 16;
++
++ /* Since 16 % bpp = 16 % 3 = 1, last element of array must
++ * be proceeded manually
++ */
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++ rp++;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++}
++
++/* Bytewise c ? t : e. */
++#define if_then_else(c,t,e) vec_sel(e,t,c)
++
++#define vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp) {\
++ c = *(pp - bpp);\
++ a = *(rp - bpp);\
++ b = *pp++;\
++ p = b - c;\
++ pc = a - c;\
++ pa = vsx_abs(p);\
++ pb = vsx_abs(pc);\
++ pc = vsx_abs(p + pc);\
++ if (pb < pa) pa = pb, a = b;\
++ if (pc < pa) a = c;\
++ a += *rp;\
++ *rp++ = (png_byte)a;\
++ }
++
++void png_read_filter_row_paeth4_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 4;
++
++ int a, b, c, pa, pb, pc, p;
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vector unsigned short a_vec,b_vec,c_vec,nearest_vec;
++ vector signed short pa_vec,pb_vec,pc_vec,smallest_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++ rp -= bpp;
++ if(istop >= bpp)
++ istop -= bpp;
++
++ /* Process the first pixel in the row completely (this is the same as 'up'
++ * because there is only one candidate predictor for the first row).
++ */
++ for(i = 0; i < bpp ; i++)
++ {
++ *rp = (png_byte)( *rp + *pp);
++ rp++;
++ pp++;
++ }
++
++ for(i = 0; i < unaligned_top ; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ while( istop >= 16)
++ {
++ for(i = 0; i < bpp ; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ rp -= bpp;
++ pp -= bpp;
++ rp_vec = vec_ld(0,rp);
++ vec_ld_unaligned(pp_vec,pp);
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED1_4),1,4);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED1_4),1,4);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED1_4),1,4);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,1,4)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED2_4),2,4);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED2_4),2,4);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED2_4),2,4);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,2,4)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED3_4),3,4);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED3_4),3,4);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED3_4),3,4);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,3,4)));
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 16;
++ pp += 16;
++ istop -= 16;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++}
++
++void png_read_filter_row_paeth3_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 3;
++
++ int a, b, c, pa, pb, pc, p;
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vector unsigned short a_vec,b_vec,c_vec,nearest_vec;
++ vector signed short pa_vec,pb_vec,pc_vec,smallest_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++ rp -= bpp;
++ if(istop >= bpp)
++ istop -= bpp;
++
++ /* Process the first pixel in the row completely (this is the same as 'up'
++ * because there is only one candidate predictor for the first row).
++ */
++ for(i = 0; i < bpp ; i++)
++ {
++ *rp = (png_byte)( *rp + *pp);
++ rp++;
++ pp++;
++ }
++
++ for(i = 0; i < unaligned_top ; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ while( istop >= 16)
++ {
++ for(i = 0; i < bpp ; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ rp -= bpp;
++ pp -= bpp;
++ rp_vec = vec_ld(0,rp);
++ vec_ld_unaligned(pp_vec,pp);
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED1_3),1,3);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED1_3),1,3);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED1_3),1,3);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,1,3)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED2_3),2,3);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED2_3),2,3);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED2_3),2,3);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,2,3)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED3_3),3,3);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED3_3),3,3);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED3_3),3,3);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,3,3)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED4_3),4,3);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED4_3),4,3);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED4_3),4,3);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,4,3)));
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 15;
++ pp += 15;
++ istop -= 16;
++
++ /* Since 16 % bpp = 16 % 3 = 1, last element of array must
++ * be proceeded manually
++ */
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++}
++
++#endif /* PNG_POWERPC_VSX_OPT > 0 */
++#endif /* PNG_POWERPC_VSX_IMPLEMENTATION == 1 (intrinsics) */
++#endif /* READ */
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_powerpc_powerpc__init.c b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_powerpc_powerpc__init.c
new file mode 100644
index 000000000000..3dda63fe71ae
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libpng_powerpc_powerpc__init.c
@@ -0,0 +1,128 @@
+--- src/3rdparty/chromium/third_party/libpng/powerpc/powerpc_init.c.orig 2019-10-27 17:23:52 UTC
++++ src/3rdparty/chromium/third_party/libpng/powerpc/powerpc_init.c
+@@ -0,0 +1,125 @@
++
++/* powerpc_init.c - POWERPC optimised filter functions
++ *
++ * Copyright (c) 2017 Glenn Randers-Pehrson
++ * Written by Vadim Barkov, 2017.
++ * Last changed in libpng 1.6.29 [March 16, 2017]
++ *
++ * This code is released under the libpng license.
++ * For conditions of distribution and use, see the disclaimer
++ * and license in png.h
++ */
++/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
++ * called.
++ */
++#define _POSIX_SOURCE 1
++
++#include <stdio.h>
++#include "../pngpriv.h"
++
++#ifdef PNG_READ_SUPPORTED
++
++#if PNG_POWERPC_VSX_OPT > 0
++#ifdef PNG_POWERPC_VSX_CHECK_SUPPORTED /* Do run-time checks */
++/* WARNING: it is strongly recommended that you do not build libpng with
++ * run-time checks for CPU features if at all possible. In the case of the PowerPC
++ * VSX instructions there is no processor-specific way of detecting the
++ * presence of the required support, therefore run-time detection is extremely
++ * OS specific.
++ *
++ * You may set the macro PNG_POWERPC_VSX_FILE to the file name of file containing
++ * a fragment of C source code which defines the png_have_vsx function. There
++ * are a number of implementations in contrib/powerpc-vsx, but the only one that
++ * has partial support is contrib/powerpc-vsx/linux.c - a generic Linux
++ * implementation which reads /proc/cpufino.
++ */
++#ifndef PNG_POWERPC_VSX_FILE
++# ifdef __linux__
++# define PNG_POWERPC_VSX_FILE "contrib/powerpc-vsx/linux_aux.c"
++# endif
++#endif
++
++#ifdef PNG_POWERPC_VSX_FILE
++
++#include <signal.h> /* for sig_atomic_t */
++static int png_have_vsx(png_structp png_ptr);
++#include PNG_POWERPC_VSX_FILE
++
++#else /* PNG_POWERPC_VSX_FILE */
++# error "PNG_POWERPC_VSX_FILE undefined: no support for run-time POWERPC VSX checks"
++#endif /* PNG_POWERPC_VSX_FILE */
++#endif /* PNG_POWERPC_VSX_CHECK_SUPPORTED */
++
++void
++png_init_filter_functions_vsx(png_structp pp, unsigned int bpp)
++{
++ /* The switch statement is compiled in for POWERPC_VSX_API, the call to
++ * png_have_vsx is compiled in for POWERPC_VSX_CHECK. If both are defined
++ * the check is only performed if the API has not set the PowerPC option on
++ * or off explicitly. In this case the check controls what happens.
++ */
++
++#ifdef PNG_POWERPC_VSX_API_SUPPORTED
++ switch ((pp->options >> PNG_POWERPC_VSX) & 3)
++ {
++ case PNG_OPTION_UNSET:
++ /* Allow the run-time check to execute if it has been enabled -
++ * thus both API and CHECK can be turned on. If it isn't supported
++ * this case will fall through to the 'default' below, which just
++ * returns.
++ */
++#endif /* PNG_POWERPC_VSX_API_SUPPORTED */
++#ifdef PNG_POWERPC_VSX_CHECK_SUPPORTED
++ {
++ static volatile sig_atomic_t no_vsx = -1; /* not checked */
++
++ if (no_vsx < 0)
++ no_vsx = !png_have_vsx(pp);
++
++ if (no_vsx)
++ return;
++ }
++#ifdef PNG_POWERPC_VSX_API_SUPPORTED
++ break;
++#endif
++#endif /* PNG_POWERPC_VSX_CHECK_SUPPORTED */
++
++#ifdef PNG_POWERPC_VSX_API_SUPPORTED
++ default: /* OFF or INVALID */
++ return;
++
++ case PNG_OPTION_ON:
++ /* Option turned on */
++ break;
++ }
++#endif
++
++ /* IMPORTANT: any new internal functions used here must be declared using
++ * PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the
++ * 'prefix' option to configure works:
++ *
++ * ./configure --with-libpng-prefix=foobar_
++ *
++ * Verify you have got this right by running the above command, doing a build
++ * and examining pngprefix.h; it must contain a #define for every external
++ * function you add. (Notice that this happens automatically for the
++ * initialization function.)
++ */
++ pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_vsx;
++
++ if (bpp == 3)
++ {
++ pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_vsx;
++ pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_vsx;
++ pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth3_vsx;
++ }
++
++ else if (bpp == 4)
++ {
++ pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_vsx;
++ pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_vsx;
++ pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth4_vsx;
++ }
++}
++#endif /* PNG_POWERPC_VSX_OPT > 0 */
++#endif /* READ */
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_modp__b64_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_modp__b64_BUILD.gn
new file mode 100644
index 000000000000..2aa771a248a8
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_modp__b64_BUILD.gn
@@ -0,0 +1,19 @@
+--- src/3rdparty/chromium/third_party/modp_b64/BUILD.gn.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/modp_b64/BUILD.gn
+@@ -2,10 +2,16 @@
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
++import("//build/config/host_byteorder.gni")
++
+ static_library("modp_b64") {
+ sources = [
+ "modp_b64.cc",
+ "modp_b64.h",
+ "modp_b64_data.h",
+ ]
++
++ if (host_byteorder == "big") {
++ defines = [ "WORDS_BIGENDIAN=1" ]
++ }
+ }
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_modp__b64_modp__b64.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_modp__b64_modp__b64.cc
new file mode 100644
index 000000000000..1d2601c971f7
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_modp__b64_modp__b64.cc
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/third_party/modp_b64/modp_b64.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/modp_b64/modp_b64.cc
+@@ -118,7 +118,7 @@ size_t modp_b64_encode(char* dest, const char* str, si
+ }
+
+ #ifdef WORDS_BIGENDIAN /* BIG ENDIAN -- SUN / IBM / MOTOROLA */
+-int modp_b64_decode(char* dest, const char* src, int len)
++size_t modp_b64_decode(char* dest, const char* src, size_t len)
+ {
+ if (len == 0) return 0;
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__constants.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__constants.h
new file mode 100644
index 000000000000..9bac3fa0ee50
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__constants.h
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_constants.h.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_constants.h 2019-10-29 15:25:35.191867000 +0100
+@@ -13,7 +13,7 @@
+ namespace base {
+ #if defined(OS_WIN)
+ static constexpr size_t kPageAllocationGranularityShift = 16; // 64KB
+-#elif defined(_MIPS_ARCH_LOONGSON)
++#elif defined(_MIPS_ARCH_LOONGSON) || defined(ARCH_CPU_PPC64)
+ static constexpr size_t kPageAllocationGranularityShift = 14; // 16KB
+ #else
+ static constexpr size_t kPageAllocationGranularityShift = 12; // 4KB
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_base_utils.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_base_utils.h
new file mode 100644
index 000000000000..4d5fa0f9d435
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_base_utils.h
@@ -0,0 +1,19 @@
+--- src/3rdparty/chromium/third_party/perfetto/include/perfetto/base/utils.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/perfetto/include/perfetto/base/utils.h
+@@ -22,6 +22,7 @@
+ #include <errno.h>
+ #include <stddef.h>
+ #include <stdlib.h>
++#include <type_traits>
+ #if !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN)
+ #include <sys/types.h>
+ #endif
+@@ -91,7 +92,7 @@ struct FreeDeleter {
+
+ template <typename T>
+ constexpr T AssumeLittleEndian(T value) {
+- static_assert(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__,
++ static_assert(std::is_same<T,T>::value && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__,
+ "Unimplemented on big-endian archs");
+ return value;
+ }
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_protozero_message.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_protozero_message.h
new file mode 100644
index 000000000000..49e7582ad3de
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_protozero_message.h
@@ -0,0 +1,16 @@
+--- src/3rdparty/chromium/third_party/perfetto/include/perfetto/protozero/message.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/perfetto/include/perfetto/protozero/message.h
+@@ -138,6 +138,13 @@ class PERFETTO_EXPORT Message {
+
+ pos = proto_utils::WriteVarInt(proto_utils::MakeTagFixed<T>(field_id), pos);
+ memcpy(pos, &value, sizeof(T));
++#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
++ for (size_t i = sizeof(T)/2; i--; ) {
++ uint8_t tmp = pos[i];
++ pos[i] = pos[sizeof(T)-1-i];
++ pos[sizeof(T)-1-i] = tmp;
++ }
++#endif
+ pos += sizeof(T);
+ // TODO: Optimize memcpy performance, see http://crbug.com/624311 .
+ WriteToStream(buffer, pos);
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_src_protozero_message.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_src_protozero_message.cc
new file mode 100644
index 000000000000..46ab0ea05361
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_src_protozero_message.cc
@@ -0,0 +1,15 @@
+--- src/3rdparty/chromium/third_party/perfetto/src/protozero/message.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/perfetto/src/protozero/message.cc
+@@ -21,12 +21,6 @@
+ #include "perfetto/base/logging.h"
+ #include "perfetto/protozero/message_handle.h"
+
+-#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
+-// The memcpy() for float and double below needs to be adjusted if we want to
+-// support big endian CPUs. There doesn't seem to be a compelling need today.
+-#error Unimplemented for big endian archs.
+-#endif
+-
+ namespace protozero {
+
+ // static
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_src_protozero_proto__decoder.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_src_protozero_proto__decoder.cc
new file mode 100644
index 000000000000..5fba8a56f8e4
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_src_protozero_proto__decoder.cc
@@ -0,0 +1,12 @@
+--- src/3rdparty/chromium/third_party/perfetto/src/protozero/proto_decoder.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/perfetto/src/protozero/proto_decoder.cc
+@@ -29,7 +29,8 @@ using namespace proto_utils;
+ #define BYTE_SWAP_TO_LE32(x) (x)
+ #define BYTE_SWAP_TO_LE64(x) (x)
+ #else
+-#error Unimplemented for big endian archs.
++#define BYTE_SWAP_TO_LE32(x) __builtin_bswap32(x)
++#define BYTE_SWAP_TO_LE64(x) __builtin_bswap64(x)
+ #endif
+
+ ProtoDecoder::Field ProtoDecoder::ReadField() {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_include_core_SkPostConfig.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_include_core_SkPostConfig.h
new file mode 100644
index 000000000000..138bfb91eb46
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_include_core_SkPostConfig.h
@@ -0,0 +1,15 @@
+--- src/3rdparty/chromium/third_party/skia/include/core/SkPostConfig.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/include/core/SkPostConfig.h
+@@ -40,12 +40,6 @@
+ # error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN"
+ #endif
+
+-#if defined(SK_CPU_BENDIAN) && !defined(I_ACKNOWLEDGE_SKIA_DOES_NOT_SUPPORT_BIG_ENDIAN)
+- #error "The Skia team is not endian-savvy enough to support big-endian CPUs."
+- #error "If you still want to use Skia,"
+- #error "please define I_ACKNOWLEDGE_SKIA_DOES_NOT_SUPPORT_BIG_ENDIAN."
+-#endif
+-
+ /**
+ * Ensure the port has defined all of SK_X32_SHIFT, or none of them.
+ */
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_include_private_GrTypesPriv.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_include_private_GrTypesPriv.h
new file mode 100644
index 000000000000..c2130cc00f7e
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_include_private_GrTypesPriv.h
@@ -0,0 +1,12 @@
+--- src/3rdparty/chromium/third_party/skia/include/private/GrTypesPriv.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/include/private/GrTypesPriv.h
+@@ -65,9 +65,6 @@ enum GrPixelConfig {
+ static const int kGrPixelConfigCnt = kLast_GrPixelConfig + 1;
+
+ // Aliases for pixel configs that match skia's byte order.
+-#ifndef SK_CPU_LENDIAN
+-#error "Skia gpu currently assumes little endian"
+-#endif
+ #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
+ static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig;
+ #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_codec_SkCodecPriv.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_codec_SkCodecPriv.h
new file mode 100644
index 000000000000..046b4f369c01
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_codec_SkCodecPriv.h
@@ -0,0 +1,10 @@
+--- src/3rdparty/chromium/third_party/skia/src/codec/SkCodecPriv.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/src/codec/SkCodecPriv.h
+@@ -14,6 +14,7 @@
+ #include "SkEncodedOrigin.h"
+ #include "SkImageInfo.h"
+ #include "SkTypes.h"
++#include "SkEndian.h"
+
+ #ifdef SK_PRINT_CODEC_MESSAGES
+ #define SkCodecPrintf SkDebugf
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkColor.cpp b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkColor.cpp
new file mode 100644
index 000000000000..abfb089a8284
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkColor.cpp
@@ -0,0 +1,34 @@
+--- src/3rdparty/chromium/third_party/skia/src/core/SkColor.cpp.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/src/core/SkColor.cpp
+@@ -108,13 +108,29 @@ SkColor SkHSVToColor(U8CPU a, const SkScalar hsv[3]) {
+ template <>
+ SkColor4f SkColor4f::FromColor(SkColor bgra) {
+ SkColor4f rgba;
+- swizzle_rb(Sk4f_fromL32(bgra)).store(rgba.vec());
++ Sk4f c4f = Sk4f_fromL32(bgra);
++#ifdef SK_CPU_BENDIAN
++ // ARGB -> RGBA
++ c4f = SkNx_shuffle<1, 2, 3, 0>(c4f);
++#else
++ // BGRA -> RGBA
++ c4f = swizzle_rb(c4f);
++#endif
++ c4f.store(rgba.vec());
+ return rgba;
+ }
+
+ template <>
+ SkColor SkColor4f::toSkColor() const {
+- return Sk4f_toL32(swizzle_rb(Sk4f::Load(this->vec())));
++ Sk4f c4f = Sk4f::Load(this->vec());
++#ifdef SK_CPU_BENDIAN
++ // RGBA -> ARGB
++ c4f = SkNx_shuffle<3, 0, 1, 2>(c4f);
++#else
++ // RGBA -> BGRA
++ c4f = swizzle_rb(c4f);
++#endif
++ return Sk4f_toL32(c4f);
+ }
+
+ template <>
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkPixmap.cpp b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkPixmap.cpp
new file mode 100644
index 000000000000..005954625949
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_core_SkPixmap.cpp
@@ -0,0 +1,12 @@
+--- src/3rdparty/chromium/third_party/skia/src/core/SkPixmap.cpp.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/src/core/SkPixmap.cpp
+@@ -246,7 +246,8 @@ SkColor SkPixmap::getColor(int x, int y) const {
+ const bool needsUnpremul = (kPremul_SkAlphaType == fInfo.alphaType());
+ auto toColor = [needsUnpremul](uint32_t maybePremulColor) {
+ return needsUnpremul ? SkUnPreMultiply::PMColorToColor(maybePremulColor)
+- : SkSwizzle_BGRA_to_PMColor(maybePremulColor);
++ : SkColorSetARGB(SkGetPackedA32(maybePremulColor), SkGetPackedR32(maybePremulColor),
++ SkGetPackedG32(maybePremulColor), SkGetPackedB32(maybePremulColor));
+ };
+
+ switch (this->colorType()) {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_Sk4px__none.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_Sk4px__none.h
new file mode 100644
index 000000000000..9c63d6b9eefb
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_Sk4px__none.h
@@ -0,0 +1,10 @@
+--- src/3rdparty/chromium/third_party/skia/src/opts/Sk4px_none.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/src/opts/Sk4px_none.h
+@@ -35,7 +35,6 @@ inline Sk4px Sk4px::Wide::div255() const {
+ }
+
+ inline Sk4px Sk4px::alphas() const {
+- static_assert(SK_A32_SHIFT == 24, "This method assumes little-endian.");
+ return Sk16b((*this)[ 3], (*this)[ 3], (*this)[ 3], (*this)[ 3],
+ (*this)[ 7], (*this)[ 7], (*this)[ 7], (*this)[ 7],
+ (*this)[11], (*this)[11], (*this)[11], (*this)[11],
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkBlitRow__opts.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkBlitRow__opts.h
new file mode 100644
index 000000000000..ba2b67475c31
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkBlitRow__opts.h
@@ -0,0 +1,13 @@
+--- src/3rdparty/chromium/third_party/skia/src/opts/SkBlitRow_opts.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/src/opts/SkBlitRow_opts.h
+@@ -237,8 +237,8 @@ void blit_row_s32a_opaque(SkPMColor* dst, const SkPMCo
+ // with chromium:611002 we need to keep it until we figure out where
+ // the non-premultiplied src values (like 0x00FFFFFF) are coming from.
+ // TODO(mtklein): sort this out and assert *src is premul here.
+- if (*src & 0xFF000000) {
+- *dst = (*src >= 0xFF000000) ? *src : SkPMSrcOver(*src, *dst);
++ if (*src & (0xFF << SK_A32_SHIFT)) {
++ *dst = ((*src << (24 - SK_A32_SHIFT)) >= 0xFF000000) ? *src : SkPMSrcOver(*src, *dst);
+ }
+ src++;
+ dst++;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkRasterPipeline__opts.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkRasterPipeline__opts.h
index be330d360408..ad6b3b0fe9a1 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkRasterPipeline__opts.h
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_opts_SkRasterPipeline__opts.h
@@ -1,4 +1,4 @@
---- src/3rdparty/chromium/third_party/skia/src/opts/SkRasterPipeline_opts.h.orig 2019-05-23 12:39:34 UTC
+--- src/3rdparty/chromium/third_party/skia/src/opts/SkRasterPipeline_opts.h.orig 2019-10-27 17:19:53 UTC
+++ src/3rdparty/chromium/third_party/skia/src/opts/SkRasterPipeline_opts.h
@@ -729,7 +729,10 @@ SI F approx_powf(F x, F y) {
}
@@ -24,3 +24,107 @@
__fp16 fp16 = __fp16(f);
U16 u16;
memcpy(&u16, &fp16, sizeof(U16));
+@@ -954,10 +954,17 @@ SI void from_4444(U16 _4444, F* r, F* g, F* b, F* a) {
+ *a = cast(wide & (15<< 0)) * (1.0f / (15<< 0));
+ }
+ SI void from_8888(U32 _8888, F* r, F* g, F* b, F* a) {
++#ifdef SK_CPU_BENDIAN
++ *r = cast((_8888 >> 24) ) * (1/255.0f);
++ *g = cast((_8888 >> 16) & 0xff) * (1/255.0f);
++ *b = cast((_8888 >> 8) & 0xff) * (1/255.0f);
++ *a = cast((_8888 ) & 0xff) * (1/255.0f);
++#else
+ *r = cast((_8888 ) & 0xff) * (1/255.0f);
+ *g = cast((_8888 >> 8) & 0xff) * (1/255.0f);
+ *b = cast((_8888 >> 16) & 0xff) * (1/255.0f);
+ *a = cast((_8888 >> 24) ) * (1/255.0f);
++#endif
+ }
+ SI void from_1010102(U32 rgba, F* r, F* g, F* b, F* a) {
+ *r = cast((rgba ) & 0x3ff) * (1/1023.0f);
+@@ -1284,10 +1291,17 @@ STAGE(srcover_rgba_8888, const SkRasterPipeline_Memory
+ auto ptr = ptr_at_xy<uint32_t>(ctx, dx,dy);
+
+ U32 dst = load<U32>(ptr, tail);
++#ifdef SK_CPU_BENDIAN
++ dr = cast((dst >> 24) );
++ dg = cast((dst >> 16) & 0xff);
++ db = cast((dst >> 8) & 0xff);
++ da = cast((dst ) & 0xff);
++#else
+ dr = cast((dst ) & 0xff);
+ dg = cast((dst >> 8) & 0xff);
+ db = cast((dst >> 16) & 0xff);
+ da = cast((dst >> 24) );
++#endif
+ // {dr,dg,db,da} are in [0,255]
+ // { r, g, b, a} are in [0, 1] (but may be out of gamut)
+
+@@ -1298,10 +1312,17 @@ STAGE(srcover_rgba_8888, const SkRasterPipeline_Memory
+ // { r, g, b, a} are now in [0,255] (but may be out of gamut)
+
+ // to_unorm() clamps back to gamut. Scaling by 1 since we're already 255-biased.
++#ifdef SK_CPU_BENDIAN
++ dst = to_unorm(r, 1, 255) << 24
++ | to_unorm(g, 1, 255) << 16
++ | to_unorm(b, 1, 255) << 8
++ | to_unorm(a, 1, 255);
++#else
+ dst = to_unorm(r, 1, 255)
+ | to_unorm(g, 1, 255) << 8
+ | to_unorm(b, 1, 255) << 16
+ | to_unorm(a, 1, 255) << 24;
++#endif
+ store(ptr, dst, tail);
+ }
+
+@@ -1700,10 +1721,17 @@ STAGE(gather_8888, const SkRasterPipeline_GatherCtx* c
+ STAGE(store_8888, const SkRasterPipeline_MemoryCtx* ctx) {
+ auto ptr = ptr_at_xy<uint32_t>(ctx, dx,dy);
+
++#ifdef SK_CPU_BENDIAN
++ U32 px = to_unorm(r, 255) << 24
++ | to_unorm(g, 255) << 16
++ | to_unorm(b, 255) << 8
++ | to_unorm(a, 255);
++#else
+ U32 px = to_unorm(r, 255)
+ | to_unorm(g, 255) << 8
+ | to_unorm(b, 255) << 16
+ | to_unorm(a, 255) << 24;
++#endif
+ store(ptr, px, tail);
+ }
+
+@@ -2858,10 +2886,17 @@ SI void from_8888(U32 rgba, U16* r, U16* g, U16* b, U1
+ return cast<U16>(v);
+ };
+ #endif
++#ifdef SK_CPU_BENDIAN
++ *r = cast_U16(rgba >> 16) >> 8;
++ *g = cast_U16(rgba >> 16) & 255;
++ *b = cast_U16(rgba & 65535) >> 8;
++ *a = cast_U16(rgba & 65535) & 255;
++#else
+ *r = cast_U16(rgba & 65535) & 255;
+ *g = cast_U16(rgba & 65535) >> 8;
+ *b = cast_U16(rgba >> 16) & 255;
+ *a = cast_U16(rgba >> 16) >> 8;
++#endif
+ }
+
+ SI void load_8888_(const uint32_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16* a) {
+@@ -2904,8 +2939,13 @@ SI void store_8888_(uint32_t* ptr, size_t tail, U16 r,
+ case 1: vst4_lane_u8((uint8_t*)(ptr+0), rgba, 0);
+ }
+ #else
++#ifdef SK_CPU_BENDIAN
++ store(ptr, tail, cast<U32>((r<<8) | g) << 16
++ | cast<U32>((b<<8) | a) << 0);
++#else
+ store(ptr, tail, cast<U32>(r | (g<<8)) << 0
+ | cast<U32>(b | (a<<8)) << 16);
++#endif
+ #endif
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_utils_SkJSON.cpp b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_utils_SkJSON.cpp
new file mode 100644
index 000000000000..e0d39a87e955
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_utils_SkJSON.cpp
@@ -0,0 +1,22 @@
+--- src/3rdparty/chromium/third_party/skia/src/utils/SkJSON.cpp.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/src/utils/SkJSON.cpp
+@@ -34,6 +34,10 @@ void Value::init_tagged(Tag t) {
+
+ // Pointer values store a type (in the upper kTagBits bits) and a pointer.
+ void Value::init_tagged_pointer(Tag t, void* p) {
++#if !defined(SK_CPU_LENDIAN)
++ // Check that kRecAlign is large enough to leave room for the tag
++ static_assert(sizeof(Value) > sizeof(uintptr_t) || !(kRecAlign & Value::kTagMask), "kRecAlign is not a multiple of kTagMask+1");
++#endif
+ *this->cast<uintptr_t>() = reinterpret_cast<uintptr_t>(p);
+
+ if (sizeof(Value) == sizeof(uintptr_t)) {
+@@ -169,7 +173,7 @@ class FastString final : public Value { (private)
+ #if defined(SK_CPU_LENDIAN)
+ *s64 &= 0x00ffffffffffffffULL >> ((kMaxInlineStringSize - size) * 8);
+ #else
+- static_assert(false, "Big-endian builds are not supported at this time.");
++ *s64 &= 0xffffffffffffff00ULL << ((kMaxInlineStringSize - size) * 8);
+ #endif
+ }
+ };
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_utils_SkJSON.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_utils_SkJSON.h
new file mode 100644
index 000000000000..d62d0ba00970
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_src_utils_SkJSON.h
@@ -0,0 +1,51 @@
+--- src/3rdparty/chromium/third_party/skia/src/utils/SkJSON.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/src/utils/SkJSON.h
+@@ -120,6 +120,7 @@ class alignas(8) Value { (protected)
+ -- highest 3 bits reserved for type storage
+
+ */
++#if defined(SK_CPU_LENDIAN)
+ enum class Tag : uint8_t {
+ // We picked kShortString == 0 so that tag 0x00 and stored max_size-size (7-7=0)
+ // conveniently overlap the '\0' terminator, allowing us to store a 7 character
+@@ -134,6 +135,22 @@ class alignas(8) Value { (protected)
+ kObject = 0b11100000, // ptr to external storage
+ };
+ static constexpr uint8_t kTagMask = 0b11100000;
++#else
++ enum class Tag : uint8_t {
++ // We picked kShortString == 0 so that tag 0x00 and stored max_size-size (7-7=0)
++ // conveniently overlap the '\0' terminator, allowing us to store a 7 character
++ // C string inline.
++ kShortString = 0b00000000, // inline payload
++ kNull = 0b00000001, // no payload
++ kBool = 0b00000010, // inline payload
++ kInt = 0b00000011, // inline payload
++ kFloat = 0b00000100, // inline payload
++ kString = 0b00000101, // ptr to external storage
++ kArray = 0b00000110, // ptr to external storage
++ kObject = 0b00000111, // ptr to external storage
++ };
++ static constexpr uint8_t kTagMask = 0b00000111;
++#endif
+
+ void init_tagged(Tag);
+ void init_tagged_pointer(Tag, void*);
+@@ -192,14 +209,14 @@ class alignas(8) Value { (protected)
+
+ uint8_t fData8[kValueSize];
+
+-#if defined(SK_CPU_LENDIAN)
+ static constexpr size_t kTagOffset = kValueSize - 1;
+
++#if defined(SK_CPU_LENDIAN)
+ static constexpr uintptr_t kTagPointerMask =
+ ~(static_cast<uintptr_t>(kTagMask) << ((sizeof(uintptr_t) - 1) * 8));
+ #else
+- // The current value layout assumes LE and will take some tweaking for BE.
+- static_assert(false, "Big-endian builds are not supported at this time.");
++ static constexpr uintptr_t kTagPointerMask =
++ ~static_cast<uintptr_t>(kTagMask);
+ #endif
+ };
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_third__party_skcms_skcms.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_third__party_skcms_skcms.cc
new file mode 100644
index 000000000000..1c57164b6547
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_third__party_skcms_skcms.cc
@@ -0,0 +1,47 @@
+--- src/3rdparty/chromium/third_party/skia/third_party/skcms/skcms.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/third_party/skcms/skcms.cc
+@@ -66,10 +66,15 @@ static float eval_curve(const skcms_Curve* curve, floa
+ uint16_t be_l, be_h;
+ memcpy(&be_l, curve->table_16 + 2*lo, 2);
+ memcpy(&be_h, curve->table_16 + 2*hi, 2);
++#if __BIG_ENDIAN__
++ l = be_l * (1/65535.0f);
++ h = be_h * (1/65535.0f);
++#else
+ uint16_t le_l = ((be_l << 8) | (be_l >> 8)) & 0xffff;
+ uint16_t le_h = ((be_h << 8) | (be_h >> 8)) & 0xffff;
+ l = le_l * (1/65535.0f);
+ h = le_h * (1/65535.0f);
++#endif
+ }
+ return l + (h-l)*t;
+ }
+@@ -124,20 +129,28 @@ enum {
+ static uint16_t read_big_u16(const uint8_t* ptr) {
+ uint16_t be;
+ memcpy(&be, ptr, sizeof(be));
++#if __BIG_ENDIAN__
++ return be;
++#else
+ #if defined(_MSC_VER)
+ return _byteswap_ushort(be);
+ #else
+ return __builtin_bswap16(be);
+ #endif
++#endif
+ }
+
+ static uint32_t read_big_u32(const uint8_t* ptr) {
+ uint32_t be;
+ memcpy(&be, ptr, sizeof(be));
++#if __BIG_ENDIAN__
++ return be;
++#else
+ #if defined(_MSC_VER)
+ return _byteswap_ulong(be);
+ #else
+ return __builtin_bswap32(be);
++#endif
+ #endif
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_third__party_skcms_src_Transform__inl.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_third__party_skcms_src_Transform__inl.h
new file mode 100644
index 000000000000..f9cd93b7b83b
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_skia_third__party_skcms_src_Transform__inl.h
@@ -0,0 +1,400 @@
+--- src/3rdparty/chromium/third_party/skia/third_party/skcms/src/Transform_inl.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/skia/third_party/skcms/src/Transform_inl.h
+@@ -392,9 +392,11 @@ SI U32 gather_32(const uint8_t* p, I32 ix) {
+ }
+
+ SI U32 gather_24(const uint8_t* p, I32 ix) {
++#if !__BIG_ENDIAN__
+ // First, back up a byte. Any place we're gathering from has a safe junk byte to read
+ // in front of it, either a previous table value, or some tag metadata.
+ p -= 1;
++#endif
+
+ // Load the i'th 24-bit value from p, and 1 extra byte.
+ auto load_24_32 = [p](int i) {
+@@ -435,8 +437,10 @@ SI U32 gather_24(const uint8_t* p, I32 ix) {
+
+ #if !defined(__arm__)
+ SI void gather_48(const uint8_t* p, I32 ix, U64* v) {
++#if !__BIG_ENDIAN__
+ // As in gather_24(), with everything doubled.
+ p -= 2;
++#endif
+
+ // Load the i'th 48-bit value from p, and 2 extra bytes.
+ auto load_48_64 = [p](int i) {
+@@ -499,7 +503,9 @@ SI F F_from_U8(U8 v) {
+ SI F F_from_U16_BE(U16 v) {
+ // All 16-bit ICC values are big-endian, so we byte swap before converting to float.
+ // MSVC catches the "loss" of data here in the portable path, so we also make sure to mask.
++#if !__BIG_ENDIAN__
+ v = U16( 0 | ((v & 0x00ff) << 8) | ((v & 0xff00) >> 8) );
++#endif
+ return cast<F>(v) * (1/65535.0f);
+ }
+
+@@ -534,9 +540,15 @@ SI F table(const skcms_Curve* curve, F v) {
+ SI void sample_clut_8(const skcms_A2B* a2b, I32 ix, F* r, F* g, F* b) {
+ U32 rgb = gather_24(a2b->grid_8, ix);
+
++#if __BIG_ENDIAN__
++ *r = cast<F>((rgb >> 16) & 0xff) * (1/255.0f);
++ *g = cast<F>((rgb >> 8) & 0xff) * (1/255.0f);
++ *b = cast<F>((rgb >> 0) & 0xff) * (1/255.0f);
++#else
+ *r = cast<F>((rgb >> 0) & 0xff) * (1/255.0f);
+ *g = cast<F>((rgb >> 8) & 0xff) * (1/255.0f);
+ *b = cast<F>((rgb >> 16) & 0xff) * (1/255.0f);
++#endif
+ }
+
+ SI void sample_clut_16(const skcms_A2B* a2b, I32 ix, F* r, F* g, F* b) {
+@@ -549,12 +561,18 @@ SI void sample_clut_16(const skcms_A2B* a2b, I32 ix, F
+ // This strategy is much faster for 64-bit builds, and fine for 32-bit x86 too.
+ U64 rgb;
+ gather_48(a2b->grid_16, ix, &rgb);
++#if __BIG_ENDIAN__
++ *r = cast<F>((rgb >> 32) & 0xffff) * (1/65535.0f);
++ *g = cast<F>((rgb >> 16) & 0xffff) * (1/65535.0f);
++ *b = cast<F>((rgb >> 0) & 0xffff) * (1/65535.0f);
++#else
+ rgb = swap_endian_16x4(rgb);
+
+ *r = cast<F>((rgb >> 0) & 0xffff) * (1/65535.0f);
+ *g = cast<F>((rgb >> 16) & 0xffff) * (1/65535.0f);
+ *b = cast<F>((rgb >> 32) & 0xffff) * (1/65535.0f);
+ #endif
++#endif
+ }
+
+ // GCC 7.2.0 hits an internal compiler error with -finline-functions (or -O3)
+@@ -695,10 +713,17 @@ static void exec_ops(const Op* ops, const void** args,
+ case Op_load_8888:{
+ U32 rgba = load<U32>(src + 4*i);
+
++#if __BIG_ENDIAN__
++ r = cast<F>((rgba >> 24) & 0xff) * (1/255.0f);
++ g = cast<F>((rgba >> 16) & 0xff) * (1/255.0f);
++ b = cast<F>((rgba >> 8) & 0xff) * (1/255.0f);
++ a = cast<F>((rgba >> 0) & 0xff) * (1/255.0f);
++#else
+ r = cast<F>((rgba >> 0) & 0xff) * (1/255.0f);
+ g = cast<F>((rgba >> 8) & 0xff) * (1/255.0f);
+ b = cast<F>((rgba >> 16) & 0xff) * (1/255.0f);
+ a = cast<F>((rgba >> 24) & 0xff) * (1/255.0f);
++#endif
+ } break;
+
+ case Op_load_8888_palette8:{
+@@ -727,13 +752,29 @@ static void exec_ops(const Op* ops, const void** args,
+ const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = vld3_u16(rgb);
++#if __BIG_ENDIAN__
++ r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
++ g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
++ b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
++#else
+ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
+ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
+ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
++#endif
+ #else
++#if __BIG_ENDIAN__
++ U32 R = load_3<U32>(rgb+0),
++ G = load_3<U32>(rgb+1),
++ B = load_3<U32>(rgb+2);
++ // R,G,B are little-endian 16-bit, so byte swap them before converting to float.
++ r = cast<F>((R & 0x00ff)<<8 | (R & 0xff00)>>8) * (1/65535.0f);
++ g = cast<F>((G & 0x00ff)<<8 | (G & 0xff00)>>8) * (1/65535.0f);
++ b = cast<F>((B & 0x00ff)<<8 | (B & 0xff00)>>8) * (1/65535.0f);
++#else
+ r = cast<F>(load_3<U32>(rgb+0)) * (1/65535.0f);
+ g = cast<F>(load_3<U32>(rgb+1)) * (1/65535.0f);
+ b = cast<F>(load_3<U32>(rgb+2)) * (1/65535.0f);
++#endif
+ #endif
+ } break;
+
+@@ -743,17 +784,33 @@ static void exec_ops(const Op* ops, const void** args,
+ const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = vld4_u16(rgba);
++#if __BIG_ENDIAN__
++ r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
++ g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
++ b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
++ a = cast<F>(swap_endian_16((U16)v.val[3])) * (1/65535.0f);
++#else
+ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
+ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
+ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
+ a = cast<F>((U16)v.val[3]) * (1/65535.0f);
++#endif
+ #else
++#if __BIG_ENDIAN__
++ U64 px = swap_endian_16x4(load<U64>(rgba));
++
++ r = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
++ g = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
++ b = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
++ a = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
++#else
+ U64 px = load<U64>(rgba);
+
+ r = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
+ g = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
+ b = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
+ a = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
++#endif
+ #endif
+ } break;
+
+@@ -763,10 +820,21 @@ static void exec_ops(const Op* ops, const void** args,
+ const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = vld3_u16(rgb);
++#if __BIG_ENDIAN__
++ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
++ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
++ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
++#else
+ r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
+ g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
+ b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
++#endif
+ #else
++#if __BIG_ENDIAN__
++ r = cast<F>(load_3<U32>(rgb+0)) * (1/65535.0f);
++ g = cast<F>(load_3<U32>(rgb+1)) * (1/65535.0f);
++ b = cast<F>(load_3<U32>(rgb+2)) * (1/65535.0f);
++#else
+ U32 R = load_3<U32>(rgb+0),
+ G = load_3<U32>(rgb+1),
+ B = load_3<U32>(rgb+2);
+@@ -774,6 +842,7 @@ static void exec_ops(const Op* ops, const void** args,
+ r = cast<F>((R & 0x00ff)<<8 | (R & 0xff00)>>8) * (1/65535.0f);
+ g = cast<F>((G & 0x00ff)<<8 | (G & 0xff00)>>8) * (1/65535.0f);
+ b = cast<F>((B & 0x00ff)<<8 | (B & 0xff00)>>8) * (1/65535.0f);
++#endif
+ #endif
+ } break;
+
+@@ -783,17 +852,33 @@ static void exec_ops(const Op* ops, const void** args,
+ const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = vld4_u16(rgba);
++#if __BIG_ENDIAN__
++ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
++ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
++ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
++ a = cast<F>((U16)v.val[3]) * (1/65535.0f);
++#else
+ r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
+ g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
+ b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
+ a = cast<F>(swap_endian_16((U16)v.val[3])) * (1/65535.0f);
++#endif
+ #else
++#if __BIG_ENDIAN__
++ U64 px = load<U64>(rgba);
++
++ r = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
++ g = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
++ b = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
++ a = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
++#else
+ U64 px = swap_endian_16x4(load<U64>(rgba));
+
+ r = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
+ g = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
+ b = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
+ a = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
++#endif
+ #endif
+ } break;
+
+@@ -828,10 +913,17 @@ static void exec_ops(const Op* ops, const void** args,
+ A = (U16)v.val[3];
+ #else
+ U64 px = load<U64>(rgba);
++#if __BIG_ENDIAN__
++ U16 R = cast<U16>((px >> 48) & 0xffff),
++ G = cast<U16>((px >> 32) & 0xffff),
++ B = cast<U16>((px >> 16) & 0xffff),
++ A = cast<U16>((px >> 0) & 0xffff);
++#else
+ U16 R = cast<U16>((px >> 0) & 0xffff),
+ G = cast<U16>((px >> 16) & 0xffff),
+ B = cast<U16>((px >> 32) & 0xffff),
+ A = cast<U16>((px >> 48) & 0xffff);
++#endif
+ #endif
+ r = F_from_Half(R);
+ g = F_from_Half(G);
+@@ -1024,10 +1116,17 @@ static void exec_ops(const Op* ops, const void** args,
+ } return;
+
+ case Op_store_8888: {
++#if __BIG_ENDIAN__
++ store(dst + 4*i, cast<U32>(to_fixed(r * 255) << 24)
++ | cast<U32>(to_fixed(g * 255) << 16)
++ | cast<U32>(to_fixed(b * 255) << 8)
++ | cast<U32>(to_fixed(a * 255) << 0));
++#else
+ store(dst + 4*i, cast<U32>(to_fixed(r * 255) << 0)
+ | cast<U32>(to_fixed(g * 255) << 8)
+ | cast<U32>(to_fixed(b * 255) << 16)
+ | cast<U32>(to_fixed(a * 255) << 24));
++#endif
+ } return;
+
+ case Op_store_1010102: {
+@@ -1043,15 +1142,30 @@ static void exec_ops(const Op* ops, const void** args,
+ uint16_t* rgb = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = {{
++#if __BIG_ENDIAN__
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(r * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(g * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(b * 65535))),
++#else
+ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
++#endif
+ }};
+ vst3_u16(rgb, v);
+ #else
++#if __BIG_ENDIAN__
++ I32 R = to_fixed(r * 65535),
++ G = to_fixed(g * 65535),
++ B = to_fixed(b * 65535);
++ store_3(rgb+0, cast<U16>((R & 0x00ff) << 8 | (R & 0xff00) >> 8) );
++ store_3(rgb+1, cast<U16>((G & 0x00ff) << 8 | (G & 0xff00) >> 8) );
++ store_3(rgb+2, cast<U16>((B & 0x00ff) << 8 | (B & 0xff00) >> 8) );
++#else
+ store_3(rgb+0, cast<U16>(to_fixed(r * 65535)));
+ store_3(rgb+1, cast<U16>(to_fixed(g * 65535)));
+ store_3(rgb+2, cast<U16>(to_fixed(b * 65535)));
++#endif
+ #endif
+
+ } return;
+@@ -1062,18 +1176,33 @@ static void exec_ops(const Op* ops, const void** args,
+ uint16_t* rgba = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = {{
++#if __BIG_ENDIAN__
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(r * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(g * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(b * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(a * 65535))),
++#else
+ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(a * 65535)),
++#endif
+ }};
+ vst4_u16(rgba, v);
+ #else
++#if __BIG_ENDIAN__
++ U64 px = cast<U64>(to_fixed(r * 65535)) << 48
++ | cast<U64>(to_fixed(g * 65535)) << 32
++ | cast<U64>(to_fixed(b * 65535)) << 16
++ | cast<U64>(to_fixed(a * 65535)) << 0;
++ store(rgba, swap_endian_16x4(px));
++#else
+ U64 px = cast<U64>(to_fixed(r * 65535)) << 0
+ | cast<U64>(to_fixed(g * 65535)) << 16
+ | cast<U64>(to_fixed(b * 65535)) << 32
+ | cast<U64>(to_fixed(a * 65535)) << 48;
+ store(rgba, px);
++#endif
+ #endif
+ } return;
+
+@@ -1083,18 +1212,30 @@ static void exec_ops(const Op* ops, const void** args,
+ uint16_t* rgb = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = {{
++#if __BIG_ENDIAN__
++ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
++#else
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(r * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(g * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(b * 65535))),
++#endif
+ }};
+ vst3_u16(rgb, v);
+ #else
++#if __BIG_ENDIAN__
++ store_3(rgb+0, cast<U16>(to_fixed(r * 65535)));
++ store_3(rgb+1, cast<U16>(to_fixed(g * 65535)));
++ store_3(rgb+2, cast<U16>(to_fixed(b * 65535)));
++#else
+ I32 R = to_fixed(r * 65535),
+ G = to_fixed(g * 65535),
+ B = to_fixed(b * 65535);
+ store_3(rgb+0, cast<U16>((R & 0x00ff) << 8 | (R & 0xff00) >> 8) );
+ store_3(rgb+1, cast<U16>((G & 0x00ff) << 8 | (G & 0xff00) >> 8) );
+ store_3(rgb+2, cast<U16>((B & 0x00ff) << 8 | (B & 0xff00) >> 8) );
++#endif
+ #endif
+
+ } return;
+@@ -1105,18 +1246,33 @@ static void exec_ops(const Op* ops, const void** args,
+ uint16_t* rgba = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = {{
++#if __BIG_ENDIAN__
++ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(a * 65535)),
++#else
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(r * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(g * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(b * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(a * 65535))),
++#endif
+ }};
+ vst4_u16(rgba, v);
+ #else
++#if __BIG_ENDIAN__
++ U64 px = cast<U64>(to_fixed(r * 65535)) << 48
++ | cast<U64>(to_fixed(g * 65535)) << 32
++ | cast<U64>(to_fixed(b * 65535)) << 16
++ | cast<U64>(to_fixed(a * 65535)) << 0;
++ store(rgba, px);
++#else
+ U64 px = cast<U64>(to_fixed(r * 65535)) << 0
+ | cast<U64>(to_fixed(g * 65535)) << 16
+ | cast<U64>(to_fixed(b * 65535)) << 32
+ | cast<U64>(to_fixed(a * 65535)) << 48;
+ store(rgba, swap_endian_16x4(px));
++#endif
+ #endif
+ } return;
+
+@@ -1160,10 +1316,17 @@ static void exec_ops(const Op* ops, const void** args,
+ }};
+ vst4_u16(rgba, v);
+ #else
++#if __BIG_ENDIAN__
++ store(rgba, cast<U64>(R) << 48
++ | cast<U64>(G) << 32
++ | cast<U64>(B) << 16
++ | cast<U64>(A) << 0);
++#else
+ store(rgba, cast<U64>(R) << 0
+ | cast<U64>(G) << 16
+ | cast<U64>(B) << 32
+ | cast<U64>(A) << 48);
++#endif
+ #endif
+
+ } return;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_smhasher_src_City.cpp b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_smhasher_src_City.cpp
new file mode 100644
index 000000000000..15384b7481c9
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_smhasher_src_City.cpp
@@ -0,0 +1,17 @@
+--- src/3rdparty/chromium/third_party/smhasher/src/City.cpp.orig 2019-10-27 22:10:58.672918000 +0100
++++ src/3rdparty/chromium/third_party/smhasher/src/City.cpp 2019-10-27 22:12:39.653255000 +0100
+@@ -65,11 +65,11 @@
+ #define bswap_64(x) OSSwapInt64(x)
+
+ #else
+-#include <byteswap.h>
++#include <sys/endian.h>
+ #endif
+
+-#define uint32_in_expected_order(x) (bswap_32(x))
+-#define uint64_in_expected_order(x) (bswap_64(x))
++#define uint32_in_expected_order(x) (bswap32(x))
++#define uint64_in_expected_order(x) (bswap64(x))
+
+ #endif // __BIG_ENDIAN__
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_common__audio_wav__file.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_common__audio_wav__file.cc
new file mode 100644
index 000000000000..2e12a68050c7
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_common__audio_wav__file.cc
@@ -0,0 +1,50 @@
+--- src/3rdparty/chromium/third_party/webrtc/common_audio/wav_file.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/webrtc/common_audio/wav_file.cc
+@@ -93,13 +93,15 @@ size_t WavReader::num_samples() const {
+ }
+
+ size_t WavReader::ReadSamples(size_t num_samples, int16_t* samples) {
+-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
+-#error "Need to convert samples to big-endian when reading from WAV file"
+-#endif
+ // There could be metadata after the audio; ensure we don't read it.
+ num_samples = std::min(num_samples, num_samples_remaining_);
+ const size_t read =
+ fread(samples, sizeof(*samples), num_samples, file_handle_);
++#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
++ for (size_t i = 0; i < read; i++) {
++ samples[i] = __builtin_bswap16(samples[i]);
++ }
++#endif
+ // If we didn't read what was requested, ensure we've reached the EOF.
+ RTC_CHECK(read == num_samples || feof(file_handle_));
+ RTC_CHECK_LE(read, num_samples_remaining_);
+@@ -178,13 +180,26 @@ size_t WavWriter::num_samples() const {
+
+ void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) {
+ #ifndef WEBRTC_ARCH_LITTLE_ENDIAN
+-#error "Need to convert samples to little-endian when writing to WAV file"
+-#endif
++ static const size_t kChunksize = 4096 / sizeof(uint16_t);
++ for (size_t i = 0; i < num_samples; i += kChunksize) {
++ int16_t isamples[kChunksize];
++ const size_t chunk = std::min(kChunksize, num_samples - i);
++ for (size_t j = 0; j < chunk; j++) {
++ isamples[j] = __builtin_bswap16(samples[i + j]);
++ }
++ const size_t written =
++ fwrite(isamples, sizeof(*isamples), chunk, file_handle_);
++ RTC_CHECK_EQ(chunk, written);
++ num_samples_ += written;
++ RTC_CHECK(num_samples_ >= written); // detect size_t overflow
++ }
++#else
+ const size_t written =
+ fwrite(samples, sizeof(*samples), num_samples, file_handle_);
+ RTC_CHECK_EQ(num_samples, written);
+ num_samples_ += written;
+ RTC_CHECK(num_samples_ >= written); // detect size_t overflow
++#endif
+ }
+
+ void WavWriter::WriteSamples(const float* samples, size_t num_samples) {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_common__audio_wav__header.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_common__audio_wav__header.cc
new file mode 100644
index 000000000000..c6fe9d984805
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_common__audio_wav__header.cc
@@ -0,0 +1,30 @@
+--- src/3rdparty/chromium/third_party/webrtc/common_audio/wav_header.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/webrtc/common_audio/wav_header.cc
+@@ -86,7 +86,26 @@ static inline std::string ReadFourCC(uint32_t x) {
+ return std::string(reinterpret_cast<char*>(&x), 4);
+ }
+ #else
+-#error "Write be-to-le conversion functions"
++static inline void WriteLE16(uint16_t* f, uint16_t x) {
++ *f = __builtin_bswap16(x);
++}
++static inline void WriteLE32(uint32_t* f, uint32_t x) {
++ *f = __builtin_bswap32(x);
++}
++static inline void WriteFourCC(uint32_t* f, char a, char b, char c, char d) {
++ *f = static_cast<uint32_t>(d) | static_cast<uint32_t>(c) << 8 |
++ static_cast<uint32_t>(b) << 16 | static_cast<uint32_t>(a) << 24;
++}
++
++static inline uint16_t ReadLE16(uint16_t x) {
++ return __builtin_bswap16(x);
++}
++static inline uint32_t ReadLE32(uint32_t x) {
++ return __builtin_bswap32(x);
++}
++static inline std::string ReadFourCC(uint32_t x) {
++ return std::string(reinterpret_cast<char*>(&x), 4);
++}
+ #endif
+
+ static inline uint32_t RiffChunkSize(size_t bytes_in_payload) {
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_modules_desktop__capture_differ__block.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_modules_desktop__capture_differ__block.cc
new file mode 100644
index 000000000000..1a2bd61b2960
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_modules_desktop__capture_differ__block.cc
@@ -0,0 +1,26 @@
+--- src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/differ_block.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/differ_block.cc
+@@ -30,11 +30,7 @@ bool VectorDifference(const uint8_t* image1, const uin
+ static bool (*diff_proc)(const uint8_t*, const uint8_t*) = nullptr;
+
+ if (!diff_proc) {
+-#if defined(WEBRTC_ARCH_ARM_FAMILY) || defined(WEBRTC_ARCH_MIPS_FAMILY)
+- // For ARM and MIPS processors, always use C version.
+- // TODO(hclam): Implement a NEON version.
+- diff_proc = &VectorDifference_C;
+-#else
++#if defined(WEBRTC_ARCH_X86_FAMILY)
+ bool have_sse2 = WebRtc_GetCPUInfo(kSSE2) != 0;
+ // For x86 processors, check if SSE2 is supported.
+ if (have_sse2 && kBlockSize == 32) {
+@@ -44,6 +40,10 @@ bool VectorDifference(const uint8_t* image1, const uin
+ } else {
+ diff_proc = &VectorDifference_C;
+ }
++#else
++ // For other processors, always use C version.
++ // TODO(hclam): Implement a NEON version.
++ diff_proc = &VectorDifference_C;
+ #endif
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_rtc__base_system_arch.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_rtc__base_system_arch.h
new file mode 100644
index 000000000000..be0cd2964dbe
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_rtc__base_system_arch.h
@@ -0,0 +1,21 @@
+--- src/3rdparty/chromium/third_party/webrtc/rtc_base/system/arch.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/third_party/webrtc/rtc_base/system/arch.h
+@@ -47,6 +47,18 @@
+ #elif defined(__pnacl__)
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
++#elif defined(__PPC__)
++#define WEBRTC_ARCH_PPC_FAMILY
++#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
++#define WEBRTC_ARCH_LITTLE_ENDIAN
++#else
++#define WEBRTC_ARCH_BIG_ENDIAN
++#endif
++#if defined(__LP64__)
++#define WEBRTC_ARCH_64_BITS
++#else
++#define WEBRTC_ARCH_32_BITS
++#endif
+ #else
+ #error Please add support for your architecture in typedefs.h
+ #endif
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_aura_mus_os__exchange__data__provider__mus.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_aura_mus_os__exchange__data__provider__mus.cc
new file mode 100644
index 000000000000..6a4737713394
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_aura_mus_os__exchange__data__provider__mus.cc
@@ -0,0 +1,24 @@
+--- src/3rdparty/chromium/ui/aura/mus/os_exchange_data_provider_mus.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/ui/aura/mus/os_exchange_data_provider_mus.cc
+@@ -14,6 +14,7 @@
+ #include "base/strings/string_split.h"
+ #include "base/strings/string_util.h"
+ #include "base/strings/utf_string_conversions.h"
++#include "base/sys_byteorder.h"
+ #include "net/base/filename_util.h"
+ #include "ui/base/clipboard/clipboard_constants.h"
+ #include "ui/base/clipboard/clipboard_format_type.h"
+@@ -279,8 +280,13 @@ void OSExchangeDataProviderMus::SetHtml(const base::st
+ std::vector<unsigned char> bytes;
+ // Manually jam a UTF16 BOM into bytes because otherwise, other programs will
+ // assume UTF-8.
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ bytes.push_back(0xFF);
+ bytes.push_back(0xFE);
++#else
++ bytes.push_back(0xFE);
++ bytes.push_back(0xFF);
++#endif
+ AddString16ToVector(html, &bytes);
+ mime_data_[ui::kMimeTypeHTML] = bytes;
+ }
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_base_resource_data__pack.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_base_resource_data__pack.cc
new file mode 100644
index 000000000000..20bd289e8431
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_base_resource_data__pack.cc
@@ -0,0 +1,166 @@
+--- src/3rdparty/chromium/ui/base/resource/data_pack.cc.orig 2019-10-27 17:39:58 UTC
++++ src/3rdparty/chromium/ui/base/resource/data_pack.cc
+@@ -154,16 +154,42 @@ class ScopedFileWriter {
+ DISALLOW_COPY_AND_ASSIGN(ScopedFileWriter);
+ };
+
++static inline uint16_t byteswap(uint16_t v) { return __builtin_bswap16(v); }
++static inline uint32_t byteswap(uint32_t v) { return __builtin_bswap32(v); }
++
++template<class T> class byteswapped_t {
++private:
++ T value;
++public:
++ inline byteswapped_t(T v) : value(byteswap(v)) { }
++ inline T operator=(T v) { value = byteswap(v); return v; }
++ inline T operator+=(T v) { v += byteswap(value); value = byteswap(v); return v; }
++ inline operator T() const { return byteswap(value); }
++};
++
++#if !defined(ARCH_CPU_LITTLE_ENDIAN)
++
++typedef byteswapped_t<uint16_t> uint16le_t;
++typedef byteswapped_t<uint32_t> uint32le_t;
++
++#else
++
++typedef uint16_t uint16le_t;
++typedef uint32_t uint32le_t;
++
++#endif
++
+ } // namespace
+
+ namespace ui {
+
+ #pragma pack(push, 2)
+ struct DataPack::Entry {
+- uint16_t resource_id;
+- uint32_t file_offset;
++ uint16le_t resource_id;
++ uint32le_t file_offset;
+
+ static int CompareById(const void* void_key, const void* void_entry) {
++ // Key is host endian
+ uint16_t key = *reinterpret_cast<const uint16_t*>(void_key);
+ const Entry* entry = reinterpret_cast<const Entry*>(void_entry);
+ return key - entry->resource_id;
+@@ -171,10 +197,11 @@ struct DataPack::Entry {
+ };
+
+ struct DataPack::Alias {
+- uint16_t resource_id;
+- uint16_t entry_index;
++ uint16le_t resource_id;
++ uint16le_t entry_index;
+
+ static int CompareById(const void* void_key, const void* void_entry) {
++ // Key is host endian
+ uint16_t key = *reinterpret_cast<const uint16_t*>(void_key);
+ const Alias* entry = reinterpret_cast<const Alias*>(void_entry);
+ return key - entry->resource_id;
+@@ -284,7 +311,7 @@ bool DataPack::LoadImpl(std::unique_ptr<DataPack::Data
+ // Parse the version and check for truncated header.
+ uint32_t version = 0;
+ if (data_length > sizeof(version))
+- version = reinterpret_cast<const uint32_t*>(data)[0];
++ version = reinterpret_cast<const uint32le_t*>(data)[0];
+ size_t header_length =
+ version == kFileFormatV4 ? kHeaderLengthV4 : kHeaderLengthV5;
+ if (version == 0 || data_length < header_length) {
+@@ -295,14 +322,14 @@ bool DataPack::LoadImpl(std::unique_ptr<DataPack::Data
+
+ // Parse the header of the file.
+ if (version == kFileFormatV4) {
+- resource_count_ = reinterpret_cast<const uint32_t*>(data)[1];
++ resource_count_ = reinterpret_cast<const uint32le_t*>(data)[1];
+ alias_count_ = 0;
+ text_encoding_type_ = static_cast<TextEncodingType>(data[8]);
+ } else if (version == kFileFormatV5) {
+ // Version 5 added the alias table and changed the header format.
+ text_encoding_type_ = static_cast<TextEncodingType>(data[4]);
+- resource_count_ = reinterpret_cast<const uint16_t*>(data)[4];
+- alias_count_ = reinterpret_cast<const uint16_t*>(data)[5];
++ resource_count_ = reinterpret_cast<const uint16le_t*>(data)[4];
++ alias_count_ = reinterpret_cast<const uint16le_t*>(data)[5];
+ } else {
+ LOG(ERROR) << "Bad data pack version: got " << version << ", expected "
+ << kFileFormatV4 << " or " << kFileFormatV5;
+@@ -382,12 +382,6 @@ bool DataPack::HasResource(uint16_t resource_id) const {
+
+ bool DataPack::GetStringPiece(uint16_t resource_id,
+ base::StringPiece* data) const {
+- // It won't be hard to make this endian-agnostic, but it's not worth
+- // bothering to do right now.
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN)
+-#error "datapack assumes little endian"
+-#endif
+-
+ const Entry* target = LookupEntryById(resource_id);
+ if (!target)
+ return false;
+@@ -447,9 +480,6 @@ void DataPack::CheckForDuplicateResources(
+ bool DataPack::WritePack(const base::FilePath& path,
+ const std::map<uint16_t, base::StringPiece>& resources,
+ TextEncodingType text_encoding_type) {
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN)
+-#error "datapack assumes little endian"
+-#endif
+ if (text_encoding_type != UTF8 && text_encoding_type != UTF16 &&
+ text_encoding_type != BINARY) {
+ LOG(ERROR) << "Invalid text encoding type, got " << text_encoding_type
+@@ -467,7 +497,7 @@ bool DataPack::WritePack(const base::FilePath& path,
+ if (!file.valid())
+ return false;
+
+- uint32_t encoding = static_cast<uint32_t>(text_encoding_type);
++ uint32le_t encoding = static_cast<uint32le_t>(text_encoding_type);
+
+ // Build a list of final resource aliases, and an alias map at the same time.
+ std::vector<uint16_t> resource_ids;
+@@ -494,13 +524,14 @@ bool DataPack::WritePack(const base::FilePath& path,
+
+ // These values are guaranteed to fit in a uint16_t due to the earlier
+ // check of |resources_count|.
+- const uint16_t alias_count = static_cast<uint16_t>(aliases.size());
+- const uint16_t entry_count = static_cast<uint16_t>(resource_ids.size());
++ const uint16le_t alias_count = static_cast<uint16le_t>(aliases.size());
++ const uint16le_t entry_count = static_cast<uint16le_t>(resource_ids.size());
+ DCHECK_EQ(static_cast<size_t>(entry_count) + static_cast<size_t>(alias_count),
+ resources_count);
+
+- file.Write(&kFileFormatV5, sizeof(kFileFormatV5));
+- file.Write(&encoding, sizeof(uint32_t));
++ uint32le_t version = kFileFormatV5;
++ file.Write(&version, sizeof(version));
++ file.Write(&encoding, sizeof(uint32le_t));
+ file.Write(&entry_count, sizeof(entry_count));
+ file.Write(&alias_count, sizeof(alias_count));
+
+@@ -508,8 +539,8 @@ bool DataPack::WritePack(const base::FilePath& path,
+ // last item so we can compute the size of the list item.
+ const uint32_t index_length = (entry_count + 1) * sizeof(Entry);
+ const uint32_t alias_table_length = alias_count * sizeof(Alias);
+- uint32_t data_offset = kHeaderLengthV5 + index_length + alias_table_length;
+- for (const uint16_t resource_id : resource_ids) {
++ uint32le_t data_offset = kHeaderLengthV5 + index_length + alias_table_length;
++ for (const uint16le_t resource_id : resource_ids) {
+ file.Write(&resource_id, sizeof(resource_id));
+ file.Write(&data_offset, sizeof(data_offset));
+ data_offset += resources.find(resource_id)->second.length();
+@@ -517,13 +548,13 @@ bool DataPack::WritePack(const base::FilePath& path,
+
+ // We place an extra entry after the last item that allows us to read the
+ // size of the last item.
+- const uint16_t resource_id = 0;
++ const uint16le_t resource_id = 0;
+ file.Write(&resource_id, sizeof(resource_id));
+ file.Write(&data_offset, sizeof(data_offset));
+
+ // Write the aliases table, if any. Note: |aliases| is an std::map,
+ // ensuring values are written in increasing order.
+- for (const std::pair<uint16_t, uint16_t>& alias : aliases) {
++ for (const std::pair<uint16le_t, uint16le_t> alias : aliases) {
+ file.Write(&alias, sizeof(alias));
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_jpeg__codec.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_jpeg__codec.cc
index 860cb26bd51b..a61d8a0a0c66 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_jpeg__codec.cc
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_jpeg__codec.cc
@@ -1,6 +1,6 @@
---- src/3rdparty/chromium/ui/gfx/codec/jpeg_codec.cc.orig 2018-11-13 18:25:11 UTC
-+++ src/3rdparty/chromium/ui/gfx/codec/jpeg_codec.cc
-@@ -219,6 +219,7 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+--- src/3rdparty/chromium/ui/gfx/codec/jpeg_codec.cc.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/ui/gfx/codec/jpeg_codec.cc 2019-10-27 22:18:49.231847000 +0100
+@@ -207,16 +207,17 @@
case JCS_GRAYSCALE:
case JCS_RGB:
case JCS_YCbCr:
@@ -8,13 +8,25 @@
// Choose an output colorspace and return if it is an unsupported one.
// Same as JPEGCodec::Encode(), libjpeg-turbo supports all input formats
// used by Chromium (i.e. RGBA and BGRA) and we just map the input
-@@ -237,6 +238,9 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
- NOTREACHED() << "Invalid pixel format";
+ // parameters to a colorspace.
+ if (format == FORMAT_RGBA ||
+- (format == FORMAT_SkBitmap && SK_R32_SHIFT == 0)) {
++ (format == FORMAT_SkBitmap && SK_PMCOLOR_BYTE_ORDER(R, G, B, A))) {
+ cinfo->out_color_space = JCS_EXT_RGBX;
+ cinfo->output_components = 4;
+ } else if (format == FORMAT_BGRA ||
+- (format == FORMAT_SkBitmap && SK_B32_SHIFT == 0)) {
++ (format == FORMAT_SkBitmap && SK_PMCOLOR_BYTE_ORDER(B, G, R, A))) {
+ cinfo->out_color_space = JCS_EXT_BGRX;
+ cinfo->output_components = 4;
+ } else {
+@@ -224,6 +225,9 @@
return false;
}
+ break;
+#else
+ cinfo.out_color_space = JCS_RGB;
+#endif
- break;
case JCS_CMYK:
case JCS_YCCK:
+ default:
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec.cc
new file mode 100644
index 000000000000..657c944807c5
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec.cc
@@ -0,0 +1,33 @@
+--- src/3rdparty/chromium/ui/gfx/codec/png_codec.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/ui/gfx/codec/png_codec.cc
+@@ -169,6 +169,10 @@ void DecodeInfoCallback(png_struct* png_ptr, png_info*
+ png_set_bgr(png_ptr);
+ png_set_add_alpha(png_ptr, 0xFF, PNG_FILLER_AFTER);
+ break;
++ case PNGCodec::FORMAT_ARGB:
++ state->output_channels = 4;
++ png_set_add_alpha(png_ptr, 0xFF, PNG_FILLER_BEFORE);
++ break;
+ case PNGCodec::FORMAT_SkBitmap:
+ state->output_channels = 4;
+ png_set_add_alpha(png_ptr, 0xFF, PNG_FILLER_AFTER);
+@@ -183,6 +187,10 @@ void DecodeInfoCallback(png_struct* png_ptr, png_info*
+ state->output_channels = 4;
+ png_set_bgr(png_ptr);
+ break;
++ case PNGCodec::FORMAT_ARGB:
++ state->output_channels = 4;
++ png_set_swap_alpha(png_ptr);
++ break;
+ case PNGCodec::FORMAT_SkBitmap:
+ state->output_channels = 4;
+ break;
+@@ -475,6 +483,8 @@ bool PNGCodec::Encode(const unsigned char* input,
+ case FORMAT_BGRA:
+ colorType = kBGRA_8888_SkColorType;
+ break;
++ case FORMAT_ARGB:
++ return false;
+ case FORMAT_SkBitmap:
+ colorType = kN32_SkColorType;
+ break;
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec.h
new file mode 100644
index 000000000000..bb838fc7fd7a
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec.h
@@ -0,0 +1,13 @@
+--- src/3rdparty/chromium/ui/gfx/codec/png_codec.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/ui/gfx/codec/png_codec.h
+@@ -37,6 +37,10 @@ class CODEC_EXPORT PNGCodec {
+ // This is the default Windows DIB order.
+ FORMAT_BGRA,
+
++ // 4 bytes per pixel, in ARGB order in memory regardless of endianness.
++ // Only supported for decoding
++ FORMAT_ARGB,
++
+ // SkBitmap format. For Encode() kN32_SkColorType (4 bytes per pixel) and
+ // kAlpha_8_SkColorType (1 byte per pixel) formats are supported.
+ // kAlpha_8_SkColorType gets encoded into a grayscale PNG treating alpha as
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec__unittest.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec__unittest.cc
new file mode 100644
index 000000000000..f385a9e00355
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_codec_png__codec__unittest.cc
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/ui/gfx/codec/png_codec_unittest.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/ui/gfx/codec/png_codec_unittest.cc
+@@ -853,7 +853,7 @@ TEST(PNGCodec, EncodeA8SkBitmap) {
+ for (int y = 0; y < h; y++) {
+ uint8_t original_pixel = *original_bitmap.getAddr8(x, y);
+ uint32_t decoded_pixel = *decoded_bitmap.getAddr32(x, y);
+- EXPECT_TRUE(BGRAGrayEqualsA8Gray(decoded_pixel, original_pixel));
++ EXPECT_TRUE(BGRAGrayEqualsA8Gray(SkUnPreMultiply::PMColorToColor(decoded_pixel), original_pixel));
+ }
+ }
+ }
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_color__analysis.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_color__analysis.cc
new file mode 100644
index 000000000000..d227a65ba74a
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_color__analysis.cc
@@ -0,0 +1,87 @@
+--- src/3rdparty/chromium/ui/gfx/color_analysis.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/ui/gfx/color_analysis.cc
+@@ -16,6 +16,7 @@
+ #include <vector>
+
+ #include "base/logging.h"
++#include "base/sys_byteorder.h"
+ #include "third_party/skia/include/core/SkBitmap.h"
+ #include "third_party/skia/include/core/SkUnPreMultiply.h"
+ #include "ui/gfx/codec/png_codec.h"
+@@ -506,10 +507,17 @@ SkColor FindClosestColor(const uint8_t* image,
+ SkColor best_color = color;
+ const uint8_t* byte = image;
+ for (int i = 0; i < width * height; ++i) {
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ uint8_t b = *(byte++);
+ uint8_t g = *(byte++);
+ uint8_t r = *(byte++);
+ uint8_t a = *(byte++);
++#else
++ uint8_t a = *(byte++);
++ uint8_t r = *(byte++);
++ uint8_t g = *(byte++);
++ uint8_t b = *(byte++);
++#endif
+ // Ignore fully transparent pixels.
+ if (a == 0)
+ continue;
+@@ -527,7 +535,6 @@ SkColor FindClosestColor(const uint8_t* image,
+
+ // For a 16x16 icon on an Intel Core i5 this function takes approximately
+ // 0.5 ms to run.
+-// TODO(port): This code assumes the CPU architecture is little-endian.
+ SkColor CalculateKMeanColorOfBuffer(uint8_t* decoded_data,
+ int img_width,
+ int img_height,
+@@ -550,10 +557,17 @@ SkColor CalculateKMeanColorOfBuffer(uint8_t* decoded_d
+ int pixel_pos = sampler->GetSample(img_width, img_height) %
+ (img_width * img_height);
+
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ uint8_t b = decoded_data[pixel_pos * 4];
+ uint8_t g = decoded_data[pixel_pos * 4 + 1];
+ uint8_t r = decoded_data[pixel_pos * 4 + 2];
+ uint8_t a = decoded_data[pixel_pos * 4 + 3];
++#else
++ uint8_t a = decoded_data[pixel_pos * 4];
++ uint8_t r = decoded_data[pixel_pos * 4 + 1];
++ uint8_t g = decoded_data[pixel_pos * 4 + 2];
++ uint8_t b = decoded_data[pixel_pos * 4 + 3];
++#endif
+ // Skip fully transparent pixels as they usually contain black in their
+ // RGB channels but do not contribute to the visual image.
+ if (a == 0)
+@@ -602,10 +616,17 @@ SkColor CalculateKMeanColorOfBuffer(uint8_t* decoded_d
+ uint8_t* pixel = decoded_data;
+ uint8_t* decoded_data_end = decoded_data + (img_width * img_height * 4);
+ while (pixel < decoded_data_end) {
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ uint8_t b = *(pixel++);
+ uint8_t g = *(pixel++);
+ uint8_t r = *(pixel++);
+ uint8_t a = *(pixel++);
++#else
++ uint8_t a = *(pixel++);
++ uint8_t r = *(pixel++);
++ uint8_t g = *(pixel++);
++ uint8_t b = *(pixel++);
++#endif
+ // Skip transparent pixels, see above.
+ if (a == 0)
+ continue;
+@@ -683,8 +704,12 @@ SkColor CalculateKMeanColorOfPNG(scoped_refptr<base::R
+
+ if (png.get() && png->size() &&
+ gfx::PNGCodec::Decode(png->front(), png->size(),
+- gfx::PNGCodec::FORMAT_BGRA, &decoded_data,
+- &img_width, &img_height)) {
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
++ gfx::PNGCodec::FORMAT_BGRA,
++#else
++ gfx::PNGCodec::FORMAT_ARGB,
++#endif
++ &decoded_data, &img_width, &img_height)) {
+ return CalculateKMeanColorOfBuffer(&decoded_data[0], img_width, img_height,
+ lower_bound, upper_bound, sampler, true);
+ }
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_skbitmap__operations__unittest.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_skbitmap__operations__unittest.cc
new file mode 100644
index 000000000000..32401178fff2
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gfx_skbitmap__operations__unittest.cc
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/ui/gfx/skbitmap_operations_unittest.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/ui/gfx/skbitmap_operations_unittest.cc
+@@ -238,7 +238,7 @@ TEST(SkBitmapOperationsTest, CreateHSLShiftedBitmapHue
+
+ for (int y = 0, i = 0; y < src_h; y++) {
+ for (int x = 0; x < src_w; x++) {
+- *src.getAddr32(x, y) = SkColorSetARGB(255, 0, 0, i % 255);
++ *src.getAddr32(x, y) = SkPackARGB32(255, 0, 0, i % 255);
+ i++;
+ }
+ }
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_url_url__canon__host.cc b/www/qt5-webengine/files/patch-src_3rdparty_chromium_url_url__canon__host.cc
new file mode 100644
index 000000000000..1f9f1f4ee75d
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_url_url__canon__host.cc
@@ -0,0 +1,12 @@
+--- src/3rdparty/chromium/url/url_canon_host.cc.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/url/url_canon_host.cc
+@@ -135,8 +135,7 @@ bool DoSimpleHost(const INCHAR* host,
+ if (source == '%') {
+ // Unescape first, if possible.
+ // Source will be used only if decode operation was successful.
+- if (!DecodeEscaped(host, &i, host_len,
+- reinterpret_cast<unsigned char*>(&source))) {
++ if (!DecodeEscaped(host, &i, host_len, &source)) {
+ // Invalid escaped character. There is nothing that can make this
+ // host valid. We append an escaped percent so the URL looks reasonable
+ // and mark as failed.
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_url_url__canon__internal.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_url_url__canon__internal.h
new file mode 100644
index 000000000000..284449191808
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_url_url__canon__internal.h
@@ -0,0 +1,14 @@
+--- src/3rdparty/chromium/url/url_canon_internal.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/url/url_canon_internal.h
+@@ -305,9 +305,9 @@ inline bool Is8BitChar(base::char16 c) {
+ return c <= 255;
+ }
+
+-template<typename CHAR>
++template<typename CHAR, typename DST>
+ inline bool DecodeEscaped(const CHAR* spec, int* begin, int end,
+- unsigned char* unescaped_value) {
++ DST* unescaped_value) {
+ if (*begin + 3 > end ||
+ !Is8BitChar(spec[*begin + 1]) || !Is8BitChar(spec[*begin + 2])) {
+ // Invalid escape sequence because there's not enough room, or the
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn
index 531fc220901a..089dee31ca1c 100644
--- a/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_BUILD.gn
@@ -1,6 +1,14 @@
---- src/3rdparty/chromium/v8/BUILD.gn.orig 2019-05-23 12:39:34 UTC
-+++ src/3rdparty/chromium/v8/BUILD.gn
-@@ -3169,7 +3169,7 @@ v8_component("v8_libbase") {
+--- src/3rdparty/chromium/v8/BUILD.gn.orig 2019-05-23 14:39:34.000000000 +0200
++++ src/3rdparty/chromium/v8/BUILD.gn 2019-10-27 22:44:17.280181000 +0100
+@@ -3006,7 +3006,6 @@
+ # to implement atomic memory access
+ if (v8_current_cpu == "mips" || v8_current_cpu == "mipsel" ||
+ v8_current_cpu == "mips64" || v8_current_cpu == "mips64el" ||
+- v8_current_cpu == "ppc" || v8_current_cpu == "ppc64" ||
+ v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
+ libs = [ "atomic" ]
+ }
+@@ -3169,7 +3168,7 @@
}
}
@@ -9,7 +17,7 @@
sources += [
"src/base/debug/stack_trace_posix.cc",
"src/base/platform/platform-linux.cc",
-@@ -3189,6 +3189,12 @@ v8_component("v8_libbase") {
+@@ -3189,6 +3188,12 @@
"dl",
"rt",
]
@@ -22,7 +30,7 @@
} else if (is_android) {
if (current_toolchain == host_toolchain) {
libs = [
-@@ -3393,6 +3399,7 @@ if (v8_use_snapshot && current_toolchain == v8_snapsho
+@@ -3393,6 +3398,7 @@
"src/snapshot/embedded-file-writer.h",
"src/snapshot/mksnapshot.cc",
]
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_ppc_constants-ppc.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_ppc_constants-ppc.h
new file mode 100644
index 000000000000..93f235f94774
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_ppc_constants-ppc.h
@@ -0,0 +1,30 @@
+--- src/3rdparty/chromium/v8/src/ppc/constants-ppc.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/v8/src/ppc/constants-ppc.h
+@@ -21,7 +21,8 @@
+ #endif
+
+ #if V8_HOST_ARCH_PPC && \
+- (V8_OS_AIX || (V8_TARGET_ARCH_PPC64 && V8_TARGET_BIG_ENDIAN))
++ (V8_OS_AIX || (V8_TARGET_ARCH_PPC64 && \
++ (V8_TARGET_BIG_ENDIAN && (!defined(_CALL_ELF) || _CALL_ELF == 1))))
+ #define ABI_USES_FUNCTION_DESCRIPTORS 1
+ #else
+ #define ABI_USES_FUNCTION_DESCRIPTORS 0
+@@ -33,13 +34,15 @@
+ #define ABI_PASSES_HANDLES_IN_REGS 0
+ #endif
+
+-#if !V8_HOST_ARCH_PPC || !V8_TARGET_ARCH_PPC64 || V8_TARGET_LITTLE_ENDIAN
++#if !V8_HOST_ARCH_PPC || !V8_TARGET_ARCH_PPC64 || \
++ (V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2))
+ #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 1
+ #else
+ #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 0
+ #endif
+
+-#if !V8_HOST_ARCH_PPC || (V8_TARGET_ARCH_PPC64 && V8_TARGET_LITTLE_ENDIAN)
++#if !V8_HOST_ARCH_PPC || (V8_TARGET_ARCH_PPC64 && \
++ (V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2)))
+ #define ABI_CALL_VIA_IP 1
+ #else
+ #define ABI_CALL_VIA_IP 0
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_ppc_register-ppc.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_ppc_register-ppc.h
new file mode 100644
index 000000000000..79c80771a2e4
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_ppc_register-ppc.h
@@ -0,0 +1,12 @@
+--- src/3rdparty/chromium/v8/src/ppc/register-ppc.h.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/v8/src/ppc/register-ppc.h
+@@ -145,7 +145,8 @@ const int kNumSafepointRegisters = 32;
+ // The following constants describe the stack frame linkage area as
+ // defined by the ABI. Note that kNumRequiredStackFrameSlots must
+ // satisfy alignment requirements (rounding up if required).
+-#if V8_TARGET_ARCH_PPC64 && V8_TARGET_LITTLE_ENDIAN // ppc64le linux
++#if V8_TARGET_ARCH_PPC64 && (V8_TARGET_LITTLE_ENDIAN || \
++ defined(_CALL_ELF) && _CALL_ELF == 2)
+ // [0] back chain
+ // [1] condition register save area
+ // [2] link register save area
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_test_BUILD.gn b/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_test_BUILD.gn
new file mode 100644
index 000000000000..90e1c4c18f7b
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_test_BUILD.gn
@@ -0,0 +1,36 @@
+--- src/3rdparty/chromium/v8/test/BUILD.gn.orig 2019-05-23 12:39:34 UTC
++++ src/3rdparty/chromium/v8/test/BUILD.gn
+@@ -31,7 +31,7 @@ group("gn_all") {
+ deps += [
+ "cctest:cctest",
+ "cctest:generate-bytecode-expectations",
+- "unittests:unittests",
++ #"unittests:unittests",
+ ]
+ }
+ }
+@@ -80,9 +80,9 @@ group("v8_bot_default") {
+ "mjsunit:v8_mjsunit",
+ "mkgrokdump:mkgrokdump",
+ "preparser:v8_preparser",
+- "unittests:unittests",
++ #"unittests:unittests",
+ "wasm-js:v8_wasm_js",
+- "wasm-spec-tests:v8_wasm_spec_tests",
++ #"wasm-spec-tests:v8_wasm_spec_tests",
+ "webkit:v8_webkit",
+ ]
+ }
+@@ -100,9 +100,9 @@ group("v8_default") {
+ "mjsunit:v8_mjsunit",
+ "mkgrokdump:mkgrokdump",
+ "preparser:v8_preparser",
+- "unittests:unittests",
+- "wasm-js:v8_wasm_js",
+- "wasm-spec-tests:v8_wasm_spec_tests",
++ #"unittests:unittests",
++ #"wasm-js:v8_wasm_js",
++ #"wasm-spec-tests:v8_wasm_spec_tests",
+ ]
+ }
+
diff --git a/www/qt5-webengine/files/patch-src_3rdparty_gn_tools_gn_args.cc b/www/qt5-webengine/files/patch-src_3rdparty_gn_tools_gn_args.cc
new file mode 100644
index 000000000000..55e15a5fa3d5
--- /dev/null
+++ b/www/qt5-webengine/files/patch-src_3rdparty_gn_tools_gn_args.cc
@@ -0,0 +1,11 @@
+--- src/3rdparty/gn/tools/gn/args.cc.orig 2019-10-27 19:20:40.465677000 +0100
++++ src/3rdparty/gn/tools/gn/args.cc 2019-10-27 19:21:07.759511000 +0100
+@@ -332,7 +332,7 @@
+ arch = kMips64;
+ else if (os_arch == "s390x")
+ arch = kS390X;
+- else if (os_arch == "ppc64" || os_arch == "ppc64le")
++ else if (os_arch == "ppc64" || os_arch == "ppc64le" || os_arch == "powerpc")
+ // We handle the endianness inside //build/config/host_byteorder.gni.
+ // This allows us to use the same toolchain as ppc64 BE
+ // and specific flags are included using the host_byteorder logic.
diff --git a/www/qt5-webengine/pkg-plist b/www/qt5-webengine/pkg-plist
index 0be3c6b57253..c8145b4e54e7 100644
--- a/www/qt5-webengine/pkg-plist
+++ b/www/qt5-webengine/pkg-plist
@@ -172,7 +172,8 @@ libdata/pkgconfig/Qt5WebEngine.pc
libdata/pkgconfig/Qt5WebEngineCore.pc
libdata/pkgconfig/Qt5WebEngineWidgets.pc
%%QT_LIBEXECDIR%%/QtWebEngineProcess
-%%QT_DATADIR%%/resources/icudtl.dat
+%%BE%%%%QT_DATADIR%%/resources/icudtb.dat
+%%LE%%%%QT_DATADIR%%/resources/icudtl.dat
%%QT_DATADIR%%/resources/qtwebengine_devtools_resources.pak
%%QT_DATADIR%%/resources/qtwebengine_resources.pak
%%QT_DATADIR%%/resources/qtwebengine_resources_100p.pak