From ee5f98b841d15bf32b97129d16046c37bb8f9312 Mon Sep 17 00:00:00 2001 From: Johannes Daniel Nuemm 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 +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 + #include "addrs-netlink.h" + #include + #include 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 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 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 " +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 " -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 <>.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.]+(?=/)"