summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--user/thunderbird/APKBUILD80
-rw-r--r--user/thunderbird/disable-gecko-profiler.patch14
-rw-r--r--user/thunderbird/fix-bug-1261392.patch25
-rw-r--r--user/thunderbird/gcc89074.patch24
-rw-r--r--user/thunderbird/jpeg-link.patch25
-rw-r--r--user/thunderbird/mozconfig5
-rw-r--r--user/thunderbird/newer-cbindgen.patch17
-rw-r--r--user/thunderbird/ppc32-fix.patch43
-rw-r--r--user/thunderbird/rust-32bit.patch32
-rw-r--r--user/thunderbird/skia-sucks1.patch84
-rw-r--r--user/thunderbird/skia-sucks2.patch44
-rw-r--r--user/thunderbird/skia-unified.patch (renamed from user/thunderbird/skia-sucks3.patch)39
-rw-r--r--user/thunderbird/webrender.patch54
-rw-r--r--user/thunderbird/webrtc-broken.patch30
14 files changed, 260 insertions, 256 deletions
diff --git a/user/thunderbird/APKBUILD b/user/thunderbird/APKBUILD
index fc2887d63..12b206893 100644
--- a/user/thunderbird/APKBUILD
+++ b/user/thunderbird/APKBUILD
@@ -1,6 +1,6 @@
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=thunderbird
-pkgver=68.9.0
+pkgver=91.13.0
pkgrel=0
pkgdesc="Email client from Mozilla"
url="https://www.thunderbird.net/"
@@ -9,14 +9,11 @@ options="!check" # Tests disabled
license="MPL-2.0"
depends=""
# moz build system stuff
-# python deps
# system-libs
# actual deps
makedepends="
- autoconf2.13 cargo cbindgen clang llvm8-dev node ncurses-dev
- perl rust cmd:which
-
- ncurses-dev openssl-dev
+ autoconf2.13 cargo cbindgen clang llvm14-dev node ncurses-dev
+ perl python3 rust cmd:which
alsa-lib-dev bzip2-dev icu-dev libevent-dev libffi-dev libpng-dev
libjpeg-turbo-dev nspr-dev nss-dev pulseaudio-dev zlib-dev
@@ -26,22 +23,22 @@ makedepends="
libxrender-dev libxt-dev nasm nss-static sqlite-dev
startup-notification-dev unzip yasm zip gtk+2.0-dev
"
-_py2ver="2.7.16"
source="https://archive.mozilla.org/pub/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz
- https://www.python.org/ftp/python/$_py2ver/Python-$_py2ver.tar.xz
mozconfig
bad-google-code.patch
- disable-gecko-profiler.patch
fix-mutex-build.patch
fix-seccomp-bpf.patch
+ gcc89074.patch
+ jpeg-link.patch
mozilla-build-arm.patch
+ newer-cbindgen.patch
+ ppc32-fix.patch
+ rust-32bit.patch
shut-up-warning.patch
- skia-sucks1.patch
- skia-sucks2.patch
- skia-sucks3.patch
+ skia-unified.patch
stackwalk-x86-ppc.patch
- webrtc-broken.patch
+ webrender.patch
thunderbird.desktop
"
@@ -76,33 +73,6 @@ ldpath="$_mozappdir"
# - CVE-2020-12395
# - CVE-2020-12397
-unpack() {
- default_unpack
- [ -z $SKIP_PYTHON ] || return 0
-
- msg "Killing all remaining hope for humanity and building Python 2..."
- cd "$srcdir/Python-$_py2ver"
- [ -d ../python ] && rm -r ../python
-
- # 19:39 <+solar> just make the firefox build process build its own py2 copy
- # 20:03 <calvin> TheWilfox: there's always violence
-
- sed -e 's/é/e/g' /etc/os-release > "$srcdir"/os-release
- export UNIXCONFDIR="$srcdir"
-
- ./configure --prefix="$srcdir/python" --with-ensurepip=install
- make -j $JOBS
- # 6 tests failed:
- # test__locale test_os test_posix test_re test_strptime test_time
- # make test
- make -j $JOBS install
-
- # firefox's bundled pipenv and pip aren't new enough to support
- # configurable UNIXCONFDIR
- export PATH="$srcdir/python/bin:$PATH"
- pip2 install virtualenv pipenv
-}
-
prepare() {
default_prepare
cp "$srcdir"/mozconfig "$builddir"/mozconfig
@@ -119,11 +89,6 @@ prepare() {
echo "ac_add_options --disable-startupcache" >> "$builddir"/mozconfig
;;
esac
-
- rm "$builddir"/third_party/python/virtualenv/virtualenv_support/pip*.whl
- rm "$builddir"/third_party/python/virtualenv/virtualenv_support/setuptools*.whl
- cp "$srcdir/Python-$_py2ver"/Lib/ensurepip/_bundled/*.whl \
- "$builddir/third_party/python/virtualenv/virtualenv_support"
}
build() {
@@ -131,6 +96,7 @@ build() {
export BUILD_OFFICIAL=1
export MOZILLA_OFFICIAL=1
export USE_SHORT_LIBNAME=1
+ export MACH_USE_SYSTEM_PYTHON=1
# gcc 6
export CXXFLAGS="-fno-delete-null-pointer-checks -fno-schedule-insns2"
@@ -139,18 +105,19 @@ build() {
export UNIXCONFDIR="$srcdir"
- export PATH="$srcdir/python/bin:$PATH"
./mach build
}
run() {
cd "$builddir"/obj-$CHOST/dist/bin
export LD_LIBRARY_PATH=.
- ./thunderbird -no-remote -profile "$builddir"/obj-$CHOST/tmp/profile-default
+ export PROFILE_DIR="$builddir"/obj-$CHOST/tmp/profile-default
+ [ -d $PROFILE_DIR ] || ./thunderbird -no-remote -CreateProfile "Test $PROFILE_DIR"
+ ./thunderbird -no-remote -profile $PROFILE_DIR
}
package() {
- export PATH="$srcdir/python/bin:$PATH"
+ export MACH_USE_SYSTEM_PYTHON=1
DESTDIR="$pkgdir" ./mach install
install -m755 -d ${pkgdir}/usr/share/applications
@@ -169,18 +136,19 @@ package() {
${pkgdir}/usr/share/applications/thunderbird.desktop
}
-sha512sums="891472c95ba6ff46061131504e89010da512a84b0e1dea0482e603fd4c87f11e099280a245c7dd9fc9320c48229c26602565c089d86f1a1f4271b29b6fc606f0 thunderbird-68.9.0.source.tar.xz
-16e814e8dcffc707b595ca2919bd2fa3db0d15794c63d977364652c4a5b92e90e72b8c9e1cc83b5020398bd90a1b397dbdd7cb931c49f1aa4af6ef95414b43e0 Python-2.7.16.tar.xz
-5519234df2934ac2f3d76c8cad7e4f0fe15cf83ea4beb32c6489d8b7839b3ebea88bdb342e0d2a9c1c7c95e9455d234b0a5aa0e73446fd8027b520f080a2bb5b mozconfig
+sha512sums="e73d3db4333ad659ec1ab249bd261e8c28301c125d0c39b473c83f8fccace6d4916a2bfef14fc20c065055ff6bbd3ca618b5aab178241b53509543640dcd541a thunderbird-91.13.0.source.tar.xz
+afc87cdd19500f8b6b0bedabe98339cca9e6af86edb45e673c6ee0a49bdb3a48b1816f6f5f8790cab86cca428ab7f142cbeb6462079fe293f5f13563a7761896 mozconfig
ace7492f4fb0523c7340fdc09c831906f74fddad93822aff367135538dacd3f56288b907f5a04f53f94c76e722ba0bab73e28d83ec12d3e672554712e6b08613 bad-google-code.patch
-9c14041f0295682b8dbeb6d5b58a2f9dc0a2dc8bef995a0f7e30fa0b17c51aa0f6748f80fb8584169db7687e2eeb404dff68a09158ae56a5f24eef30685dd2b3 disable-gecko-profiler.patch
c0b2bf43206c2a5154e560ef30189a1062ae856861b39f52ce69002390ff9972d43e387bfd2bf8d2ab3cac621987bc042c8c0a8b4cf90ae05717ca7705271880 fix-mutex-build.patch
70863b985427b9653ce5e28d6064f078fb6d4ccf43dd1b68e72f97f44868fc0ce063161c39a4e77a0a1a207b7365d5dc7a7ca5e68c726825eba814f2b93e2f5d fix-seccomp-bpf.patch
+6eb7fb134760f5d232710c56f18f14de4f533e41e269531edd01f5650f6d641513e34a8d2294af5ad6fd184736f674c734efb4cc003636a75e14a8fdba2fe3b0 gcc89074.patch
+240d6c9290a20e2c9ccfa2d15c9a636fc1b09b62f09285eb688974d888390da2a84271f14c397570b58ccdcf29b99370f7183cc0dbbbe581bf6e7d7ee8dcabd2 jpeg-link.patch
e61664bc93eadce5016a06a4d0684b34a05074f1815e88ef2613380d7b369c6fd305fb34f83b5eb18b9e3138273ea8ddcfdcb1084fdcaa922a1e5b30146a3b18 mozilla-build-arm.patch
+eb158bf2e4b9d513ae36f3c977a3b110ea8c4801c3c94841bc3ad4cdca3bdfc96d4a662e5a2e662fe7a01b0f1af097280097b16f5d0e83d29b4a7e6cbb8c7396 newer-cbindgen.patch
+06a3f4ee6d3726adf3460952fcbaaf24bb15ef8d15b3357fdd1766c7a62b00bd53a1e943b5df7f4e1a69f4fae0d44b64fae1e027d7812499c77894975969ea10 ppc32-fix.patch
+153f955169e1489d49867be90f68e8a4722cad8edb3a9d1ddb6161e34399e1b4e9e82dc8d72aaba1d5f585bca7c4852433e8ecb068be1583df7155c7cce0223b rust-32bit.patch
39ddb15d1453a8412275c36fc8db3befc69dffd4a362e932d280fb7fd1190db595a2af9b468ee49e0714f5e9df6e48eb5794122a64fa9f30d689de8693acbb15 shut-up-warning.patch
-e751ffab263f03d4c74feebc617e3af115b1b53cf54fe16c3acc585eec67773f37aa8de4c19599fa6478179b01439025112ef2b759aa9923c9900e7081cb65a9 skia-sucks1.patch
-9152bd3e6dc446337e6a2ed602279c620aedecc796ba28e777854c4f41fcf3067f9ebd086a4b63a6b76c2e69ec599ac6435b8eeda4f7488b1c45f69113facba4 skia-sucks2.patch
-7a1fa27e060b2f025eaebbd39fb5c62960b62450241437e6d057d58cef9faf1cd1a85efe3b6a37b865d686ff18e90605ebea3089b26243f2d14876c2107106a6 skia-sucks3.patch
+961fa1c856e97e4d08da4682f520ecf23075571a532a781c5e14dbec4915130b02a8199caf6602013ea904d347c4f06d086b0fe84a3850dd6910d351232da599 skia-unified.patch
452b47b825294779f98ed46bc1065dad76b79ff453521ef049934a120f349c84a1c863b16af1828fe053059823da9690ec917c055ae02dcc5c80c54cad732448 stackwalk-x86-ppc.patch
-be68f1387aa6677875a67106e2d6a9db470c934c943056d3b53391a63034235108e41945c53957db427d9cdc59f0aa2f9e6f2f8cd862e090e512a3ab9cbcc9a8 webrtc-broken.patch
+b7c1ac21cd03b7cdc887e005ed970cf13ff95643c7651decf1e6d42094cda6a0464dc2ba3cded3827f6d0f3682c2c9b081a7667f386133aa6e3072d0464e72e8 webrender.patch
95a2b1deb4f6c90750fdd2bfe8ca0a7879a5b267965091705a6beb0a0a4b1ccad75d11df7b9885543ca4232ff704e975c6946f4c11804cb71c471e06f9576001 thunderbird.desktop"
diff --git a/user/thunderbird/disable-gecko-profiler.patch b/user/thunderbird/disable-gecko-profiler.patch
deleted file mode 100644
index 160ac6097..000000000
--- a/user/thunderbird/disable-gecko-profiler.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -uwr firefox-67.0-old/toolkit/moz.configure firefox-67.0/toolkit/moz.configure
---- firefox-67.0-old/toolkit/moz.configure 2019-05-22 10:35:06.170036401 +0000
-+++ firefox-67.0/toolkit/moz.configure 2019-05-22 10:36:21.680036609 +0000
-@@ -70,10 +70,6 @@
- if value:
- return True
-
--set_config('MOZ_GECKO_PROFILER', gecko_profiler_define)
--set_define('MOZ_GECKO_PROFILER', gecko_profiler_define)
--
--
- # Whether code to parse ELF binaries should be compiled for the Gecko profiler
- # (for symbol table dumping).
- @depends(gecko_profiler, target)
diff --git a/user/thunderbird/fix-bug-1261392.patch b/user/thunderbird/fix-bug-1261392.patch
deleted file mode 100644
index fa40914d6..000000000
--- a/user/thunderbird/fix-bug-1261392.patch
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/tools/profiler/core/platform.h 2017-05-27 11:44:06.733119794 +0000
-+++ b/tools/profiler/core/platform.h 2017-05-27 11:46:16.004253520 +0000
-@@ -54,10 +54,11 @@
- #include <vector>
- #include "StackTop.h"
-
--// We need a definition of gettid(), but old glibc versions don't provide a
--// wrapper for it.
--#if defined(__GLIBC__)
-+// We need a definition of gettid(), but Linux libc implementations don't
-+// provide a wrapper for it (except for Bionic)
-+#if defined(__linux__)
- # include <unistd.h>
-+#if !defined(__BIONIC__)
- # include <sys/syscall.h>
- # define gettid() static_cast<pid_t>(syscall(SYS_gettid))
-+#endif
-@@ -71,6 +72,7 @@
- return (pid_t) syscall(SYS_thread_selfid);
- }
- #endif
-+#endif
-
- #ifdef XP_WIN
- #include <windows.h>
diff --git a/user/thunderbird/gcc89074.patch b/user/thunderbird/gcc89074.patch
new file mode 100644
index 000000000..e9713193c
--- /dev/null
+++ b/user/thunderbird/gcc89074.patch
@@ -0,0 +1,24 @@
+Upstream-URL: https://bugzilla.mozilla.org/show_bug.cgi?id=1688122
+Upstream-URL: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89074
+
+Valid code, but only used for debugging. GCC 12 fixed this.
+Moz upstream not interested.
+
+--- firefox-91.13.0/dom/base/nsTreeSanitizer.cpp.old 2022-08-15 13:04:32.000000000 -0500
++++ firefox-91.13.0/dom/base/nsTreeSanitizer.cpp 2022-11-19 00:42:15.892580023 -0600
+@@ -632,15 +632,6 @@
+ constexpr const nsStaticAtom* const kURLAttributesSVG[] = {nsGkAtoms::href,
+ nullptr};
+
+-static_assert(AllOf(std::begin(kURLAttributesSVG), std::end(kURLAttributesSVG),
+- [](auto aURLAttributeSVG) {
+- return AnyOf(std::begin(kAttributesSVG),
+- std::end(kAttributesSVG),
+- [&](auto aAttributeSVG) {
+- return aAttributeSVG == aURLAttributeSVG;
+- });
+- }));
+-
+ const nsStaticAtom* const kElementsMathML[] = {
+ nsGkAtoms::abs_, // abs
+ nsGkAtoms::_and, // and
diff --git a/user/thunderbird/jpeg-link.patch b/user/thunderbird/jpeg-link.patch
new file mode 100644
index 000000000..a04d924d4
--- /dev/null
+++ b/user/thunderbird/jpeg-link.patch
@@ -0,0 +1,25 @@
+--- firefox-91.13.0/toolkit/moz.configure.old 2022-08-15 13:05:59.000000000 -0500
++++ firefox-91.13.0/toolkit/moz.configure 2022-11-15 01:26:57.874201494 -0600
+@@ -1758,14 +1758,14 @@
+ )
+
+ with only_when("--with-system-jpeg"):
+- check_symbol(
+- "jpeg_destroy_compress",
+- flags=jpeg_flags.ldflags,
+- onerror=lambda: die(
+- "--with-system-jpeg requested but symbol "
+- "jpeg_destroy_compress not found."
+- ),
+- )
++ #check_symbol(
++ # "jpeg_destroy_compress",
++ # flags=jpeg_flags.ldflags,
++ # onerror=lambda: die(
++ # "--with-system-jpeg requested but symbol "
++ # "jpeg_destroy_compress not found."
++ # ),
++ #)
+
+ c_compiler.try_compile(
+ includes=[
diff --git a/user/thunderbird/mozconfig b/user/thunderbird/mozconfig
index c79f93bcb..9f77cf649 100644
--- a/user/thunderbird/mozconfig
+++ b/user/thunderbird/mozconfig
@@ -7,17 +7,16 @@ ac_add_options --disable-profiling
ac_add_options --disable-strip
ac_add_options --disable-tests
ac_add_options --disable-updater
+ac_add_options --disable-webrtc
ac_add_options --enable-application=comm/mail
ac_add_options --enable-alsa
-ac_add_options --enable-calendar
ac_add_options --enable-dbus
ac_add_options --enable-default-toolkit=cairo-gtk3
ac_add_options --enable-official-branding
ac_add_options --enable-pulseaudio
-ac_add_options --enable-startup-notification
ac_add_options --enable-system-ffi
-ac_add_options --with-system-bz2
ac_add_options --with-system-icu
+ac_add_options --with-system-jpeg
ac_add_options --with-system-libevent
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
diff --git a/user/thunderbird/newer-cbindgen.patch b/user/thunderbird/newer-cbindgen.patch
new file mode 100644
index 000000000..9829237ee
--- /dev/null
+++ b/user/thunderbird/newer-cbindgen.patch
@@ -0,0 +1,17 @@
+Description: Remove an extra constant definition that is now being
+ generated by newer versions of cbindgen (0.24), and causing
+ build failures because it is defined in several places.
+Author: Olivier Tilloy <olivier.tilloy@canonical.com>
+Upstream-URL: https://bugzilla.mozilla.org/show_bug.cgi?id=1773259
+
+--- a/gfx/webrender_bindings/webrender_ffi.h
++++ b/gfx/webrender_bindings/webrender_ffi.h
+@@ -77,8 +77,6 @@ struct WrPipelineInfo;
+ struct WrPipelineIdAndEpoch;
+ using WrPipelineIdEpochs = nsTArray<WrPipelineIdAndEpoch>;
+
+-const uint64_t ROOT_CLIP_CHAIN = ~0;
+-
+ } // namespace wr
+ } // namespace mozilla
+
diff --git a/user/thunderbird/ppc32-fix.patch b/user/thunderbird/ppc32-fix.patch
new file mode 100644
index 000000000..b4103c65f
--- /dev/null
+++ b/user/thunderbird/ppc32-fix.patch
@@ -0,0 +1,43 @@
+--- firefox-68.1.0/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_linux.cpp
++++ firefox-68.1.0/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_linux.cpp
+@@ -45,11 +45,8 @@ invoke_copy_to_stack(uint32_t* d,
+ uint64_t tempu64;
+
+ for(uint32_t i = 0; i < paramCount; i++, s++) {
+- if(s->IsPtrData()) {
+- if(s->type == nsXPTType::T_JSVAL)
+- tempu32 = (uint32_t) &s->ptr;
+- else
+- tempu32 = (uint32_t) s->ptr;
++ if(s->IsIndirect()) {
++ tempu32 = (uint32_t) &s->val;
+ }
+ else {
+ switch(s->type) {
+@@ -70,7 +67,7 @@ invoke_copy_to_stack(uint32_t* d,
+ }
+ }
+
+- if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) {
++ if (!s->IsIndirect() && s->type == nsXPTType::T_DOUBLE) {
+ #ifndef __NO_FPRS__
+ if (fpr < FPR_COUNT)
+ fpregs[fpr++] = s->val.d;
+@@ -88,7 +85,7 @@ invoke_copy_to_stack(uint32_t* d,
+ d += 2;
+ }
+ }
+- else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) {
++ else if (!s->IsIndirect() && s->type == nsXPTType::T_FLOAT) {
+ #ifndef __NO_FPRS__
+ if (fpr < FPR_COUNT)
+ fpregs[fpr++] = s->val.f; // if passed in registers, floats are promoted to doubles
+@@ -99,7 +96,7 @@ invoke_copy_to_stack(uint32_t* d,
+ else
+ *((float*) d++) = s->val.f;
+ }
+- else if (!s->IsPtrData() && (s->type == nsXPTType::T_I64
++ else if (!s->IsIndirect() && (s->type == nsXPTType::T_I64
+ || s->type == nsXPTType::T_U64)) {
+ if (gpr & 1) gpr++; // longlongs are aligned in odd/even register pairs, eg. r5/r6
+ if ((gpr + 1) < GPR_COUNT) {
diff --git a/user/thunderbird/rust-32bit.patch b/user/thunderbird/rust-32bit.patch
new file mode 100644
index 000000000..cff36e90b
--- /dev/null
+++ b/user/thunderbird/rust-32bit.patch
@@ -0,0 +1,32 @@
+--- firefox-91.13.0/config/makefiles/rust.mk.old 2022-08-15 13:04:32.000000000 -0500
++++ firefox-91.13.0/config/makefiles/rust.mk 2022-11-15 01:35:10.150096648 -0600
+@@ -64,19 +64,19 @@
+ # These flags are passed via `cargo rustc` and only apply to the final rustc
+ # invocation (i.e., only the top-level crate, not its dependencies).
+ cargo_rustc_flags = $(CARGO_RUSTCFLAGS)
+-ifndef DEVELOPER_OPTIONS
+-ifndef MOZ_DEBUG_RUST
++#ifndef DEVELOPER_OPTIONS
++#ifndef MOZ_DEBUG_RUST
+ # Enable link-time optimization for release builds, but not when linking
+ # gkrust_gtest. And not when doing cross-language LTO.
+-ifndef MOZ_LTO_RUST_CROSS
+-ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
+-cargo_rustc_flags += -Clto
+-endif
++#ifndef MOZ_LTO_RUST_CROSS
++#ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
++#cargo_rustc_flags += -Clto
++#endif
+ # We need -Cembed-bitcode=yes for all crates when using -Clto.
+-RUSTFLAGS += -Cembed-bitcode=yes
+-endif
+-endif
+-endif
++#RUSTFLAGS += -Cembed-bitcode=yes
++#endif
++#endif
++#endif
+
+ ifdef CARGO_INCREMENTAL
+ export CARGO_INCREMENTAL
diff --git a/user/thunderbird/skia-sucks1.patch b/user/thunderbird/skia-sucks1.patch
deleted file mode 100644
index a02c3b775..000000000
--- a/user/thunderbird/skia-sucks1.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-# HG changeset patch
-# Parent 548d0a2f3a22bfac32ec0c3921c6c969c8bf32a9
-
-diff -r 548d0a2f3a22 gfx/2d/ConvolutionFilter.cpp
---- a/gfx/2d/ConvolutionFilter.cpp Mon Jul 22 16:57:54 2019 +0200
-+++ b/gfx/2d/ConvolutionFilter.cpp Thu Jul 25 14:27:59 2019 +0200
-@@ -35,9 +35,38 @@
- return true;
- }
-
-+static void ByteSwapArray(uint8_t *u8Array, int32_t size) {
-+ uint32_t *array = reinterpret_cast<uint32_t*>(u8Array);
-+ for (int pxl = 0; pxl < size; ++pxl) {
-+ // Use an endian swap to move the bytes, i.e. BGRA -> ARGB.
-+ uint32_t rgba = array[pxl];
-+ array[pxl] = NativeEndian::swapToLittleEndian(rgba);
-+ }
-+}
-+
- void ConvolutionFilter::ConvolveHorizontally(const uint8_t* aSrc, uint8_t* aDst,
- bool aHasAlpha) {
-+#ifdef MOZ_BIG_ENDIAN
-+ int outputSize = mFilter->numValues();
-+
-+ // Input size isn't handed in, so we have to calculate it quickly
-+ int inputSize = 0;
-+ for (int xx = 0; xx < outputSize; ++xx) {
-+ // Get the filter that determines the current output pixel.
-+ int filterOffset, filterLength;
-+ mFilter->FilterForValue(xx, &filterOffset, &filterLength);
-+ inputSize = std::max(inputSize, filterOffset + filterLength);
-+ }
-+
-+ ByteSwapArray((uint8_t*)aSrc, inputSize);
-+#endif
-+
- SkOpts::convolve_horizontally(aSrc, *mFilter, aDst, aHasAlpha);
-+
-+#ifdef MOZ_BIG_ENDIAN
-+ ByteSwapArray((uint8_t*)aSrc, inputSize);
-+ ByteSwapArray(aDst, outputSize);
-+#endif
- }
-
- void ConvolutionFilter::ConvolveVertically(uint8_t* const* aSrc, uint8_t* aDst,
-@@ -49,8 +78,26 @@
- int32_t filterLength;
- auto filterValues =
- mFilter->FilterForValue(aRowIndex, &filterOffset, &filterLength);
-+
-+#ifdef MOZ_BIG_ENDIAN
-+ for (int filterY = 0; filterY < filterLength; filterY++) {
-+ // Skia only knows LE, so we have to swizzle the input
-+ ByteSwapArray(aSrc[filterY], aRowSize);
-+ }
-+#endif
-+
- SkOpts::convolve_vertically(filterValues, filterLength, aSrc, aRowSize, aDst,
- aHasAlpha);
-+
-+#ifdef MOZ_BIG_ENDIAN
-+ // After skia is finished, we swizzle back to BE, in case
-+ // the input is used again somewhere else
-+ for (int filterY = 0; filterY < filterLength; filterY++) {
-+ ByteSwapArray(aSrc[filterY], aRowSize);
-+ }
-+ // The destination array as well
-+ ByteSwapArray(aDst, aRowSize);
-+#endif
- }
-
- /* ConvolutionFilter::ComputeResizeFactor is derived from Skia's
-diff -r 548d0a2f3a22 gfx/skia/skia/include/core/SkPreConfig.h
---- a/gfx/skia/skia/include/core/SkPreConfig.h Mon Jul 22 16:57:54 2019 +0200
-+++ b/gfx/skia/skia/include/core/SkPreConfig.h Thu Jul 25 14:27:59 2019 +0200
-@@ -73,7 +73,7 @@
- defined(__ppc__) || defined(__hppa) || \
- defined(__PPC__) || defined(__PPC64__) || \
- defined(_MIPSEB) || defined(__ARMEB__) || \
-- defined(__s390__) || \
-+ defined(__s390__) || defined(__s390x__) || \
- (defined(__sh__) && defined(__BIG_ENDIAN__)) || \
- (defined(__ia64) && defined(__BIG_ENDIAN__))
- #define SK_CPU_BENDIAN
diff --git a/user/thunderbird/skia-sucks2.patch b/user/thunderbird/skia-sucks2.patch
deleted file mode 100644
index 1a498f871..000000000
--- a/user/thunderbird/skia-sucks2.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-# HG changeset patch
-# Parent aecb4600e5da17443b224c79eee178c1d8e155e3
-For FF68, AntiAliasing of XULTexts seem to be broken on big endian (s390x). Text and icons of the sandwich-menu to the
-right of the address bar, as well as plugin-windows appears transparant, which usually means unreadable (white on white).
-
-diff -r aecb4600e5da gfx/skia/skia/include/private/SkNx.h
---- a/gfx/skia/skia/include/private/SkNx.h Tue Aug 20 09:46:55 2019 +0200
-+++ b/gfx/skia/skia/include/private/SkNx.h Mon Sep 09 10:04:06 2019 +0200
-@@ -238,7 +238,18 @@
- AI SkNx operator*(const SkNx& y) const { return fVal * y.fVal; }
- AI SkNx operator/(const SkNx& y) const { return fVal / y.fVal; }
-
-+ // On Big endian the commented out variant doesn't work,
-+ // and honestly, I have no idea why it exists in the first place.
-+ // The reason its broken is, I think, that it defaults to the double-variant of ToBits()
-+ // which gets a 64-bit integer, and FromBits returns 32-bit,
-+ // cutting off the wrong half again.
-+ // Overall, I see no reason to have ToBits and FromBits at all (even for floats/doubles).
-+ // Still we are only "fixing" this for big endian and leave little endian alone (never touch a running system)
-+#ifdef SK_CPU_BENDIAN
-+ AI SkNx operator&(const SkNx& y) const { return fVal & y.fVal; }
-+#else
- AI SkNx operator&(const SkNx& y) const { return FromBits(ToBits(fVal) & ToBits(y.fVal)); }
-+#endif
- AI SkNx operator|(const SkNx& y) const { return FromBits(ToBits(fVal) | ToBits(y.fVal)); }
- AI SkNx operator^(const SkNx& y) const { return FromBits(ToBits(fVal) ^ ToBits(y.fVal)); }
-
-diff -r aecb4600e5da gfx/skia/skia/src/opts/SkBlitMask_opts.h
---- a/gfx/skia/skia/src/opts/SkBlitMask_opts.h Tue Aug 20 09:46:55 2019 +0200
-+++ b/gfx/skia/skia/src/opts/SkBlitMask_opts.h Mon Sep 09 10:04:06 2019 +0200
-@@ -203,7 +203,13 @@
- // ~~~>
- // a = 1*aa + d(1-1*aa) = aa + d(1-aa)
- // c = 0*aa + d(1-1*aa) = d(1-aa)
-+
-+ // For big endian we have to swap the alpha-mask from 0,0,0,255 to 255,0,0,0
-+#ifdef SK_CPU_BENDIAN
-+ return Sk4px(Sk16b(aa) & Sk16b(255,0,0,0, 255,0,0,0, 255,0,0,0, 255,0,0,0))
-+#else
- return Sk4px(Sk16b(aa) & Sk16b(0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255))
-+#endif
- + d.approxMulDiv255(aa.inv());
- };
- while (h --> 0) {
diff --git a/user/thunderbird/skia-sucks3.patch b/user/thunderbird/skia-unified.patch
index 9d2ffc410..77bc56299 100644
--- a/user/thunderbird/skia-sucks3.patch
+++ b/user/thunderbird/skia-unified.patch
@@ -1,3 +1,42 @@
+https://bugzilla.mozilla.org/show_bug.cgi?id=1344659
+
+--- firefox-102.1.0/gfx/2d/Types.h
++++ firefox-102.1.0/gfx/2d/Types.h
+@@ -91,15 +91,8 @@ UNKNOWN,
+ // The following values are endian-independent synonyms. The _UINT32 suffix
+ // indicates that the name reflects the layout when viewed as a uint32_t
+ // value.
+-#if MOZ_LITTLE_ENDIAN()
+ A8R8G8B8_UINT32 = B8G8R8A8, // 0xAARRGGBB
+ X8R8G8B8_UINT32 = B8G8R8X8, // 0x00RRGGBB
+-#elif MOZ_BIG_ENDIAN()
+- A8R8G8B8_UINT32 = A8R8G8B8, // 0xAARRGGBB
+- X8R8G8B8_UINT32 = X8R8G8B8, // 0x00RRGGBB
+-#else
+-# error "bad endianness"
+-#endif
+
+ // The following values are OS and endian-independent synonyms.
+ //
+
+
+https://bugzilla.mozilla.org/show_bug.cgi?id=1325259
+
+--- firefox-102.1.0/gfx/2d/DrawTargetSkia.cpp
++++ firefox-102.1.0/gfx/2d/DrawTargetSkia.cpp
+@@ -154,8 +154,12 @@ }
+ return surfaceBounds.Intersect(bounds);
+ }
+
++#if __sparc
++static const int kARGBAlphaOffset = 0;
++#else
+ static const int kARGBAlphaOffset =
+ SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
++#endif
+
+ static bool VerifyRGBXFormat(uint8_t* aData, const IntSize& aSize,
+ const int32_t aStride, SurfaceFormat aFormat) {
# HG changeset patch
# Parent 46ea866ca3acb8bb5e1709ceb799b9c94f591dec
Problem description: Tab-titles that are too long to fit into a tab get faded out.
diff --git a/user/thunderbird/webrender.patch b/user/thunderbird/webrender.patch
new file mode 100644
index 000000000..a2457e576
--- /dev/null
+++ b/user/thunderbird/webrender.patch
@@ -0,0 +1,54 @@
+# HG changeset patch
+# User Petr Sumbera <petr.sumbera@oracle.com>
+# Date 1648114576 25200
+# Thu Mar 24 02:36:16 2022 -0700
+# Node ID 903e5f164c0ed424492eec6f388c03cbbcf99913
+# Parent 20d81e68da033746bf81acbb08490f16679853da
+Bug 1716707 [s390x] Software WebRender does not support big endian
+
+diff -r 20d81e68da03 -r 903e5f164c0e gfx/webrender_bindings/RenderCompositorSWGL.cpp
+--- a/gfx/webrender_bindings/RenderCompositorSWGL.cpp Thu Mar 24 06:57:58 2022 +0000
++++ b/gfx/webrender_bindings/RenderCompositorSWGL.cpp Thu Mar 24 02:36:16 2022 -0700
+@@ -7,6 +7,7 @@
+ #include "RenderCompositorSWGL.h"
+
+ #include "mozilla/gfx/Logging.h"
++#include "mozilla/gfx/Swizzle.h"
+ #include "mozilla/widget/CompositorWidget.h"
+
+ #ifdef MOZ_WIDGET_GTK
+@@ -235,6 +237,13 @@
+ }
+ mDT->Flush();
+
++#if MOZ_BIG_ENDIAN()
++ // One swizzle to rule them all.
++ gfx::SwizzleData(mMappedData, mMappedStride, gfx::SurfaceFormat::B8G8R8A8,
++ mMappedData, mMappedStride, gfx::SurfaceFormat::A8R8G8B8,
++ mDT->GetSize());
++#endif
++
+ // Done with the DT. Hand it back to the widget and clear out any trace of it.
+ mWidget->EndRemoteDrawingInRegion(mDT, mDirtyRegion);
+ mDirtyRegion.SetEmpty();
+diff -r 20d81e68da03 -r 903e5f164c0e image/imgFrame.cpp
+--- a/image/imgFrame.cpp Thu Mar 24 06:57:58 2022 +0000
++++ b/image/imgFrame.cpp Thu Mar 24 02:36:16 2022 -0700
+@@ -372,6 +372,17 @@
+ return NS_ERROR_OUT_OF_MEMORY;
+ }
+
++#if MOZ_BIG_ENDIAN()
++ if (aBackend == gfx::BackendType::SKIA && canUseDataSurface) {
++ // SKIA is lying about what format it returns on big endian
++ for (int ii=0; ii < mRawSurface->GetSize().Height()*mRawSurface->Stride() / 4; ++ii) {
++ uint32_t *vals = (uint32_t*)(mRawSurface->GetData());
++ uint32_t val = ((vals[ii] << 8) & 0xFF00FF00 ) | ((vals[ii] >> 8) & 0xFF00FF );
++ vals[ii] = (val << 16) | (val >> 16);
++ }
++ }
++#endif
++
+ if (!canUseDataSurface) {
+ // We used an offscreen surface, which is an "optimized" surface from
+ // imgFrame's perspective.
diff --git a/user/thunderbird/webrtc-broken.patch b/user/thunderbird/webrtc-broken.patch
deleted file mode 100644
index 85b1b1209..000000000
--- a/user/thunderbird/webrtc-broken.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff -Naur firefox-60.0.orig/media/webrtc/trunk/webrtc/system_wrappers/source/cpu_features_linux.c firefox-60.0/media/webrtc/trunk/webrtc/system_wrappers/source/cpu_features_linux.c
---- firefox-60.0.orig/media/webrtc/trunk/webrtc/system_wrappers/source/cpu_features_linux.c 2018-05-13 17:33:55.266855917 -0700
-+++ firefox-60.0/media/webrtc/trunk/webrtc/system_wrappers/source/cpu_features_linux.c 2018-05-13 20:21:08.158464933 -0700
-@@ -11,7 +11,7 @@
- #ifndef __GLIBC_PREREQ
- #define __GLIBC_PREREQ(a, b) 0
- #endif
--#if __GLIBC_PREREQ(2, 16)
-+#if __linux__
- #include <sys/auxv.h>
- #else
- #include <fcntl.h>
-@@ -29,7 +29,7 @@
- int architecture = 0;
- unsigned long hwcap = 0;
- const char* platform = NULL;
--#if __GLIBC_PREREQ(2, 16)
-+#if __linux__
- hwcap = getauxval(AT_HWCAP);
- platform = (const char*)getauxval(AT_PLATFORM);
- #else
-@@ -53,7 +53,7 @@
- }
- close(fd);
- }
--#endif // __GLIBC_PREREQ(2,16)
-+#endif // __linux__
- #if defined(__aarch64__)
- architecture = 8;
- if ((hwcap & HWCAP_FP) != 0)