Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] firefox-esr: update to 91.3.0.
@ 2021-11-20 14:23 jdnuemm
  2021-11-20 15:05 ` [PR REVIEW] " abenson
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: jdnuemm @ 2021-11-20 14:23 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 583 bytes --]

There is a new pull request by jdnuemm against master on the void-packages repository

https://github.com/jdnuemm/void-packages firefox-esr-91.3.0
https://github.com/void-linux/void-packages/pull/34167

firefox-esr: update to 91.3.0.
Testing the changes:

- I tested the changes in this PR: briefly

Local build testing:

- I built this PR locally for my native architecture, x86_64-glibc

Note:

I use the Patches from Thunderbird and sync the template with Firefox. 

[skip CI]

A patch file from https://github.com/void-linux/void-packages/pull/34167.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-firefox-esr-91.3.0-34167.patch --]
[-- Type: text/x-diff, Size: 68014 bytes --]

From ee5f98b841d15bf32b97129d16046c37bb8f9312 Mon Sep 17 00:00:00 2001
From: Johannes Daniel Nuemm <daniel.nuemm@blacktre.es>
Date: Thu, 18 Nov 2021 18:33:41 +0100
Subject: [PATCH] firefox-esr: update to 91.3.0.

---
 srcpkgs/firefox-esr/files/mozconfig           |   1 +
 srcpkgs/firefox-esr/files/vendor.js           |   2 +-
 .../patches/avoid-redefinition.patch          |  15 +
 srcpkgs/firefox-esr/patches/fix-cross.patch   |  16 -
 .../patches/fix-fortify-inline.patch          |  11 -
 .../firefox-esr/patches/fix-i386-fdlibm.patch |  18 +
 .../firefox-esr/patches/fix-python3.10.patch  | 826 ------------------
 .../firefox-esr/patches/fix-wasm-arm.patch    |  15 -
 .../patches/fix-webrtc-glibcisms.patch        |   4 +-
 .../firefox-esr/patches/flac-no-ffvpx.patch   |   5 +-
 .../patches/musl-rust.configure.patch         |  26 -
 .../firefox-esr/patches/rust-configure.patch  | 132 ++-
 .../firefox-esr/patches/rust-has-i128.patch   |  21 -
 .../firefox-esr/patches/sandbox-fork.patch    |   4 +-
 srcpkgs/firefox-esr/patches/sndio.patch       |  14 +-
 srcpkgs/firefox-esr/template                  | 127 ++-
 srcpkgs/firefox-esr/update                    |   4 +-
 17 files changed, 210 insertions(+), 1031 deletions(-)
 create mode 100644 srcpkgs/firefox-esr/patches/avoid-redefinition.patch
 delete mode 100644 srcpkgs/firefox-esr/patches/fix-cross.patch
 delete mode 100644 srcpkgs/firefox-esr/patches/fix-fortify-inline.patch
 create mode 100644 srcpkgs/firefox-esr/patches/fix-i386-fdlibm.patch
 delete mode 100644 srcpkgs/firefox-esr/patches/fix-python3.10.patch
 delete mode 100644 srcpkgs/firefox-esr/patches/fix-wasm-arm.patch
 delete mode 100644 srcpkgs/firefox-esr/patches/musl-rust.configure.patch
 delete mode 100644 srcpkgs/firefox-esr/patches/rust-has-i128.patch

diff --git a/srcpkgs/firefox-esr/files/mozconfig b/srcpkgs/firefox-esr/files/mozconfig
index 708ee9eded9b..fa5a7a42e04b 100644
--- a/srcpkgs/firefox-esr/files/mozconfig
+++ b/srcpkgs/firefox-esr/files/mozconfig
@@ -32,4 +32,5 @@ ac_add_options --enable-optimize="$CFLAGS"
 
 ac_add_options --enable-official-branding
 ac_add_options --enable-application=browser
+
 ac_add_options --allow-addon-sideload
diff --git a/srcpkgs/firefox-esr/files/vendor.js b/srcpkgs/firefox-esr/files/vendor.js
index d8d606bc15d7..5be4f1b5f3ff 100644
--- a/srcpkgs/firefox-esr/files/vendor.js
+++ b/srcpkgs/firefox-esr/files/vendor.js
@@ -1,5 +1,5 @@
 // Use LANG environment variable to choose locale
-pref("intl.locale.matchOS", true);
+pref("intl.locale.requested", "");
 
 // Disable default browser checking.
 pref("browser.shell.checkDefaultBrowser", false);
diff --git a/srcpkgs/firefox-esr/patches/avoid-redefinition.patch b/srcpkgs/firefox-esr/patches/avoid-redefinition.patch
new file mode 100644
index 000000000000..867d37c62a90
--- /dev/null
+++ b/srcpkgs/firefox-esr/patches/avoid-redefinition.patch
@@ -0,0 +1,15 @@
+Author: Rasmus Thomsen <oss@cogitri.dev>
+Reason: FF is mixing userspace net headers (net/if.h) and kernelspace ones
+(linux/if.h), leading to redefinitions. We need to include net/if.h before
+linux/if.h because linux/if.h has redifinition guards whereas net/if.h doesnt
+Upstream: No
+--- a/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c	2020-07-28 19:24:32.359751046 +0200
++++ b/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c	2020-07-28 19:24:37.856343751 +0200
+@@ -31,6 +31,7 @@
+ */
+ 
+ #if defined(LINUX)
++#include <net/if.h>
+ #include "addrs-netlink.h"
+ #include <csi_platform.h>
+ #include <assert.h>
diff --git a/srcpkgs/firefox-esr/patches/fix-cross.patch b/srcpkgs/firefox-esr/patches/fix-cross.patch
deleted file mode 100644
index fad8f9060c46..000000000000
--- a/srcpkgs/firefox-esr/patches/fix-cross.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-terrible hack to fix cross builds
-overwrite HOST_* flags to get rid of -MF
-
-note: this patch was used from firefox-77 until 80, dropped with the update to 81
-
---- a/third_party/rust/glslopt/build.rs
-+++ b/third_party/rust/glslopt/build.rs
-@@ -28,6 +28,8 @@
-     env::remove_var(format!("CXXFLAGS_{}", &target));
-     env::remove_var(format!("CFLAGS_{}", target.replace("-", "_")));
-     env::remove_var(format!("CXXFLAGS_{}", target.replace("-", "_")));
-+    env::set_var("HOST_CFLAGS", "-O2");
-+    env::set_var("HOST_CXXFLAGS", "-O2");
-
-     configure(&mut cc::Build::new())
-         .warnings(false)
diff --git a/srcpkgs/firefox-esr/patches/fix-fortify-inline.patch b/srcpkgs/firefox-esr/patches/fix-fortify-inline.patch
deleted file mode 100644
index 2498c57fc738..000000000000
--- a/srcpkgs/firefox-esr/patches/fix-fortify-inline.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/media/webrtc/signaling/src/sdp/sipcc/sdp_os_defs.h
-+++ b/media/webrtc/signaling/src/sdp/sipcc/sdp_os_defs.h
-@@ -27,8 +27,5 @@
- typedef int16_t    int16;
- typedef unsigned short ushort;
- typedef unsigned long  ulong;
--#ifndef __GNUC_STDC_INLINE__
--#define inline
--#endif
- 
- #endif /* _SDP_OS_DEFS_H_ */
diff --git a/srcpkgs/firefox-esr/patches/fix-i386-fdlibm.patch b/srcpkgs/firefox-esr/patches/fix-i386-fdlibm.patch
new file mode 100644
index 000000000000..831e5e03678d
--- /dev/null
+++ b/srcpkgs/firefox-esr/patches/fix-i386-fdlibm.patch
@@ -0,0 +1,18 @@
+# error: typedef redefinition with different types ('__double_t' (aka 'double') vs 'long double')
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1729459
+
+--- a/modules/fdlibm/src/math_private.h
++++ b/modules/fdlibm/src/math_private.h
+@@ -30,7 +30,12 @@
+  * Adapted from https://github.com/freebsd/freebsd-src/search?q=__double_t
+  */
+ 
++#if defined(__linux__) && defined(__i386__)
++// rely on glibc's double_t
++typedef long double __double_t;
++#else
+ typedef double      __double_t;
++#endif
+ typedef __double_t  double_t;
+ 
+ /*
diff --git a/srcpkgs/firefox-esr/patches/fix-python3.10.patch b/srcpkgs/firefox-esr/patches/fix-python3.10.patch
deleted file mode 100644
index 143e58782581..000000000000
--- a/srcpkgs/firefox-esr/patches/fix-python3.10.patch
+++ /dev/null
@@ -1,826 +0,0 @@
-diff -ur a/python/mach/mach/config.py b/python/mach/mach/config.py
---- a/python/mach/mach/config.py	2021-09-01 13:26:18.000000000 -0400
-+++ b/python/mach/mach/config.py	2021-11-05 15:29:12.000000000 -0400
-@@ -144,7 +144,7 @@
-     return _
- 
- 
--class ConfigSettings(collections.Mapping):
-+class ConfigSettings(collections.abc.Mapping):
-     """Interface for configuration settings.
- 
-     This is the main interface to the configuration.
-@@ -190,7 +190,7 @@
-     will result in exceptions being raised.
-     """
- 
--    class ConfigSection(collections.MutableMapping, object):
-+    class ConfigSection(collections.abc.MutableMapping, object):
-         """Represents an individual config section."""
-         def __init__(self, config, name, settings):
-             object.__setattr__(self, '_config', config)
-diff -ur a/python/mach/mach/decorators.py b/python/mach/mach/decorators.py
---- a/python/mach/mach/decorators.py	2021-09-01 13:26:18.000000000 -0400
-+++ b/python/mach/mach/decorators.py	2021-11-05 15:29:12.000000000 -0400
-@@ -140,7 +140,7 @@
-               'Conditions argument must take a list ' + \
-               'of functions. Found %s instead.'
- 
--        if not isinstance(command.conditions, collections.Iterable):
-+        if not isinstance(command.conditions, collections.abc.Iterable):
-             msg = msg % (command.name, type(command.conditions))
-             raise MachError(msg)
- 
-diff -ur a/python/mach/mach/main.py b/python/mach/mach/main.py
---- a/python/mach/mach/main.py	2021-09-01 13:26:23.000000000 -0400
-+++ b/python/mach/mach/main.py	2021-11-05 15:29:12.000000000 -0400
-@@ -16,7 +16,7 @@
- import sys
- import traceback
- import uuid
--from collections import Iterable
-+from collections.abc import Iterable
- 
- from six import string_types
- 
-diff -ur a/python/mozbuild/mozbuild/backend/configenvironment.py b/python/mozbuild/mozbuild/backend/configenvironment.py
---- a/python/mozbuild/mozbuild/backend/configenvironment.py	2021-09-01 13:26:34.000000000 -0400
-+++ b/python/mozbuild/mozbuild/backend/configenvironment.py	2021-11-05 15:29:12.000000000 -0400
-@@ -9,7 +9,8 @@
- import sys
- import json
- 
--from collections import Iterable, OrderedDict
-+from collections import OrderedDict
-+from collections.abc import Iterable
- from types import ModuleType
- 
- import mozpack.path as mozpath
-diff -ur a/python/mozbuild/mozbuild/makeutil.py b/python/mozbuild/mozbuild/makeutil.py
---- a/python/mozbuild/mozbuild/makeutil.py	2021-09-01 13:26:18.000000000 -0400
-+++ b/python/mozbuild/mozbuild/makeutil.py	2021-11-05 15:29:12.000000000 -0400
-@@ -7,7 +7,7 @@
- import os
- import re
- import six
--from collections import Iterable
-+from collections.abc import Iterable
- 
- 
- class Makefile(object):
-diff -ur a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py
---- a/python/mozbuild/mozbuild/util.py	2021-09-01 13:26:18.000000000 -0400
-+++ b/python/mozbuild/mozbuild/util.py	2021-11-05 15:29:12.000000000 -0400
-@@ -782,7 +782,7 @@
-         self._strings = StrictOrderingOnAppendList()
-         self._children = {}
- 
--    class StringListAdaptor(collections.Sequence):
-+    class StringListAdaptor(collections.abc.Sequence):
-         def __init__(self, hsl):
-             self._hsl = hsl
- 
-diff -ur a/testing/marionette/client/marionette_driver/wait.py b/testing/marionette/client/marionette_driver/wait.py
---- a/testing/marionette/client/marionette_driver/wait.py	2021-09-01 13:26:30.000000000 -0400
-+++ b/testing/marionette/client/marionette_driver/wait.py	2021-11-05 15:29:12.000000000 -0400
-@@ -82,7 +82,7 @@
- 
-         exceptions = []
-         if ignored_exceptions is not None:
--            if isinstance(ignored_exceptions, collections.Iterable):
-+            if isinstance(ignored_exceptions, collections.abc.Iterable):
-                 exceptions.extend(iter(ignored_exceptions))
-             else:
-                 exceptions.append(ignored_exceptions)
-diff -ur a/testing/mozbase/manifestparser/manifestparser/filters.py b/testing/mozbase/manifestparser/manifestparser/filters.py
---- a/testing/mozbase/manifestparser/manifestparser/filters.py	2021-09-01 13:26:23.000000000 -0400
-+++ b/testing/mozbase/manifestparser/manifestparser/filters.py	2021-11-05 15:29:12.000000000 -0400
-@@ -12,7 +12,8 @@
- 
- import itertools
- import os
--from collections import defaultdict, MutableSequence
-+from collections import defaultdict
-+from collections.abc import MutableSequence
- 
- import six
- from six import string_types
-diff -ur a/testing/mozbase/versioninfo.py b/testing/mozbase/versioninfo.py
---- a/testing/mozbase/versioninfo.py	2021-09-01 13:26:23.000000000 -0400
-+++ b/testing/mozbase/versioninfo.py	2021-11-05 15:29:12.000000000 -0400
-@@ -11,7 +11,7 @@
- 
- from __future__ import absolute_import, print_function
- 
--from collections import Iterable
-+from collections.abc import Iterable
- from distutils.version import StrictVersion
- import argparse
- import os
-diff -ur a/testing/web-platform/tests/tools/manifest/typedata.py b/testing/web-platform/tests/tools/manifest/typedata.py
---- a/testing/web-platform/tests/tools/manifest/typedata.py	2021-09-01 13:26:40.000000000 -0400
-+++ b/testing/web-platform/tests/tools/manifest/typedata.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,4 +1,4 @@
--from collections import MutableMapping
-+from collections.abc import MutableMapping
- 
- from six import itervalues, iteritems
- 
-diff -ur a/testing/web-platform/tests/tools/manifest/vcs.py b/testing/web-platform/tests/tools/manifest/vcs.py
---- a/testing/web-platform/tests/tools/manifest/vcs.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/testing/web-platform/tests/tools/manifest/vcs.py	2021-11-05 15:29:12.000000000 -0400
-@@ -3,7 +3,7 @@
- import os
- import stat
- from collections import deque
--from collections import MutableMapping
-+from collections.abc import MutableMapping
- 
- from six import with_metaclass, PY2
- 
-diff -ur a/testing/web-platform/tests/tools/third_party/attrs/tests/test_funcs.py b/testing/web-platform/tests/tools/third_party/attrs/tests/test_funcs.py
---- a/testing/web-platform/tests/tools/third_party/attrs/tests/test_funcs.py	2021-09-01 13:26:56.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/attrs/tests/test_funcs.py	2021-11-05 15:29:12.000000000 -0400
-@@ -4,7 +4,8 @@
- 
- from __future__ import absolute_import, division, print_function
- 
--from collections import Mapping, OrderedDict, Sequence
-+from collections import OrderedDict
-+from collections.abc import Mapping, Sequence
- 
- import pytest
- 
-diff -ur a/testing/web-platform/tests/tools/third_party/h2/h2/settings.py b/testing/web-platform/tests/tools/third_party/h2/h2/settings.py
---- a/testing/web-platform/tests/tools/third_party/h2/h2/settings.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/h2/h2/settings.py	2021-11-05 15:32:28.817737357 -0400
-@@ -88,7 +88,7 @@
-         )
- 
- 
--class Settings(collections.MutableMapping):
-+class Settings(collections.abc.MutableMapping):
-     """
-     An object that encapsulates HTTP/2 settings state.
- 
-diff -ur a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py
---- a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,6 +1,6 @@
- from __future__ import absolute_import, division, unicode_literals
- 
--from collections import Mapping
-+from collections.abc import Mapping
- 
- 
- class Trie(Mapping):
-diff -ur a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py
---- a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,7 +1,7 @@
- from __future__ import absolute_import, division, unicode_literals
- 
- 
--from collections import MutableMapping
-+from collections.abc import MutableMapping
- from xml.dom import minidom, Node
- import weakref
- 
-diff -ur a/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py
---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py	2021-11-05 15:29:12.000000000 -0400
-@@ -10,7 +10,7 @@
- from hyper.common.util import to_bytestring, to_bytestring_tuple
- 
- 
--class HTTPHeaderMap(collections.MutableMapping):
-+class HTTPHeaderMap(collections.abc.MutableMapping):
-     """
-     A structure that contains HTTP headers.
- 
-diff -ur a/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py
---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py	2021-09-01 13:26:56.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py	2021-11-05 15:29:12.000000000 -0400
-@@ -151,7 +151,7 @@
-         )
- 
- 
--class Settings(collections.MutableMapping):
-+class Settings(collections.abc.MutableMapping):
-     """
-     An object that encapsulates HTTP/2 settings state.
- 
-diff -ur a/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py
---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py	2021-11-05 15:29:12.000000000 -0400
-@@ -10,7 +10,7 @@
- import socket
- import base64
- 
--from collections import Iterable, Mapping
-+from collections.abc import Iterable, Mapping
- 
- import collections
- from hyperframe.frame import SettingsFrame
-@@ -295,7 +295,7 @@
-                 return
- 
-             # Iterables that set a specific content length.
--            elif isinstance(body, collections.Iterable):
-+            elif isinstance(body, collections.abc.Iterable):
-                 for item in body:
-                     try:
-                         self._sock.send(item)
-diff -ur a/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py
---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py	2021-11-05 15:29:12.000000000 -0400
-@@ -11,7 +11,7 @@
- Flag = collections.namedtuple("Flag", ["name", "bit"])
- 
- 
--class Flags(collections.MutableSet):
-+class Flags(collections.abc.MutableSet):
-     """
-     A simple MutableSet implementation that will only accept known flags as elements.
- 
-diff -ur a/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py b/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py
---- a/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py	2021-09-01 13:26:39.000000000 -0400
-+++ b/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py	2021-11-05 15:29:12.000000000 -0400
-@@ -11,7 +11,7 @@
- Flag = collections.namedtuple("Flag", ["name", "bit"])
- 
- 
--class Flags(collections.MutableSet):
-+class Flags(collections.abc.MutableSet):
-     """
-     A simple MutableSet implementation that will only accept known flags as
-     elements.
-diff -ur a/testing/web-platform/tests/tools/wptserve/wptserve/config.py b/testing/web-platform/tests/tools/wptserve/wptserve/config.py
---- a/testing/web-platform/tests/tools/wptserve/wptserve/config.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/testing/web-platform/tests/tools/wptserve/wptserve/config.py	2021-11-05 15:29:12.000000000 -0400
-@@ -2,7 +2,8 @@
- import logging
- import os
- 
--from collections import defaultdict, Mapping
-+from collections import defaultdict
-+from collections.abc import Mapping
- from six import integer_types, iteritems, itervalues, string_types
- 
- from . import sslutils
-diff -ur a/testing/web-platform/tests/webdriver/tests/support/sync.py b/testing/web-platform/tests/webdriver/tests/support/sync.py
---- a/testing/web-platform/tests/webdriver/tests/support/sync.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/testing/web-platform/tests/webdriver/tests/support/sync.py	2021-11-05 15:29:12.000000000 -0400
-@@ -81,7 +81,7 @@
- 
-         exceptions = []
-         if ignored_exceptions is not None:
--            if isinstance(ignored_exceptions, collections.Iterable):
-+            if isinstance(ignored_exceptions, collections.abc.Iterable):
-                 exceptions.extend(iter(ignored_exceptions))
-             else:
-                 exceptions.append(ignored_exceptions)
-diff -ur a/third_party/python/gyp/pylib/gyp/common.py b/third_party/python/gyp/pylib/gyp/common.py
---- a/third_party/python/gyp/pylib/gyp/common.py	2021-09-01 13:26:46.000000000 -0400
-+++ b/third_party/python/gyp/pylib/gyp/common.py	2021-11-05 15:29:12.000000000 -0400
-@@ -494,7 +494,7 @@
- 
- 
- # Based on http://code.activestate.com/recipes/576694/.
--class OrderedSet(collections.MutableSet):
-+class OrderedSet(collections.abc.MutableSet):
-   def __init__(self, iterable=None):
-     self.end = end = []
-     end += [None, end, end]         # sentinel node for doubly linked list
-diff -ur a/third_party/python/gyp/pylib/gyp/msvs_emulation.py b/third_party/python/gyp/pylib/gyp/msvs_emulation.py
---- a/third_party/python/gyp/pylib/gyp/msvs_emulation.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/gyp/pylib/gyp/msvs_emulation.py	2021-11-05 15:30:47.757760820 -0400
-@@ -91,7 +91,7 @@
-   """Add |prefix| to |element| or each subelement if element is iterable."""
-   if element is None:
-     return element
--  if (isinstance(element, collections.Iterable) and
-+  if (isinstance(element, collections.abc.Iterable) and
-       not isinstance(element, basestring)):
-     return [prefix + e for e in element]
-   else:
-@@ -104,7 +104,7 @@
-   if map is not None and element is not None:
-     if not callable(map):
-       map = map.get # Assume it's a dict, otherwise a callable to do the remap.
--    if (isinstance(element, collections.Iterable) and
-+    if (isinstance(element, collections.abc.Iterable) and
-         not isinstance(element, basestring)):
-       element = filter(None, [map(elem) for elem in element])
-     else:
-@@ -117,7 +117,7 @@
-   then add |element| to it, adding each item in |element| if it's a list or
-   tuple."""
-   if append is not None and element is not None:
--    if (isinstance(element, collections.Iterable) and
-+    if (isinstance(element, collections.abc.Iterable) and
-         not isinstance(element, basestring)):
-       append.extend(element)
-     else:
-diff -ur a/third_party/python/gyp/test/lib/TestGyp.py b/third_party/python/gyp/test/lib/TestGyp.py
---- a/third_party/python/gyp/test/lib/TestGyp.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/gyp/test/lib/TestGyp.py	2021-11-05 15:30:37.671763157 -0400
-@@ -496,7 +496,7 @@
-     if status is None:
-       kw['status'] = None
-     else:
--      if not isinstance(status, collections.Iterable): status = (status,)
-+      if not isinstance(status, collections.abc.Iterable): status = (status,)
-       kw['status'] = list(itertools.chain((0,), status))
-     self.cmake_build(gyp_file, target, **kw)
-     kw['status'] = status
-diff -ur a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/distlib/compat.py b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/distlib/compat.py
---- a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/distlib/compat.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/distlib/compat.py	2021-11-05 15:29:12.000000000 -0400
-@@ -319,7 +319,7 @@
- try:
-     callable = callable
- except NameError:   # pragma: no cover
--    from collections import Callable
-+    from collections.abc import Callable
- 
-     def callable(obj):
-         return isinstance(obj, Callable)
-@@ -475,7 +475,7 @@
- try:
-     from collections import ChainMap
- except ImportError: # pragma: no cover
--    from collections import MutableMapping
-+    from collections.abc import MutableMapping
- 
-     try:
-         from reprlib import recursive_repr as _recursive_repr
-diff -ur a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/html5lib/treebuilders/dom.py b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/html5lib/treebuilders/dom.py
---- a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/html5lib/treebuilders/dom.py	2021-09-01 13:26:46.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/html5lib/treebuilders/dom.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,7 +1,7 @@
- from __future__ import absolute_import, division, unicode_literals
- 
- 
--from collections import MutableMapping
-+from collections.abc import MutableMapping
- from xml.dom import minidom, Node
- import weakref
- 
-diff -ur a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/pyparsing.py b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/pyparsing.py
---- a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/pyparsing.py	2021-09-01 13:26:46.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/pyparsing.py	2021-11-05 15:29:12.000000000 -0400
-@@ -940,7 +940,7 @@
-     def __dir__(self):
-         return (dir(type(self)) + list(self.keys()))
- 
--collections.MutableMapping.register(ParseResults)
-+collections.abc.MutableMapping.register(ParseResults)
- 
- def col (loc,strg):
-     """Returns current column within a string, counting newlines as line separators.
-@@ -3223,7 +3223,7 @@
- 
-         if isinstance( exprs, basestring ):
-             self.exprs = [ ParserElement._literalStringClass( exprs ) ]
--        elif isinstance( exprs, collections.Iterable ):
-+        elif isinstance( exprs, collections.abc.Iterable ):
-             exprs = list(exprs)
-             # if sequence of strings provided, wrap with Literal
-             if all(isinstance(expr, basestring) for expr in exprs):
-@@ -4564,7 +4564,7 @@
-     symbols = []
-     if isinstance(strs,basestring):
-         symbols = strs.split()
--    elif isinstance(strs, collections.Iterable):
-+    elif isinstance(strs, collections.abc.Iterable):
-         symbols = list(strs)
-     else:
-         warnings.warn("Invalid argument to oneOf, expected string or iterable",
-diff -ur a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/cookies.py b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/cookies.py
---- a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/cookies.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/cookies.py	2021-11-05 15:29:12.000000000 -0400
-@@ -169,7 +169,7 @@
-     """
- 
- 
--class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
-+class RequestsCookieJar(cookielib.CookieJar, collections.abc.MutableMapping):
-     """Compatibility class; is a cookielib.CookieJar, but exposes a dict
-     interface.
- 
-diff -ur a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/models.py b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/models.py
---- a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/models.py	2021-09-01 13:26:46.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/models.py	2021-11-05 15:31:35.745749692 -0400
-@@ -174,10 +174,10 @@
-         if event not in self.hooks:
-             raise ValueError('Unsupported event specified, with event name "%s"' % (event))
- 
--        if isinstance(hook, collections.Callable):
-+        if isinstance(hook, collections.abc.Callable):
-             self.hooks[event].append(hook)
-         elif hasattr(hook, '__iter__'):
--            self.hooks[event].extend(h for h in hook if isinstance(h, collections.Callable))
-+            self.hooks[event].extend(h for h in hook if isinstance(h, collections.abc.Callable))
- 
-     def deregister_hook(self, event, hook):
-         """Deregister a previously registered hook.
-@@ -461,7 +461,7 @@
- 
-         is_stream = all([
-             hasattr(data, '__iter__'),
--            not isinstance(data, (basestring, list, tuple, collections.Mapping))
-+            not isinstance(data, (basestring, list, tuple, collections.abc.Mapping))
-         ])
- 
-         try:
-diff -ur a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/structures.py b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/structures.py
---- a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/structures.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/structures.py	2021-11-05 15:29:12.000000000 -0400
-@@ -12,7 +12,7 @@
- from .compat import OrderedDict
- 
- 
--class CaseInsensitiveDict(collections.MutableMapping):
-+class CaseInsensitiveDict(collections.abc.MutableMapping):
-     """A case-insensitive ``dict``-like object.
- 
-     Implements all methods and operations of
-@@ -71,7 +71,7 @@
-         )
- 
-     def __eq__(self, other):
--        if isinstance(other, collections.Mapping):
-+        if isinstance(other, collections.abc.Mapping):
-             other = CaseInsensitiveDict(other)
-         else:
-             return NotImplemented
-diff -ur a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/utils.py b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/utils.py
---- a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/utils.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/requests/utils.py	2021-11-05 15:31:40.157748665 -0400
-@@ -262,7 +262,7 @@
-     if isinstance(value, (str, bytes, bool, int)):
-         raise ValueError('cannot encode objects that are not 2-tuples')
- 
--    if isinstance(value, collections.Mapping):
-+    if isinstance(value, collections.abc.Mapping):
-         value = value.items()
- 
-     return list(value)
-diff -ur a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/urllib3/_collections.py b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/urllib3/_collections.py
---- a/third_party/python/pipenv/pipenv/patched/notpip/_vendor/urllib3/_collections.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/patched/notpip/_vendor/urllib3/_collections.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,5 +1,5 @@
- from __future__ import absolute_import
--from collections import Mapping, MutableMapping
-+from collections.abc import Mapping, MutableMapping
- try:
-     from threading import RLock
- except ImportError:  # Platform-specific: No threads available
-diff -ur a/third_party/python/pipenv/pipenv/vendor/jinja2/sandbox.py b/third_party/python/pipenv/pipenv/vendor/jinja2/sandbox.py
---- a/third_party/python/pipenv/pipenv/vendor/jinja2/sandbox.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/jinja2/sandbox.py	2021-11-05 15:29:12.000000000 -0400
-@@ -14,7 +14,7 @@
- """
- import types
- import operator
--from collections import Mapping
-+from collections.abc import Mapping
- from jinja2.environment import Environment
- from jinja2.exceptions import SecurityError
- from jinja2._compat import string_types, PY2
-@@ -79,7 +79,7 @@
-     pass
- 
- #: register Python 2.6 abstract base classes
--from collections import MutableSet, MutableMapping, MutableSequence
-+from collections.abc import MutableSet, MutableMapping, MutableSequence
- _mutable_set_types += (MutableSet,)
- _mutable_mapping_types += (MutableMapping,)
- _mutable_sequence_types += (MutableSequence,)
-diff -ur a/third_party/python/pipenv/pipenv/vendor/jinja2/utils.py b/third_party/python/pipenv/pipenv/vendor/jinja2/utils.py
---- a/third_party/python/pipenv/pipenv/vendor/jinja2/utils.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/jinja2/utils.py	2021-11-05 15:29:12.000000000 -0400
-@@ -482,7 +482,7 @@
- 
- # register the LRU cache as mutable mapping if possible
- try:
--    from collections import MutableMapping
-+    from collections.abc import MutableMapping
-     MutableMapping.register(LRUCache)
- except ImportError:
-     pass
-diff -ur a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/distlib/compat.py b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/distlib/compat.py
---- a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/distlib/compat.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/distlib/compat.py	2021-11-05 15:29:12.000000000 -0400
-@@ -319,7 +319,7 @@
- try:
-     callable = callable
- except NameError:   # pragma: no cover
--    from collections import Callable
-+    from collections.abc import Callable
- 
-     def callable(obj):
-         return isinstance(obj, Callable)
-@@ -475,7 +475,7 @@
- try:
-     from collections import ChainMap
- except ImportError: # pragma: no cover
--    from collections import MutableMapping
-+    from collections.abc import MutableMapping
- 
-     try:
-         from reprlib import recursive_repr as _recursive_repr
-diff -ur a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/html5lib/treebuilders/dom.py b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/html5lib/treebuilders/dom.py
---- a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/html5lib/treebuilders/dom.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/html5lib/treebuilders/dom.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,7 +1,7 @@
- from __future__ import absolute_import, division, unicode_literals
- 
- 
--from collections import MutableMapping
-+from collections.abc import MutableMapping
- from xml.dom import minidom, Node
- import weakref
- 
-diff -ur a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/pyparsing.py b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/pyparsing.py
---- a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/pyparsing.py	2021-09-01 13:26:46.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/pyparsing.py	2021-11-05 15:29:12.000000000 -0400
-@@ -940,7 +940,7 @@
-     def __dir__(self):
-         return (dir(type(self)) + list(self.keys()))
- 
--collections.MutableMapping.register(ParseResults)
-+collections.abc.MutableMapping.register(ParseResults)
- 
- def col (loc,strg):
-     """Returns current column within a string, counting newlines as line separators.
-@@ -3223,7 +3223,7 @@
- 
-         if isinstance( exprs, basestring ):
-             self.exprs = [ ParserElement._literalStringClass( exprs ) ]
--        elif isinstance( exprs, collections.Iterable ):
-+        elif isinstance( exprs, collections.abc.Iterable ):
-             exprs = list(exprs)
-             # if sequence of strings provided, wrap with Literal
-             if all(isinstance(expr, basestring) for expr in exprs):
-@@ -4564,7 +4564,7 @@
-     symbols = []
-     if isinstance(strs,basestring):
-         symbols = strs.split()
--    elif isinstance(strs, collections.Iterable):
-+    elif isinstance(strs, collections.abc.Iterable):
-         symbols = list(strs)
-     else:
-         warnings.warn("Invalid argument to oneOf, expected string or iterable",
-diff -ur a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/cookies.py b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/cookies.py
---- a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/cookies.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/cookies.py	2021-11-05 15:29:12.000000000 -0400
-@@ -169,7 +169,7 @@
-     """
- 
- 
--class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
-+class RequestsCookieJar(cookielib.CookieJar, collections.abc.MutableMapping):
-     """Compatibility class; is a cookielib.CookieJar, but exposes a dict
-     interface.
- 
-diff -ur a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/models.py b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/models.py
---- a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/models.py	2021-09-01 13:26:46.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/models.py	2021-11-05 15:31:52.397745825 -0400
-@@ -174,10 +174,10 @@
-         if event not in self.hooks:
-             raise ValueError('Unsupported event specified, with event name "%s"' % (event))
- 
--        if isinstance(hook, collections.Callable):
-+        if isinstance(hook, collections.abc.Callable):
-             self.hooks[event].append(hook)
-         elif hasattr(hook, '__iter__'):
--            self.hooks[event].extend(h for h in hook if isinstance(h, collections.Callable))
-+            self.hooks[event].extend(h for h in hook if isinstance(h, collections.abc.Callable))
- 
-     def deregister_hook(self, event, hook):
-         """Deregister a previously registered hook.
-@@ -461,7 +461,7 @@
- 
-         is_stream = all([
-             hasattr(data, '__iter__'),
--            not isinstance(data, (basestring, list, tuple, collections.Mapping))
-+            not isinstance(data, (basestring, list, tuple, collections.abc.Mapping))
-         ])
- 
-         try:
-diff -ur a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/structures.py b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/structures.py
---- a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/structures.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/structures.py	2021-11-05 15:32:02.765743413 -0400
-@@ -12,7 +12,7 @@
- from .compat import OrderedDict
- 
- 
--class CaseInsensitiveDict(collections.MutableMapping):
-+class CaseInsensitiveDict(collections.abc.MutableMapping):
-     """A case-insensitive ``dict``-like object.
- 
-     Implements all methods and operations of
-@@ -71,7 +71,7 @@
-         )
- 
-     def __eq__(self, other):
--        if isinstance(other, collections.Mapping):
-+        if isinstance(other, collections.abc.Mapping):
-             other = CaseInsensitiveDict(other)
-         else:
-             return NotImplemented
-diff -ur a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/utils.py b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/utils.py
---- a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/utils.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/requests/utils.py	2021-11-05 15:31:57.123744724 -0400
-@@ -262,7 +262,7 @@
-     if isinstance(value, (str, bytes, bool, int)):
-         raise ValueError('cannot encode objects that are not 2-tuples')
- 
--    if isinstance(value, collections.Mapping):
-+    if isinstance(value, collections.abc.Mapping):
-         value = value.items()
- 
-     return list(value)
-diff -ur a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/urllib3/_collections.py b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/urllib3/_collections.py
---- a/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/urllib3/_collections.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/pip9/_vendor/urllib3/_collections.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,5 +1,5 @@
- from __future__ import absolute_import
--from collections import Mapping, MutableMapping
-+from collections.abc import Mapping, MutableMapping
- try:
-     from threading import RLock
- except ImportError:  # Platform-specific: No threads available
-diff -ur a/third_party/python/pipenv/pipenv/vendor/requests/cookies.py b/third_party/python/pipenv/pipenv/vendor/requests/cookies.py
---- a/third_party/python/pipenv/pipenv/vendor/requests/cookies.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/requests/cookies.py	2021-11-05 15:29:12.000000000 -0400
-@@ -169,7 +169,7 @@
-     """
- 
- 
--class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
-+class RequestsCookieJar(cookielib.CookieJar, collections.abc.MutableMapping):
-     """Compatibility class; is a cookielib.CookieJar, but exposes a dict
-     interface.
- 
-diff -ur a/third_party/python/pipenv/pipenv/vendor/requests/models.py b/third_party/python/pipenv/pipenv/vendor/requests/models.py
---- a/third_party/python/pipenv/pipenv/vendor/requests/models.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/requests/models.py	2021-11-05 15:32:09.732741793 -0400
-@@ -174,10 +174,10 @@
-         if event not in self.hooks:
-             raise ValueError('Unsupported event specified, with event name "%s"' % (event))
- 
--        if isinstance(hook, collections.Callable):
-+        if isinstance(hook, collections.abc.Callable):
-             self.hooks[event].append(hook)
-         elif hasattr(hook, '__iter__'):
--            self.hooks[event].extend(h for h in hook if isinstance(h, collections.Callable))
-+            self.hooks[event].extend(h for h in hook if isinstance(h, collections.abc.Callable))
- 
-     def deregister_hook(self, event, hook):
-         """Deregister a previously registered hook.
-@@ -461,7 +461,7 @@
- 
-         is_stream = all([
-             hasattr(data, '__iter__'),
--            not isinstance(data, (basestring, list, tuple, collections.Mapping))
-+            not isinstance(data, (basestring, list, tuple, collections.abc.Mapping))
-         ])
- 
-         try:
-diff -ur a/third_party/python/pipenv/pipenv/vendor/requests/structures.py b/third_party/python/pipenv/pipenv/vendor/requests/structures.py
---- a/third_party/python/pipenv/pipenv/vendor/requests/structures.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/requests/structures.py	2021-11-05 15:29:12.000000000 -0400
-@@ -12,7 +12,7 @@
- from .compat import OrderedDict
- 
- 
--class CaseInsensitiveDict(collections.MutableMapping):
-+class CaseInsensitiveDict(collections.abc.MutableMapping):
-     """A case-insensitive ``dict``-like object.
- 
-     Implements all methods and operations of
-@@ -71,7 +71,7 @@
-         )
- 
-     def __eq__(self, other):
--        if isinstance(other, collections.Mapping):
-+        if isinstance(other, collections.abc.Mapping):
-             other = CaseInsensitiveDict(other)
-         else:
-             return NotImplemented
-diff -ur a/third_party/python/pipenv/pipenv/vendor/requests/utils.py b/third_party/python/pipenv/pipenv/vendor/requests/utils.py
---- a/third_party/python/pipenv/pipenv/vendor/requests/utils.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/requests/utils.py	2021-11-05 15:32:13.776740860 -0400
-@@ -262,7 +262,7 @@
-     if isinstance(value, (str, bytes, bool, int)):
-         raise ValueError('cannot encode objects that are not 2-tuples')
- 
--    if isinstance(value, collections.Mapping):
-+    if isinstance(value, collections.abc.Mapping):
-         value = value.items()
- 
-     return list(value)
-diff -ur a/third_party/python/pipenv/pipenv/vendor/urllib3/_collections.py b/third_party/python/pipenv/pipenv/vendor/urllib3/_collections.py
---- a/third_party/python/pipenv/pipenv/vendor/urllib3/_collections.py	2021-09-01 13:26:46.000000000 -0400
-+++ b/third_party/python/pipenv/pipenv/vendor/urllib3/_collections.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,5 +1,5 @@
- from __future__ import absolute_import
--from collections import Mapping, MutableMapping
-+from collections.abc import Mapping, MutableMapping
- try:
-     from threading import RLock
- except ImportError:  # Platform-specific: No threads available
-diff -ur a/third_party/python/pyyaml/lib3/yaml/constructor.py b/third_party/python/pyyaml/lib3/yaml/constructor.py
---- a/third_party/python/pyyaml/lib3/yaml/constructor.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/pyyaml/lib3/yaml/constructor.py	2021-11-05 15:29:12.000000000 -0400
-@@ -123,7 +123,7 @@
-         mapping = {}
-         for key_node, value_node in node.value:
-             key = self.construct_object(key_node, deep=deep)
--            if not isinstance(key, collections.Hashable):
-+            if not isinstance(key, collections.abc.Hashable):
-                 raise ConstructorError("while constructing a mapping", node.start_mark,
-                         "found unhashable key", key_node.start_mark)
-             value = self.construct_object(value_node, deep=deep)
-diff -ur a/third_party/python/requests/requests/cookies.py b/third_party/python/requests/requests/cookies.py
---- a/third_party/python/requests/requests/cookies.py	2021-09-01 13:27:05.000000000 -0400
-+++ b/third_party/python/requests/requests/cookies.py	2021-11-05 15:29:12.000000000 -0400
-@@ -161,7 +161,7 @@
-     Use .get and .set and include domain and path args in order to be more specific."""
- 
- 
--class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
-+class RequestsCookieJar(cookielib.CookieJar, collections.abc.MutableMapping):
-     """Compatibility class; is a cookielib.CookieJar, but exposes a dict
-     interface.
- 
-diff -ur a/third_party/python/requests/requests/packages/urllib3/_collections.py b/third_party/python/requests/requests/packages/urllib3/_collections.py
---- a/third_party/python/requests/requests/packages/urllib3/_collections.py	2021-09-01 13:27:13.000000000 -0400
-+++ b/third_party/python/requests/requests/packages/urllib3/_collections.py	2021-11-05 15:29:12.000000000 -0400
-@@ -1,5 +1,5 @@
- from __future__ import absolute_import
--from collections import Mapping, MutableMapping
-+from collections.abc import Mapping, MutableMapping
- try:
-     from threading import RLock
- except ImportError:  # Platform-specific: No threads available
-diff -ur a/third_party/python/requests/requests/structures.py b/third_party/python/requests/requests/structures.py
---- a/third_party/python/requests/requests/structures.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/requests/requests/structures.py	2021-11-05 15:29:12.000000000 -0400
-@@ -11,7 +11,7 @@
- import collections
- 
- 
--class CaseInsensitiveDict(collections.MutableMapping):
-+class CaseInsensitiveDict(collections.abc.MutableMapping):
-     """
-     A case-insensitive ``dict``-like object.
- 
-@@ -71,7 +71,7 @@
-         )
- 
-     def __eq__(self, other):
--        if isinstance(other, collections.Mapping):
-+        if isinstance(other, collections.abc.Mapping):
-             other = CaseInsensitiveDict(other)
-         else:
-             return NotImplemented
-diff -ur a/third_party/python/requests/requests/utils.py b/third_party/python/requests/requests/utils.py
---- a/third_party/python/requests/requests/utils.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/requests/requests/utils.py	2021-11-05 15:30:55.420759045 -0400
-@@ -189,7 +189,7 @@
-     if isinstance(value, (str, bytes, bool, int)):
-         raise ValueError('cannot encode objects that are not 2-tuples')
- 
--    if isinstance(value, collections.Mapping):
-+    if isinstance(value, collections.abc.Mapping):
-         value = value.items()
- 
-     return list(value)
-diff -ur a/third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/compat.py b/third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/compat.py
---- a/third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/compat.py	2021-09-01 13:27:00.000000000 -0400
-+++ b/third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/compat.py	2021-11-05 15:29:12.000000000 -0400
-@@ -481,7 +481,7 @@
- try:
-     from collections import ChainMap
- except ImportError: # pragma: no cover
--    from collections import MutableMapping
-+    from collections.abc import MutableMapping
- 
-     try:
-         from reprlib import recursive_repr as _recursive_repr
-diff -ur a/third_party/python/voluptuous/voluptuous/schema_builder.py b/third_party/python/voluptuous/voluptuous/schema_builder.py
---- a/third_party/python/voluptuous/voluptuous/schema_builder.py	2021-09-01 13:27:09.000000000 -0400
-+++ b/third_party/python/voluptuous/voluptuous/schema_builder.py	2021-11-05 15:30:32.399764374 -0400
-@@ -280,7 +280,7 @@
-             return schema.__voluptuous_compile__(self)
-         if isinstance(schema, Object):
-             return self._compile_object(schema)
--        if isinstance(schema, collections.Mapping):
-+        if isinstance(schema, collections.abc.Mapping):
-             return self._compile_dict(schema)
-         elif isinstance(schema, list):
-             return self._compile_list(schema)
diff --git a/srcpkgs/firefox-esr/patches/fix-wasm-arm.patch b/srcpkgs/firefox-esr/patches/fix-wasm-arm.patch
deleted file mode 100644
index a6035e876163..000000000000
--- a/srcpkgs/firefox-esr/patches/fix-wasm-arm.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/js/src/wasm/WasmSignalHandlers.cpp
-+++ b/js/src/wasm/WasmSignalHandlers.cpp
-@@ -243,9 +243,9 @@
- // If you run into compile problems on a tier-3 platform, you can disable the
- // emulation here.
- 
--#if defined(__linux__) && defined(__arm__)
--#  define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
--#endif
-+// #if defined(__linux__) && defined(__arm__)
-+// #  define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
-+// #endif
- 
- #ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
- #  include <sys/user.h>
diff --git a/srcpkgs/firefox-esr/patches/fix-webrtc-glibcisms.patch b/srcpkgs/firefox-esr/patches/fix-webrtc-glibcisms.patch
index 70910da5861e..5d17021a99f4 100644
--- a/srcpkgs/firefox-esr/patches/fix-webrtc-glibcisms.patch
+++ b/srcpkgs/firefox-esr/patches/fix-webrtc-glibcisms.patch
@@ -1,5 +1,5 @@
---- a/media/webrtc/trunk/webrtc/system_wrappers/source/cpu_features_linux.c	2019-01-29 11:20:52.298793223 +0100
-+++ b/media/webrtc/trunk/webrtc/system_wrappers/source/cpu_features_linux.c	2019-01-29 11:21:48.250250850 +0100
+--- a/third_party/libwebrtc/webrtc/system_wrappers/source/cpu_features_linux.c	2019-01-29 11:20:52.298793223 +0100
++++ b/third_party/libwebrtc/webrtc/system_wrappers/source/cpu_features_linux.c	2019-01-29 11:21:48.250250850 +0100
 @@ -14,7 +14,7 @@
  #ifndef __GLIBC_PREREQ
  #define __GLIBC_PREREQ(a, b) 0
diff --git a/srcpkgs/firefox-esr/patches/flac-no-ffvpx.patch b/srcpkgs/firefox-esr/patches/flac-no-ffvpx.patch
index 154aad63e33a..ebf48deb9720 100644
--- a/srcpkgs/firefox-esr/patches/flac-no-ffvpx.patch
+++ b/srcpkgs/firefox-esr/patches/flac-no-ffvpx.patch
@@ -12,15 +12,14 @@ index 53fc3c9937f7..b23771ab80fa 100644
  
  namespace mozilla {
  
-@@ -14,6 +15,11 @@ namespace mozilla {
+@@ -14,6 +15,10 @@ namespace mozilla {
  bool FlacDecoder::IsEnabled() {
  #ifdef MOZ_FFVPX
    return StaticPrefs::media_flac_enabled();
 +#elif defined(MOZ_FFMPEG)
 +  RefPtr<PDMFactory> platform = new PDMFactory();
 +  return StaticPrefs::media_flac_enabled() &&
-+         platform->SupportsMimeType("audio/flac"_ns,
-+                                    /* DecoderDoctorDiagnostics* */ nullptr);
++         platform->SupportsMimeType("audio/flac"_ns);
  #else
    // Until bug 1295886 is fixed.
    return false;
diff --git a/srcpkgs/firefox-esr/patches/musl-rust.configure.patch b/srcpkgs/firefox-esr/patches/musl-rust.configure.patch
deleted file mode 100644
index 0b2f7dee1d3c..000000000000
--- a/srcpkgs/firefox-esr/patches/musl-rust.configure.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/build/moz.configure/rust.configure	2019-10-28 12:05:04.930404603 +0700
-+++ b/build/moz.configure/rust.configure	2019-10-28 12:09:42.742338957 +0700
-@@ -297,11 +297,20 @@
-                     suffix = 'hf'
-                 else:
-                     suffix = ''
-+
-+                narrowed = []
-                 for p in prefixes:
-                     for c in candidates:
--                        if c.rust_target.startswith('{}-'.format(p)) and \
--                                c.rust_target.endswith(suffix):
--                            return c.rust_target
-+                        if c.rust_target.startswith('{}-'.format(p)):
-+                            narrowed.append(c.rust_target)
-+
-+                for target in narrowed:
-+                    if target.endswith(host_or_target.raw_os):
-+                        return target
-+
-+                for target in narrowed:
-+                    if target.endswith(suffix):
-+                        return target
- 
-             # See if we can narrow down on the exact alias
-             narrowed = [c for c in candidates if c.target.alias == host_or_target.alias]
diff --git a/srcpkgs/firefox-esr/patches/rust-configure.patch b/srcpkgs/firefox-esr/patches/rust-configure.patch
index 07b98d6c7cae..61fb2ba891d9 100644
--- a/srcpkgs/firefox-esr/patches/rust-configure.patch
+++ b/srcpkgs/firefox-esr/patches/rust-configure.patch
@@ -1,42 +1,112 @@
 Mozilla rustc check does not support crossbuild: let's remove it
 Remove calls to unwrap_rustup, they fail if rustup isn't present
 
---- a/build/moz.configure/rust.configure	2019-10-17 04:19:59.000000000 +0700
-+++ b/build/moz.configure/rust.configure	2019-10-22 11:48:55.616022140 +0700
-@@ -78,9 +78,6 @@
- 
+Do not try to figure out the rust target as it is broken on musl
+instead use what is set in RUST_TARGET
+
+Skip extra checks on cross builds (broken for arm*)
+
+--- a/build/moz.configure/rust.configure	2020-12-12 01:35:33.000000000 +0100
++++ b/build/moz.configure/rust.configure	2020-12-15 19:45:16.467750787 +0100
+@@ -91,9 +91,6 @@
      return unwrap
  
--rustc = unwrap_rustup(rustc, 'rustc')
--cargo = unwrap_rustup(cargo, 'cargo')
+ 
+-rustc = unwrap_rustup(rustc, "rustc")
+-cargo = unwrap_rustup(cargo, "cargo")
 -
  
- set_config('CARGO', cargo)
- set_config('RUSTC', rustc)
-@@ -348,26 +345,6 @@
+ set_config("CARGO", cargo)
+ set_config("RUSTC", rustc)
+@@ -260,7 +257,9 @@
+         data.setdefault(key, []).append(namespace(rust_target=t, target=info))
+     return data
+ 
+-
++@imports('os')
++@imports(_from='mozbuild.util', _import='ensure_unicode')
++@imports(_from='mozbuild.util', _import='system_encoding')
+ def detect_rustc_target(
+     host_or_target, compiler_info, arm_target, rust_supported_targets
+ ):
+@@ -382,12 +381,12 @@
+ 
+         return None
+ 
+-    rustc_target = find_candidate(candidates)
++    rustc_target = os.environ['RUST_TARGET']
  
-             os.write(in_fd, source)
-             os.close(in_fd)
+     if rustc_target is None:
+         die("Don't know how to translate {} for rustc".format(host_or_target.alias))
+ 
+-    return rustc_target
++    return ensure_unicode(rustc_target, system_encoding)
+ 
+ 
+ @imports("os")
+@@ -410,35 +409,6 @@
+ 
+         os.write(in_fd, ensure_binary(source))
+         os.close(in_fd)
 -
--            cmd = [
--                rustc,
--                '--crate-type', 'staticlib',
--                target_arg,
--                '-o', out_path,
--                in_path,
--            ]
+-        cmd = [
+-            rustc,
+-            "--crate-type",
+-            "staticlib",
+-            target_arg,
+-            "-o",
+-            out_path,
+-            in_path,
+-        ]
 -
--            def failed():
--                die(dedent('''\
--                Cannot compile for {} with {}
--                The target may be unsupported, or you may not have
--                a rust std library for that target installed. Try:
+-        def failed():
+-            die(
+-                dedent(
+-                    """\
+-            Cannot compile for {} with {}
+-            The target may be unsupported, or you may not have
+-            a rust std library for that target installed. Try:
 -
--                  rustup target add {}
--                '''.format(host_or_target.alias, rustc, rustc_target)))
--            check_cmd_output(*cmd, onerror=failed)
--            if not os.path.exists(out_path) or os.path.getsize(out_path) == 0:
--                failed()
-         finally:
-             os.remove(in_path)
-             os.remove(out_path)
+-              rustup target add {}
+-            """.format(
+-                        host_or_target.alias, rustc, rustc_target
+-                    )
+-                )
+-            )
+-
+-        check_cmd_output(*cmd, onerror=failed)
+-        if not os.path.exists(out_path) or os.path.getsize(out_path) == 0:
+-            failed()
+     finally:
+         os.remove(in_path)
+         os.remove(out_path)
+@@ -462,28 +432,7 @@
+         host, compiler_info, arm_target, rust_supported_targets
+     )
+     if rustc_target != rustc_host:
+-        if host.alias == rustc_target:
+-            configure_host = host.alias
+-        else:
+-            configure_host = "{}/{}".format(host.alias, rustc_target)
+-        die(
+-            dedent(
+-                """\
+-        The rust compiler host ({rustc}) is not suitable for the configure host ({configure}).
+-
+-        You can solve this by:
+-        * Set your configure host to match the rust compiler host by editing your
+-        mozconfig and adding "ac_add_options --host={rustc}".
+-        * Or, install the rust toolchain for {configure}, if supported, by running
+-        "rustup default stable-{rustc_target}"
+-        """.format(
+-                    rustc=rustc_host,
+-                    configure=configure_host,
+-                    rustc_target=rustc_target,
+-                )
+-            )
+-        )
+-    assert_rust_compile(host, rustc_target, rustc)
++        return rustc_host
+     return rustc_target
+ 
+ 
diff --git a/srcpkgs/firefox-esr/patches/rust-has-i128.patch b/srcpkgs/firefox-esr/patches/rust-has-i128.patch
deleted file mode 100644
index c25a185c1c11..000000000000
--- a/srcpkgs/firefox-esr/patches/rust-has-i128.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-The configure check fails for cross builds.
-i128 is supported since rust-1.26, so it is safe for us to assume it is always present
-
---- a/third_party/rust/num-traits/build.rs	2020-02-14 23:57:25.985355610 +0100
-+++ b/third_party/rust/num-traits/build.rs	2020-02-14 23:58:36.255710188 +0100
-@@ -1,14 +1,5 @@
--extern crate autocfg;
--
--use std::env;
--
- fn main() {
--    let ac = autocfg::new();
--    if ac.probe_type("i128") {
--        println!("cargo:rustc-cfg=has_i128");
--    } else if env::var_os("CARGO_FEATURE_I128").is_some() {
--        panic!("i128 support was not detected!");
--    }
-+    println!("cargo:rustc-cfg=has_i128");
- 
-     autocfg::rerun_path("build.rs");
- }
diff --git a/srcpkgs/firefox-esr/patches/sandbox-fork.patch b/srcpkgs/firefox-esr/patches/sandbox-fork.patch
index 328943cb0013..d4584e74b91c 100644
--- a/srcpkgs/firefox-esr/patches/sandbox-fork.patch
+++ b/srcpkgs/firefox-esr/patches/sandbox-fork.patch
@@ -2,12 +2,14 @@ make SYS_fork non-fatal, musl uses it for fork(2)
 
 --- a/security/sandbox/linux/SandboxFilter.cpp
 +++ b/security/sandbox/linux/SandboxFilter.cpp
-@@ -1253,6 +1253,8 @@
+@@ -1420,6 +1420,10 @@
          // usually do something reasonable on error.
        case __NR_clone:
          return ClonePolicy(Error(EPERM));
++#  ifdef __NR_fork
 +      case __NR_fork:
 +        return Error(ENOSYS);
++#  endif
  
  #  ifdef __NR_fadvise64
        case __NR_fadvise64:
diff --git a/srcpkgs/firefox-esr/patches/sndio.patch b/srcpkgs/firefox-esr/patches/sndio.patch
index 959fc1ec913a..68628bea8d8f 100644
--- a/srcpkgs/firefox-esr/patches/sndio.patch
+++ b/srcpkgs/firefox-esr/patches/sndio.patch
@@ -42,11 +42,11 @@
  if CONFIG['OS_TARGET'] == 'Darwin':
 --- a/build/moz.configure/old.configure	2020-06-30 12:17:04.087609070 +0200
 +++ b/build/moz.configure/old.configure	2020-06-30 12:17:04.087609070 +0200
-@@ -210,6 +210,7 @@
+@@ -88,6 +88,7 @@
  @old_configure_options(
-     '--cache-file',
-     '--datadir',
-+    '--enable-sndio',
-     '--enable-crashreporter',
-     '--enable-dbus',
-     '--enable-debug-js-modules',
+     "--cache-file",
+     "--datadir",
++    "--enable-sndio",
+     "--enable-crashreporter",
+     "--enable-dbus",
+     "--enable-debug-js-modules",
diff --git a/srcpkgs/firefox-esr/template b/srcpkgs/firefox-esr/template
index 33fa4dfaf2a0..35e7b0be93c8 100644
--- a/srcpkgs/firefox-esr/template
+++ b/srcpkgs/firefox-esr/template
@@ -3,58 +3,63 @@
 # THIS PKG MUST BE SYNCHRONIZED WITH "srcpkgs/firefox-esr-i18n".
 #
 pkgname=firefox-esr
-version=78.14.0
+version=91.3.0
 revision=1
 wrksrc="firefox-${version}"
-build_helper="rust qemu"
+build_helper="rust"
+short_desc="Mozilla Firefox web browser - Extended Support Release"
+maintainer="Orphaned <orphan@voidlinux.org>"
+license="MPL-2.0, GPL-2.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.mozilla.org/firefox/"
+distfiles="${MOZILLA_SITE}/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz"
+checksum=128b5349f112d8a0fd8698f3645ed43ea29d4b95047b7c4fd770b95d0661e96c
+
+lib32disabled=yes
+
 hostmakedepends="autoconf213 unzip zip pkg-config perl python3 yasm rust cargo
  llvm clang nodejs-lts cbindgen python nasm which tar"
-makedepends="nss-devel libjpeg-turbo-devel gtk+-devel gtk+3-devel icu-devel
+makedepends="nss-devel libjpeg-turbo-devel gtk+3-devel icu-devel
  pixman-devel libevent-devel libnotify-devel libvpx-devel
  libXrender-devel libXcomposite-devel libSM-devel libXt-devel rust-std
  libXdamage-devel freetype-devel $(vopt_if alsa alsa-lib-devel)
  $(vopt_if dbus dbus-glib-devel) $(vopt_if pulseaudio pulseaudio-devel)
  $(vopt_if xscreensaver libXScrnSaver-devel)
  $(vopt_if sndio sndio-devel) $(vopt_if jack jack-devel)"
-depends="nss>=3.53 desktop-file-utils hicolor-icon-theme"
-short_desc="Firefox browser - Extended Support Release"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="MPL-2.0, GPL-2.0-or-later, LGPL-2.1-or-later"
-homepage="https://www.mozilla.org/firefox/organizations/"
-distfiles="${MOZILLA_SITE}/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz"
-checksum=aa0e28a4150c33a165120a24f20e0373e74635c9f812732a08850d71cda3b2fa
-lib32disabled=yes
+depends="nss>=3.66 nspr>=4.32 desktop-file-utils hicolor-icon-theme"
 conflicts="firefox>=0"
 
 build_options="alsa jack dbus pulseaudio xscreensaver sndio wayland"
 build_options_default="alsa jack dbus pulseaudio xscreensaver sndio wayland"
 
-if [ "$XBPS_TARGET_NO_ATOMIC8" ]; then
-	makedepends+=" libatomic-devel"
-fi
-
 case $XBPS_TARGET_MACHINE in
-	armv[56]*) broken="required NEON extensions are not supported on armv[56]" ;;
+	armv[56]*) broken="required NEON extensions are not supported on armv6" ;;
 	ppc64*) ;;
 	ppc*) broken="xptcall bitrot" ;;
 esac
 
-CXXFLAGS="-Wno-class-memaccess -Wno-unused-function"
+if [ "$XBPS_TARGET_NO_ATOMIC8" ]; then
+	makedepends+=" libatomic-devel"
+fi
+
+# work around large debug symbols on 32-bit hosts
+# cargo:warning=cc1plus: out of memory allocating 65536 bytes after a total of 1010126848 bytes
+if [ "$XBPS_WORDSIZE" = "32" ]; then
+	nodebug=yes
+fi
 
-# We need this because cargo verifies checksums of all files
-# in vendor crates when it builds and gives us no way to
-# override or update the file sanely... so just clear out the file list
+# we need this because cargo verifies checksums of all files in vendor
+# crates when it builds and gives us no way to override or update the
+# file sanely... so just clear out the file list
 _clear_vendor_checksums() {
 	sed -i 's/\("files":{\)[^}]*/\1/' third_party/rust/$1/.cargo-checksum.json
 }
 
 post_extract() {
-	if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	case "$XBPS_TARGET_MACHINE" in
+	*-musl)
 		cp "${FILESDIR}/stab.h" toolkit/crashreporter/google-breakpad/src/
-	fi
-	# Google API key (see http://www.chromium.org/developers/how-tos/api-keys)
-	# Note: This is for Void Linux use ONLY.
-	echo -n "AIzaSyCIFdBA7eQP43R6kXRwTq7j6Mvj1ITze90" > google-api-key
+		;;
+	esac
 
 	# Mozilla API keys (see https://location.services.mozilla.com/api)
 	# Note: This is for Void Linux use ONLY.
@@ -63,20 +68,20 @@ post_extract() {
 
 post_patch() {
 	_clear_vendor_checksums num-traits
-	_clear_vendor_checksums glslopt
 }
 
 do_build() {
-	cp ${FILESDIR}/mozconfig .mozconfig
+	cp "${FILESDIR}/mozconfig" "${wrksrc}/.mozconfig"
 
-	if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	case "$XBPS_TARGET_MACHINE" in
+	*-musl)
 		echo "ac_add_options --disable-jemalloc" >>.mozconfig
 		echo "ac_add_options --disable-gold" >>.mozconfig
-		echo "ac_add_options --enable-release" >>.mozconfig
-	fi
+		;;
+	esac
 
 	case "$XBPS_TARGET_MACHINE" in
-	arm*|x86_64*|i686*)
+	x86_64*|i686*|arm*)
 		echo "ac_add_options --disable-elf-hack" >>.mozconfig
 		;;
 	esac
@@ -98,16 +103,17 @@ do_build() {
 
 		export BINDGEN_CFLAGS="--target=$XBPS_CROSS_TRIPLET \
 			--sysroot=${XBPS_CROSS_BASE} ${BINDGEN_INCLUDE_FLAGS}"
-		export HOST_CC="${CC_host}"
+		export HOST_CC=cc
 		export TARGET_CC="${CC}"
 		export HOST_CFLAGS="${XBPS_CFLAGS}"
 		export HOST_CXXFLAGS="${XBPS_CXXFLAGS}"
-		echo "ac_cv_sqlite_secure_delete=yes" >> .mozconfig
-		echo "ac_cv_sqlite_threadsafe=yes" >> .mozconfig
-		echo "ac_cv_sqlite_enable_fts3=yes" >> .mozconfig
-		echo "ac_cv_sqlite_dbstat_vtab=yes" >> .mozconfig
-		echo "ac_cv_sqlite_enable_unlock_notify=yes" >> .mozconfig
-		echo "ac_cv_prog_hostcxx_works=1" >> .mozconfig
+		export ac_cv_sqlite_secure_delete=yes \
+			ac_cv_sqlite_threadsafe=yes \
+			ac_cv_sqlite_enable_fts3=yes \
+			ac_cv_sqlite_dbstat_vtab=yes \
+			ac_cv_sqlite_enable_unlock_notify=yes \
+			ac_cv_prog_hostcxx_works=1
+
 		echo "ac_add_options --target=$XBPS_CROSS_TRIPLET" >>.mozconfig
 		echo "ac_add_options --host=$XBPS_TRIPLET" >>.mozconfig
 	else
@@ -126,19 +132,18 @@ do_build() {
 
 	# work around large debug symbols on 32-bit hosts
 	if [ "$XBPS_WORDSIZE" = "32" ]; then
-		export CFLAGS="${CFLAGS/-g/-g1}"
-		export CXXFLAGS="${CXXFLAGS/-g/-g1}"
+		echo "ac_add_options --disable-debug-symbols" >>.mozconfig
+		echo "ac_add_options --disable-debug" >>.mozconfig
 		export LDFLAGS+=" -Wl,--no-keep-memory"
 		# patch the rust debug level, this is hardcoded
-		sed -i "s/debug_info = '2'/debug_info = '1'/" \
+		vsed -i 's/debug_info = "2"/debug_info = "0"/' \
 		build/moz.configure/toolchain.configure
 	fi
 
-	# FIXME: incompatible with rust 1.48 in this release
-	#case "$XBPS_TARGET_MACHINE" in
-	#aarch64*|i686*|x86_64*)
-	#	echo "ac_add_options --enable-rust-simd" >>.mozconfig ;;
-	#esac
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*|i686*|x86_64*)
+		echo "ac_add_options --enable-rust-simd" >>.mozconfig ;;
+	esac
 
 	export LDFLAGS+=" -Wl,-rpath=/usr/lib/firefox"
 
@@ -153,9 +158,7 @@ do_build() {
 
 	export AS=$CC
 
-	cat >>.mozconfig <<EOF
-ac_add_options --with-google-location-service-api-keyfile="${wrksrc}/google-api-key"
-ac_add_options --with-google-safebrowsing-api-keyfile="${wrksrc}/google-api-key"
+	cat <<! >>.mozconfig
 ac_add_options --with-mozilla-api-keyfile="${wrksrc}/mozilla-api-key"
 ac_add_options $(vopt_enable alsa)
 ac_add_options $(vopt_enable jack)
@@ -164,42 +167,28 @@ ac_add_options $(vopt_enable dbus)
 ac_add_options $(vopt_enable dbus necko-wifi)
 ac_add_options $(vopt_enable pulseaudio)
 ac_add_options --enable-default-toolkit=$(vopt_if wayland 'cairo-gtk3-wayland' 'cairo-gtk3')
-EOF
+!
+
 	rm -f old-configure
 	./mach build
-
-	# Make langpacks for all languages
-	dir=$(ls -d obj-*/browser/locales)
-	cd ${wrksrc}/${dir}
-	for lang in ${languages[*]}; do
-		msg_normal "Making langpack for ${lang} ...\n"
-		make ${makejobs} langpack-${lang} LOCALE_MERGEDIR=.
-	done
 }
-
 do_install() {
 	export MACH_USE_SYSTEM_PYTHON=1
 	DESTDIR="$DESTDIR" ./mach install
 
-	vbin ${FILESDIR}/firefox-wayland
 	vinstall ${FILESDIR}/vendor.js 644 usr/lib/firefox/browser/defaults/preferences
 	vinstall taskcluster/docker/firefox-snap/firefox.desktop 644 usr/share/applications
 
-	for i in 16x16 22x22 24x24 32x32 48x48 256x256; do
+	for i in 16x16 22x22 24x24 32x32 48x48 128x128 256x256; do
 		vinstall ${wrksrc}/browser/branding/official/default${i%x*}.png 644 \
 			usr/share/icons/hicolor/${i}/apps firefox.png
 	done
-	vinstall ${wrksrc}/browser/branding/official/default256.png 644 \
-		usr/share/pixmaps firefox.png
 
-	# Use system-provided dictionaries
-	rm -rf ${DESTDIR}/usr/lib/firefox/{dictionaries,hyphenation}
-	ln -s /usr/share/hunspell ${DESTDIR}/usr/lib/firefox/dictionaries
-	ln -s /usr/share/hyphen ${DESTDIR}/usr/lib/firefox/hyphenation
+	# We don't want the development stuff
+	rm -rf ${DESTDIR}/usr/{include,lib/firefox-devel,share/idl}
 
 	# https://bugzilla.mozilla.org/show_bug.cgi?id=658850
 	ln -sf firefox ${DESTDIR}/usr/lib/firefox/firefox-bin
 
-	# Remove the development files - noone uses them
-	rm -rf ${DESTDIR}/usr/{include,lib/firefox-devel,share/idl}
+	vbin ${FILESDIR}/firefox-wayland
 }
diff --git a/srcpkgs/firefox-esr/update b/srcpkgs/firefox-esr/update
index 61f68de4f42a..946c8a7aaa49 100644
--- a/srcpkgs/firefox-esr/update
+++ b/srcpkgs/firefox-esr/update
@@ -1,2 +1,2 @@
-site="${MOZILLA_SITE}/firefox/releases/"
-pattern="[\d.]+(?=esr)"
+site="${MOZILLA_SITE}/${pkgname}/releases/"
+pattern="\">\K[0-9.]+(?=/</a>)"

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-11-28 14:02 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-20 14:23 [PR PATCH] firefox-esr: update to 91.3.0 jdnuemm
2021-11-20 15:05 ` [PR REVIEW] " abenson
2021-11-20 15:06 ` abenson
2021-11-21  9:58 ` [PR PATCH] [Updated] " jdnuemm
2021-11-21 10:01 ` [PR REVIEW] " jdnuemm
2021-11-21 10:09 ` jdnuemm
2021-11-26 14:26 ` Duncaen
2021-11-26 14:27 ` Duncaen
2021-11-28  9:06 ` jdnuemm
2021-11-28 14:01 ` Duncaen
2021-11-28 14:02 ` [PR PATCH] [Merged]: " Duncaen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).