diff options
Diffstat (limited to 'source/l')
31 files changed, 524 insertions, 746 deletions
diff --git a/source/l/gjs/gjs.SlackBuild b/source/l/gjs/gjs.SlackBuild index b5bea6bb3..8b3c5d146 100755 --- a/source/l/gjs/gjs.SlackBuild +++ b/source/l/gjs/gjs.SlackBuild @@ -1,8 +1,6 @@ #!/bin/sh # -# Slackware build script for gjs -# -# Copyright 2020 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2020, 2023 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -26,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=gjs VERSION=${VERSION:-$(echo gjs-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-2} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -85,7 +83,8 @@ export CFLAGS="$SLKCFLAGS" export CXXFLAGS="$SLKCFLAGS" mkdir meson-build cd meson-build -meson setup \ +# Use "unshare -n" to avoid downloading sysprof: +unshare -n meson setup \ --prefix=/usr \ --libdir=lib${LIBDIRSUFFIX} \ --libexecdir=/usr/libexec \ @@ -97,14 +96,12 @@ meson setup \ --sysconfdir=/etc \ --localstatedir=/var \ --buildtype=release \ + -Dinstalled_tests=false \ .. || exit 1 "${NINJA:=ninja}" $NUMJOBS || exit 1 DESTDIR=$PKG $NINJA install || exit 1 cd .. -# Don't ship .la files: -rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la - # Strip binaries: find $PKG | xargs file | grep -e "executable" -e "shared object" \ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null diff --git a/source/l/mozjs78/autoconf/autoconf-2.13-consolidated_fixes-1.patch b/source/l/mozjs102/autoconf/autoconf-2.13-consolidated_fixes-1.patch index 5e7b23113..5e7b23113 100644 --- a/source/l/mozjs78/autoconf/autoconf-2.13-consolidated_fixes-1.patch +++ b/source/l/mozjs102/autoconf/autoconf-2.13-consolidated_fixes-1.patch diff --git a/source/l/mozjs78/autoconf/autoconf.build b/source/l/mozjs102/autoconf/autoconf.build index 05e53f1a5..05e53f1a5 100755 --- a/source/l/mozjs78/autoconf/autoconf.build +++ b/source/l/mozjs102/autoconf/autoconf.build diff --git a/source/l/mozjs102/double_t.x86.diff b/source/l/mozjs102/double_t.x86.diff new file mode 100644 index 000000000..12f04c378 --- /dev/null +++ b/source/l/mozjs102/double_t.x86.diff @@ -0,0 +1,13 @@ +--- ./modules/fdlibm/src/math_private.h.orig 2022-06-27 21:04:57.000000000 -0500 ++++ ./modules/fdlibm/src/math_private.h 2022-06-30 13:41:46.761170878 -0500 +@@ -30,8 +30,8 @@ + * Adapted from https://github.com/freebsd/freebsd-src/search?q=__double_t + */ + +-typedef double __double_t; +-typedef __double_t double_t; ++typedef long double __double_t; ++typedef long double double_t; + + /* + * The original fdlibm code used statements like: diff --git a/source/l/mozjs78/mozjs78.SlackBuild b/source/l/mozjs102/mozjs102.SlackBuild index 9c0bdc5df..e5db5f3d4 100755 --- a/source/l/mozjs78/mozjs78.SlackBuild +++ b/source/l/mozjs102/mozjs102.SlackBuild @@ -3,7 +3,7 @@ # Slackware build script for SpiderMonkey # Copyright 2011, 2018 Robby Workman, Tuscaloosa, Alabama, USA -# Copyright 2019, 2020 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2019, 2020, 2022 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -25,7 +25,7 @@ cd $(dirname $0) ; CWD=$(pwd) -PKGNAM=mozjs78 +PKGNAM=mozjs102 SRCNAME=firefox VERSION=$(basename $(ls $SRCNAME-*.tar.?z | cut -d - -f 2 | rev | cut -f 3- -d . | rev) .source) BUILD=${BUILD:-1} @@ -33,7 +33,7 @@ BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) ARCH=i586 ;; + i?86) ARCH=i686 ;; arm*) ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$( uname -m ) ;; @@ -99,11 +99,16 @@ zcat $CWD/patches/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch.g zcat $CWD/patches/icu_sources_data-Write-command-output-to-our-stderr.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/emitter.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/init_patch.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/patches/0001-Python-Build-Use-r-instead-of-rU-file-read-modes.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/patches/0001-Skip-failing-tests-on-ppc64-and-s390x.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/patches/remove-sloppy-m4-detection-from-bundled-autoconf.patch.gz | patch -p1 --verbose || exit 1 zcat $CWD/patches/spidermonkey_checks_disable.patch.gz | patch -p1 --verbose || exit 1 -#zcat $CWD/patches/encies.armv7_disable_WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/patches/tests-Use-native-TemporaryDirectory.patch.gz | patch -p1 --verbose || exit 1 -# Patch to allow building with Python 3.10: -zcat $CWD/patches/Fixup-compatibility-of-mozbuild-with-Python-3.10.patch.gz | patch -p1 --verbose || exit 1 +# Fix header mismatch on x86 with GCC: +if [ "$ARCH" = "i686" ]; then + zcat $CWD/double_t.x86.diff.gz | patch -p1 --verbose || exit 1 +fi # Remove bundled zlib directory and use system version: rm -rf modules/zlib @@ -121,14 +126,15 @@ CXXFLAGS+="$SLKCFLAGS -fno-delete-null-pointer-checks -fno-strict-aliasing -fno- --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ - --without-system-icu \ + --with-system-icu \ --with-system-zlib \ - --enable-tests \ + --disable-tests \ --disable-strip \ --with-intl-api \ --enable-readline \ --enable-shared-js \ - --disable-optimize \ + --enable-optimize \ + --disable-debug \ --enable-pie \ --disable-jemalloc \ --build=$ARCH-slackware-linux \ @@ -143,10 +149,10 @@ rm -f $PKG/usr/lib${LIBDIRSUFFIX}/libjs_static.* rm -f $PKG/usr/bin/js*-config # Rename shared library to have a proper soname: -mv $PKG/usr/lib${LIBDIRSUFFIX}/libmozjs-78.so $PKG/usr/lib${LIBDIRSUFFIX}/libmozjs-78.so.0.0.0 +mv $PKG/usr/lib${LIBDIRSUFFIX}/libmozjs-102.so $PKG/usr/lib${LIBDIRSUFFIX}/libmozjs-102.so.0.0.0 ( cd $PKG/usr/lib${LIBDIRSUFFIX} - ln -sf libmozjs-78.so.0.0.0 libmozjs-78.so.0 - ln -sf libmozjs-78.so.0 libmozjs-78.so + ln -sf libmozjs-102.so.0.0.0 libmozjs-102.so.0 + ln -sf libmozjs-102.so.0 libmozjs-102.so ) mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION diff --git a/source/l/mozjs102/patches/0001-Python-Build-Use-r-instead-of-rU-file-read-modes.patch b/source/l/mozjs102/patches/0001-Python-Build-Use-r-instead-of-rU-file-read-modes.patch new file mode 100644 index 000000000..a20d39afb --- /dev/null +++ b/source/l/mozjs102/patches/0001-Python-Build-Use-r-instead-of-rU-file-read-modes.patch @@ -0,0 +1,109 @@ +From 0e790bd2eb846e90495eb81952cf35cc7fc8766a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> +Date: Mon, 27 Jun 2022 19:55:16 +0100 +Subject: [PATCH] Python/Build: Use r instead of rU file read modes + +Fixes Python 3.11 build +--- + python/mozbuild/mozbuild/action/process_define_files.py | 2 +- + python/mozbuild/mozbuild/backend/base.py | 2 +- + python/mozbuild/mozbuild/preprocessor.py | 6 +++--- + python/mozbuild/mozbuild/util.py | 4 ++-- + python/mozbuild/mozpack/files.py | 4 ++-- + 5 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/python/mozbuild/mozbuild/action/process_define_files.py b/python/mozbuild/mozbuild/action/process_define_files.py +index f1d401a..aca59d0 100644 +--- a/python/mozbuild/mozbuild/action/process_define_files.py ++++ b/python/mozbuild/mozbuild/action/process_define_files.py +@@ -36,7 +36,7 @@ def process_define_file(output, input): + ) and not config.substs.get("JS_STANDALONE"): + config = PartialConfigEnvironment(mozpath.join(topobjdir, "js", "src")) + +- with open(path, "rU") as input: ++ with open(path, "r") as input: + r = re.compile( + "^\s*#\s*(?P<cmd>[a-z]+)(?:\s+(?P<name>\S+)(?:\s+(?P<value>\S+))?)?", re.U + ) +diff --git a/python/mozbuild/mozbuild/backend/base.py b/python/mozbuild/mozbuild/backend/base.py +index 7bc1986..b64a709 100644 +--- a/python/mozbuild/mozbuild/backend/base.py ++++ b/python/mozbuild/mozbuild/backend/base.py +@@ -272,7 +272,7 @@ class BuildBackend(LoggingMixin): + return status + + @contextmanager +- def _write_file(self, path=None, fh=None, readmode="rU"): ++ def _write_file(self, path=None, fh=None, readmode="r"): + """Context manager to write a file. + + This is a glorified wrapper around FileAvoidWrite with integration to +diff --git a/python/mozbuild/mozbuild/preprocessor.py b/python/mozbuild/mozbuild/preprocessor.py +index f7820b9..857f1a6 100644 +--- a/python/mozbuild/mozbuild/preprocessor.py ++++ b/python/mozbuild/mozbuild/preprocessor.py +@@ -531,7 +531,7 @@ class Preprocessor: + + if args: + for f in args: +- with io.open(f, "rU", encoding="utf-8") as input: ++ with io.open(f, "r", encoding="utf-8") as input: + self.processFile(input=input, output=out) + if depfile: + mk = Makefile() +@@ -860,7 +860,7 @@ class Preprocessor: + args = self.applyFilters(args) + if not os.path.isabs(args): + args = os.path.join(self.curdir, args) +- args = io.open(args, "rU", encoding="utf-8") ++ args = io.open(args, "r", encoding="utf-8") + except Preprocessor.Error: + raise + except Exception: +@@ -914,7 +914,7 @@ class Preprocessor: + def preprocess(includes=[sys.stdin], defines={}, output=sys.stdout, marker="#"): + pp = Preprocessor(defines=defines, marker=marker) + for f in includes: +- with io.open(f, "rU", encoding="utf-8") as input: ++ with io.open(f, "r", encoding="utf-8") as input: + pp.processFile(input=input, output=output) + return pp.includes + +diff --git a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py +index 071daec..b59aabb 100644 +--- a/python/mozbuild/mozbuild/util.py ++++ b/python/mozbuild/mozbuild/util.py +@@ -236,7 +236,7 @@ class FileAvoidWrite(BytesIO): + still occur, as well as diff capture if requested. + """ + +- def __init__(self, filename, capture_diff=False, dry_run=False, readmode="rU"): ++ def __init__(self, filename, capture_diff=False, dry_run=False, readmode="r"): + BytesIO.__init__(self) + self.name = filename + assert type(capture_diff) == bool +diff --git a/python/mozbuild/mozpack/files.py b/python/mozbuild/mozpack/files.py +index 8150e72..001c497 100644 +--- a/python/mozbuild/mozpack/files.py ++++ b/python/mozbuild/mozpack/files.py +@@ -554,7 +554,7 @@ class PreprocessedFile(BaseFile): + pp = Preprocessor(defines=self.defines, marker=self.marker) + pp.setSilenceDirectiveWarnings(self.silence_missing_directive_warnings) + +- with _open(self.path, "rU") as input: ++ with _open(self.path, "r") as input: + with _open(os.devnull, "w") as output: + pp.processFile(input=input, output=output) + +@@ -611,7 +611,7 @@ class PreprocessedFile(BaseFile): + pp = Preprocessor(defines=self.defines, marker=self.marker) + pp.setSilenceDirectiveWarnings(self.silence_missing_directive_warnings) + +- with _open(self.path, "rU") as input: ++ with _open(self.path, "r") as input: + pp.processFile(input=input, output=dest, depfile=deps_out) + + dest.close() +-- +2.36.1 + diff --git a/source/l/mozjs102/patches/0001-Skip-failing-tests-on-ppc64-and-s390x.patch b/source/l/mozjs102/patches/0001-Skip-failing-tests-on-ppc64-and-s390x.patch new file mode 100644 index 000000000..5c2866473 --- /dev/null +++ b/source/l/mozjs102/patches/0001-Skip-failing-tests-on-ppc64-and-s390x.patch @@ -0,0 +1,36 @@ +From db3a0a25b97377b388532b23e73a10d246f66496 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> +Date: Mon, 3 Aug 2020 10:27:00 +0200 +Subject: [PATCH] Skip failing tests on ppc64 and s390x + +ppc64 and s390x: non262/extensions/clone-errors.js +s390x: test262/built-ins/TypedArray/prototype/set/typedarray-arg-set-values-same-buffer-other-type.js +s390x, ppc64 and aarch64: test262/built-ins/Date/UTC/fp-evaluation-order.js +--- + js/src/tests/jstests.list | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/js/src/tests/jstests.list b/js/src/tests/jstests.list +index 73ce42f..1797646 100644 +--- a/js/src/tests/jstests.list ++++ b/js/src/tests/jstests.list +@@ -53,6 +53,15 @@ skip-if(!this.hasOwnProperty("Intl")) include test262/intl402/jstests.list + skip-if(!this.hasOwnProperty("Atomics")) include test262/built-ins/Atomics/jstests.list + skip-if(!this.hasOwnProperty("SharedArrayBuffer")) include test262/built-ins/SharedArrayBuffer/jstests.list + ++# Crashes on s390x and ppc64, avoid it ++skip-if(xulRuntime.XPCOMABI.match(/s390x|ppc64-/)) script non262/extensions/clone-errors.js ++ ++# Crashes on s390x, ppc64, aarch64 ++skip-if(xulRuntime.XPCOMABI.match(/s390x|aarch64|ppc64-/)) script test262/built-ins/Date/UTC/fp-evaluation-order.js ++ ++# Crashes on s390x, avoid it ++skip-if(xulRuntime.XPCOMABI.match(/s390x/)) script test262/built-ins/TypedArray/prototype/set/typedarray-arg-set-values-same-buffer-other-type.js ++ + ##################################### + # Test262 tests disabled on browser # + ##################################### +-- +2.31.1 + + diff --git a/source/l/mozjs78/patches/copy-headers.patch b/source/l/mozjs102/patches/copy-headers.patch index dfa1fdbee..dfddcfaee 100644 --- a/source/l/mozjs78/patches/copy-headers.patch +++ b/source/l/mozjs102/patches/copy-headers.patch @@ -9,30 +9,30 @@ Patch by Philip Chimento ported forward to mozjs78 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py -index e3fc8fe..bed5ae9 100644 +index 858d4d4..8c229e8 100644 --- a/python/mozbuild/mozbuild/backend/recursivemake.py +++ b/python/mozbuild/mozbuild/backend/recursivemake.py -@@ -1457,9 +1457,9 @@ class RecursiveMakeBackend(MakeBackend): - raise Exception("Wildcards are only supported in the filename part" - " of srcdir-relative or absolute paths.") - -- install_manifest.add_pattern_link(basepath, wild, path) -+ install_manifest.add_pattern_copy(basepath, wild, path) +@@ -1533,9 +1533,9 @@ class RecursiveMakeBackend(MakeBackend): + " of srcdir-relative or absolute paths." + ) + +- install_manifest.add_pattern_link(basepath, wild, dest_dir) ++ install_manifest.add_pattern_copy(basepath, wild, dest_dir) else: -- install_manifest.add_pattern_link(f.srcdir, f, path) -+ install_manifest.add_pattern_copy(f.srcdir, f, path) +- install_manifest.add_pattern_link(f.srcdir, f, dest_dir) ++ install_manifest.add_pattern_copy(f.srcdir, f, dest_dir) elif isinstance(f, AbsolutePath): - if not f.full_path.lower().endswith(('.dll', '.pdb', '.so')): - raise Exception("Absolute paths installed to FINAL_TARGET_FILES must" -@@ -1468,7 +1468,7 @@ class RecursiveMakeBackend(MakeBackend): - install_manifest.add_optional_exists(dest) + if not f.full_path.lower().endswith((".dll", ".pdb", ".so")): + raise Exception( +@@ -1546,7 +1546,7 @@ class RecursiveMakeBackend(MakeBackend): + install_manifest.add_optional_exists(dest_file) absolute_files.append(f.full_path) else: -- install_manifest.add_link(f.full_path, dest) -+ install_manifest.add_copy(f.full_path, dest) +- install_manifest.add_link(f.full_path, dest_file) ++ install_manifest.add_copy(f.full_path, dest_file) else: - install_manifest.add_optional_exists(dest) + install_manifest.add_optional_exists(dest_file) objdir_files.append(self._pretty_path(f, backend_file)) --- -2.26.2 +-- +2.37.1 diff --git a/source/l/mozjs102/patches/emitter.patch b/source/l/mozjs102/patches/emitter.patch new file mode 100644 index 000000000..8d5aafb15 --- /dev/null +++ b/source/l/mozjs102/patches/emitter.patch @@ -0,0 +1,67 @@ +From d1d785c169345b81c76213f6dd9be32b4db60294 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> +Date: Wed, 15 Jul 2020 08:39:47 +0200 +Subject: [PATCH] Build: allow LOCAL_INCLUDES paths with topsrcdir or topobjdir + +--- + python/mozbuild/mozbuild/frontend/emitter.py | 10 --------- + .../mozbuild/test/frontend/test_emitter.py | 22 ------------------- + 2 files changed, 32 deletions(-) + +diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py +index 0b7ccef..a3c7f2f 100644 +--- a/python/mozbuild/mozbuild/frontend/emitter.py ++++ b/python/mozbuild/mozbuild/frontend/emitter.py +@@ -1365,16 +1365,6 @@ class TreeMetadataEmitter(LoggingMixin): + "(resolved to %s)" % (local_include, full_path), + context, + ) +- if ( +- full_path == context.config.topsrcdir +- or full_path == context.config.topobjdir +- ): +- raise SandboxValidationError( +- "Path specified in LOCAL_INCLUDES " +- "(%s) resolves to the topsrcdir or topobjdir (%s), which is " +- "not allowed" % (local_include, full_path), +- context, +- ) + include_obj = LocalInclude(context, local_include) + local_includes.append(include_obj.path.full_path) + yield include_obj +diff --git a/python/mozbuild/mozbuild/test/frontend/test_emitter.py b/python/mozbuild/mozbuild/test/frontend/test_emitter.py +index 99507fc..821de22 100644 +--- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py ++++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py +@@ -1076,28 +1076,6 @@ class TestEmitterBasic(unittest.TestCase): + + self.assertEqual(local_includes, expected) + +- def test_local_includes_invalid(self): +- """Test that invalid LOCAL_INCLUDES are properly detected.""" +- reader = self.reader("local_includes-invalid/srcdir") +- +- with six.assertRaisesRegex( +- self, +- SandboxValidationError, +- "Path specified in LOCAL_INCLUDES.*resolves to the " +- "topsrcdir or topobjdir", +- ): +- self.read_topsrcdir(reader) +- +- reader = self.reader("local_includes-invalid/objdir") +- +- with six.assertRaisesRegex( +- self, +- SandboxValidationError, +- "Path specified in LOCAL_INCLUDES.*resolves to the " +- "topsrcdir or topobjdir", +- ): +- self.read_topsrcdir(reader) +- + def test_local_includes_file(self): + """Test that a filename can't be used in LOCAL_INCLUDES.""" + reader = self.reader("local_includes-filename") +-- +2.37.1 + diff --git a/source/l/mozjs78/patches/fix-soname.patch b/source/l/mozjs102/patches/fix-soname.patch index 30894e44d..832326489 100644 --- a/source/l/mozjs78/patches/fix-soname.patch +++ b/source/l/mozjs102/patches/fix-soname.patch @@ -9,18 +9,18 @@ Fix backported from Debian: http://bugs.debian.org/746705 1 file changed, 2 insertions(+) diff --git a/config/rules.mk b/config/rules.mk -index 3965c88..3f92f83 100644 +index 90a9946..dc87789 100644 --- a/config/rules.mk +++ b/config/rules.mk -@@ -320,6 +320,8 @@ ifeq ($(OS_ARCH),GNU) +@@ -291,6 +291,8 @@ ifeq ($(OS_ARCH),GNU) OS_CPPFLAGS += -DPATH_MAX=1024 -DMAXPATHLEN=1024 endif - + +EXTRA_DSO_LDOPTS += -Wl,-soname,lib$(JS_LIBRARY_NAME).so.0 + # # MINGW32 # --- -2.26.2 +-- +2.37.1 diff --git a/source/l/mozjs102/patches/icu_sources_data-Write-command-output-to-our-stderr.patch b/source/l/mozjs102/patches/icu_sources_data-Write-command-output-to-our-stderr.patch new file mode 100644 index 000000000..84684250c --- /dev/null +++ b/source/l/mozjs102/patches/icu_sources_data-Write-command-output-to-our-stderr.patch @@ -0,0 +1,44 @@ +From: Simon McVittie <smcv@debian.org> +Date: Mon, 9 Oct 2017 09:23:14 +0100 +Subject: icu_sources_data: Write command output to our stderr + +Saying "See output in /tmp/foobar" is all very well for a developer +build, but on a buildd our /tmp is going to get thrown away after +the build. Just log the usual way instead. +--- + intl/icu_sources_data.py | 16 ++++------------ + 1 file changed, 4 insertions(+), 12 deletions(-) + +diff --git a/intl/icu_sources_data.py b/intl/icu_sources_data.py +index 4db52af..d62960d 100644 +--- a/intl/icu_sources_data.py ++++ b/intl/icu_sources_data.py +@@ -188,21 +188,13 @@ def update_sources(topsrcdir): + + def try_run(name, command, cwd=None, **kwargs): + try: +- with tempfile.NamedTemporaryFile(prefix=name, delete=False) as f: +- subprocess.check_call( +- command, cwd=cwd, stdout=f, stderr=subprocess.STDOUT, **kwargs +- ) +- except subprocess.CalledProcessError: +- print( +- """Error running "{}" in directory {} +- See output in {}""".format( +- " ".join(command), cwd, f.name +- ), +- file=sys.stderr, ++ subprocess.check_call( ++ command, cwd=cwd, stdout=sys.stderr, stderr=subprocess.STDOUT, **kwargs + ) ++ except subprocess.CalledProcessError: ++ print('''Error running "{}" in directory {}'''.format(' '.join(command), cwd), file=sys.stderr) + return False + else: +- os.unlink(f.name) + return True + + +-- +2.31.1 + diff --git a/source/l/mozjs78/patches/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch b/source/l/mozjs102/patches/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch index a853a16d1..8572c21fd 100644 --- a/source/l/mozjs78/patches/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch +++ b/source/l/mozjs102/patches/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch @@ -10,10 +10,10 @@ so there's nothing to normalize. Avoid needing to import all of it. 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/intl/icu_sources_data.py b/intl/icu_sources_data.py -index 98c0ccb..8cf9290 100644 +index 2936df9..4db52af 100644 --- a/intl/icu_sources_data.py +++ b/intl/icu_sources_data.py -@@ -21,7 +21,9 @@ +@@ -21,7 +21,9 @@ import subprocess import sys import tempfile @@ -24,3 +24,6 @@ index 98c0ccb..8cf9290 100644 # The following files have been determined to be dead/unused by a # semi-automated analysis. You can just remove any of the files below +-- +2.31.1 + diff --git a/source/l/mozjs102/patches/init_patch.patch b/source/l/mozjs102/patches/init_patch.patch new file mode 100644 index 000000000..28ed1d31a --- /dev/null +++ b/source/l/mozjs102/patches/init_patch.patch @@ -0,0 +1,28 @@ +From 00414eb67ab0591911167155963b5524fbf2b0c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> +Date: Mon, 9 Aug 2021 14:38:58 +0200 +Subject: [PATCH] Don't throw InvalidOptionError on invalid options + +--- + python/mozbuild/mozbuild/configure/__init__.py | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py +index f3167f6..c9e1132 100644 +--- a/python/mozbuild/mozbuild/configure/__init__.py ++++ b/python/mozbuild/mozbuild/configure/__init__.py +@@ -557,10 +557,7 @@ class ConfigureSandbox(dict): + for arg in self._helper: + without_value = arg.split("=", 1)[0] + msg = "Unknown option: %s" % without_value +- if self._help: +- self._logger.warning(msg) +- else: +- raise InvalidOptionError(msg) ++ self._logger.warning(msg) + + # Run the execution queue + for func, args in self._execution_queue: +-- +2.31.1 + diff --git a/source/l/mozjs102/patches/remove-sloppy-m4-detection-from-bundled-autoconf.patch b/source/l/mozjs102/patches/remove-sloppy-m4-detection-from-bundled-autoconf.patch new file mode 100644 index 000000000..10b8b16ea --- /dev/null +++ b/source/l/mozjs102/patches/remove-sloppy-m4-detection-from-bundled-autoconf.patch @@ -0,0 +1,29 @@ +From 2d99a7b076578a3394fb9d5be6eb44f9cfebc681 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> +Date: Mon, 9 Aug 2021 16:15:37 +0200 +Subject: [PATCH] Remove sloppy m4 detection from bundled autoconf + +--- + build/autoconf/autoconf.sh | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/build/autoconf/autoconf.sh b/build/autoconf/autoconf.sh +index ceb8a25..606c74e 100644 +--- a/build/autoconf/autoconf.sh ++++ b/build/autoconf/autoconf.sh +@@ -114,12 +114,6 @@ fi + + # Use the frozen version of Autoconf if available. + r= f= +-# Some non-GNU m4's don't reject the --help option, so give them /dev/null. +-case `$M4 --help < /dev/null 2>&1` in +-*reload-state*) test -r $AC_MACRODIR/autoconf.m4f && { r=--reload f=f; } ;; +-*traditional*) ;; +-*) echo Autoconf requires GNU m4 1.1 or later >&2; rm -f $tmpin; exit 1 ;; +-esac + + $M4 -I$AC_MACRODIR $use_localdir $r autoconf.m4$f $infile > $tmpout || + { rm -f $tmpin $tmpout; exit 2; } +-- +2.31.1 + diff --git a/source/l/mozjs102/patches/spidermonkey_checks_disable.patch b/source/l/mozjs102/patches/spidermonkey_checks_disable.patch new file mode 100644 index 000000000..451d3eef4 --- /dev/null +++ b/source/l/mozjs102/patches/spidermonkey_checks_disable.patch @@ -0,0 +1,22 @@ +From 6ebe8ce6a3267c96454de3cd453269b4c4053a3e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> +Date: Mon, 9 Aug 2021 14:41:14 +0200 +Subject: [PATCH] Don't die on SpiderMonkey checks + +--- + config/run_spidermonkey_checks.py | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/config/run_spidermonkey_checks.py b/config/run_spidermonkey_checks.py +index 0f842d9..b49db52 100644 +--- a/config/run_spidermonkey_checks.py ++++ b/config/run_spidermonkey_checks.py +@@ -11,5 +11,3 @@ import sys + def main(output, lib_file, *scripts): + for script in scripts: + retcode = subprocess.call([sys.executable, script], cwd=buildconfig.topsrcdir) +- if retcode != 0: +- raise Exception(script + " failed") +-- +2.31.1 + diff --git a/source/l/mozjs102/patches/tests-Use-native-TemporaryDirectory.patch b/source/l/mozjs102/patches/tests-Use-native-TemporaryDirectory.patch new file mode 100644 index 000000000..054685c1e --- /dev/null +++ b/source/l/mozjs102/patches/tests-Use-native-TemporaryDirectory.patch @@ -0,0 +1,66 @@ +From 1af9fdd2124547099eb0cf5a71b513ef5592dbf9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> +Date: Tue, 10 Aug 2021 00:00:50 +0200 +Subject: [PATCH] Tests: Use native TemporaryDirectory + +Without ugly wrapper for Py < 3.2 that doesn't work half of the times... +--- + js/src/jit-test/jit_test.py | 2 +- + js/src/tests/jstests.py | 2 +- + js/src/tests/lib/tempfile.py | 17 +---------------- + 3 files changed, 3 insertions(+), 18 deletions(-) + +diff --git a/js/src/jit-test/jit_test.py b/js/src/jit-test/jit_test.py +index f5d7794..8d443aa 100755 +--- a/js/src/jit-test/jit_test.py ++++ b/js/src/jit-test/jit_test.py +@@ -38,7 +38,7 @@ from lib.tests import ( + get_environment_overlay, + change_env, + ) +-from lib.tempfile import TemporaryDirectory ++from tempfile import TemporaryDirectory + + + def which(name): +diff --git a/js/src/tests/jstests.py b/js/src/tests/jstests.py +index 6fa2f5f..53ceff6 100755 +--- a/js/src/tests/jstests.py ++++ b/js/src/tests/jstests.py +@@ -37,7 +37,7 @@ from lib.tests import ( + from lib.results import ResultsSink, TestOutput + from lib.progressbar import ProgressBar + from lib.adaptor import xdr_annotate +-from lib.tempfile import TemporaryDirectory ++from tempfile import TemporaryDirectory + + if sys.platform.startswith("linux") or sys.platform.startswith("darwin"): + from lib.tasks_unix import run_all_tests +diff --git a/js/src/tests/lib/tempfile.py b/js/src/tests/lib/tempfile.py +index ecc21c9..f0a1fa3 100644 +--- a/js/src/tests/lib/tempfile.py ++++ b/js/src/tests/lib/tempfile.py +@@ -2,19 +2,4 @@ + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + from __future__ import absolute_import +- +-try: +- # Python 3.2 +- from tempfile import TemporaryDirectory +-except ImportError: +- import tempfile +- import shutil +- from contextlib import contextmanager +- +- @contextmanager +- def TemporaryDirectory(*args, **kwds): +- d = tempfile.mkdtemp(*args, **kwds) +- try: +- yield d +- finally: +- shutil.rmtree(d) ++from tempfile import TemporaryDirectory +-- +2.31.1 + diff --git a/source/l/mozjs78/patches/tests-increase-timeout.patch b/source/l/mozjs102/patches/tests-increase-timeout.patch index c86cca403..2ba725ce9 100644 --- a/source/l/mozjs78/patches/tests-increase-timeout.patch +++ b/source/l/mozjs102/patches/tests-increase-timeout.patch @@ -9,18 +9,18 @@ Ported forward from Debian: https://bugs.debian.org/878284 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/src/Makefile.in b/js/src/Makefile.in -index b86aeed..d68655a 100644 +index 6daed72..16db2de 100644 --- a/js/src/Makefile.in +++ b/js/src/Makefile.in @@ -53,7 +53,7 @@ check:: check-js-msg - + check-jstests: $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON3) -u $(srcdir)/tests/jstests.py \ - --no-progress --format=automation --timeout 300 \ + --no-progress --format=automation --timeout 600 \ $(JSTESTS_EXTRA_ARGS) \ - $(DIST)/bin/$(JS_SHELL_NAME)$(BIN_SUFFIX) - --- -2.26.2 + $(DIST)/bin/js$(BIN_SUFFIX) + +-- +2.37.1 diff --git a/source/l/mozjs102/slack-desc b/source/l/mozjs102/slack-desc new file mode 100644 index 000000000..00b13046e --- /dev/null +++ b/source/l/mozjs102/slack-desc @@ -0,0 +1,20 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +mozjs102: mozjs102 (Mozilla's JavaScript Engine) +mozjs102: +mozjs102: SpiderMonkey is Mozilla's JavaScript engine written in C/C++. It is +mozjs102: used in various Mozilla products (including Firefox) and is available +mozjs102: under MPL/GPL/LGPL tri-license. +mozjs102: +mozjs102: Homepage: +mozjs102: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey +mozjs102: +mozjs102: +mozjs102: +mozjs102: diff --git a/source/l/mozjs78/patches/Fixup-compatibility-of-mozbuild-with-Python-3.10.patch b/source/l/mozjs78/patches/Fixup-compatibility-of-mozbuild-with-Python-3.10.patch deleted file mode 100644 index 6a27d5bcf..000000000 --- a/source/l/mozjs78/patches/Fixup-compatibility-of-mozbuild-with-Python-3.10.patch +++ /dev/null @@ -1,297 +0,0 @@ -From a88d0c8e27b48344942187c2611bb121bde9332d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> -Date: Tue, 13 Jul 2021 11:46:20 +0200 -Subject: [PATCH] Fixup compatibility of mozbuild with Python 3.10 - ---- - python/mach/mach/config.py | 4 ++-- - python/mach/mach/decorators.py | 2 +- - python/mozbuild/mozbuild/backend/configenvironment.py | 3 ++- - python/mozbuild/mozbuild/makeutil.py | 2 +- - python/mozbuild/mozbuild/util.py | 2 +- - testing/marionette/client/marionette_driver/wait.py | 2 +- - testing/mozbase/manifestparser/manifestparser/filters.py | 3 ++- - testing/mozbase/versioninfo.py | 2 +- - testing/web-platform/tests/tools/manifest/vcs.py | 2 +- - .../web-platform/tests/tools/third_party/h2/h2/settings.py | 2 +- - .../tests/tools/third_party/html5lib/html5lib/_trie/_base.py | 2 +- - .../tools/third_party/html5lib/html5lib/treebuilders/dom.py | 2 +- - .../tests/tools/third_party/hyper/hyper/common/headers.py | 2 +- - .../tests/tools/third_party/hyper/hyper/h2/settings.py | 2 +- - .../tests/tools/third_party/hyper/hyper/http11/connection.py | 4 ++-- - .../third_party/hyper/hyper/packages/hyperframe/flags.py | 2 +- - .../tests/tools/third_party/hyperframe/hyperframe/flags.py | 2 +- - testing/web-platform/tests/tools/wptserve/wptserve/config.py | 3 ++- - testing/web-platform/tests/webdriver/tests/support/sync.py | 2 +- - 19 files changed, 24 insertions(+), 21 deletions(-) - -diff --git a/python/mach/mach/config.py b/python/mach/mach/config.py -index 7210eca82..edb4d2e93 100644 ---- a/python/mach/mach/config.py -+++ b/python/mach/mach/config.py -@@ -144,7 +144,7 @@ def reraise_attribute_error(func): - 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 @@ class ConfigSettings(collections.Mapping): - 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 --git a/python/mach/mach/decorators.py b/python/mach/mach/decorators.py -index 27f7f34a6..5f63271a3 100644 ---- a/python/mach/mach/decorators.py -+++ b/python/mach/mach/decorators.py -@@ -140,7 +140,7 @@ def CommandProvider(cls): - '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 --git a/python/mozbuild/mozbuild/backend/configenvironment.py b/python/mozbuild/mozbuild/backend/configenvironment.py -index 20d1a9fa6..8747958bd 100644 ---- a/python/mozbuild/mozbuild/backend/configenvironment.py -+++ b/python/mozbuild/mozbuild/backend/configenvironment.py -@@ -9,7 +9,8 @@ import six - 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 --git a/python/mozbuild/mozbuild/makeutil.py b/python/mozbuild/mozbuild/makeutil.py -index 4da1a3b26..4ce56848c 100644 ---- a/python/mozbuild/mozbuild/makeutil.py -+++ b/python/mozbuild/mozbuild/makeutil.py -@@ -7,7 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals - import os - import re - import six --from collections import Iterable -+from collections.abc import Iterable - - - class Makefile(object): -diff --git a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py -index 044cf645c..98ed3ef52 100644 ---- a/python/mozbuild/mozbuild/util.py -+++ b/python/mozbuild/mozbuild/util.py -@@ -782,7 +782,7 @@ class HierarchicalStringList(object): - self._strings = StrictOrderingOnAppendList() - self._children = {} - -- class StringListAdaptor(collections.Sequence): -+ class StringListAdaptor(collections.abc.Sequence): - def __init__(self, hsl): - self._hsl = hsl - -diff --git a/testing/marionette/client/marionette_driver/wait.py b/testing/marionette/client/marionette_driver/wait.py -index eeaa1e23d..c147f463f 100644 ---- a/testing/marionette/client/marionette_driver/wait.py -+++ b/testing/marionette/client/marionette_driver/wait.py -@@ -82,7 +82,7 @@ class Wait(object): - - 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 --git a/testing/mozbase/manifestparser/manifestparser/filters.py b/testing/mozbase/manifestparser/manifestparser/filters.py -index 287ee033b..b1d608003 100644 ---- a/testing/mozbase/manifestparser/manifestparser/filters.py -+++ b/testing/mozbase/manifestparser/manifestparser/filters.py -@@ -12,7 +12,8 @@ from __future__ import absolute_import - - 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 --git a/testing/mozbase/versioninfo.py b/testing/mozbase/versioninfo.py -index 91d1a0473..8c1680069 100755 ---- a/testing/mozbase/versioninfo.py -+++ b/testing/mozbase/versioninfo.py -@@ -11,7 +11,7 @@ from commit messages. - - 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 --git a/testing/web-platform/tests/tools/manifest/vcs.py b/testing/web-platform/tests/tools/manifest/vcs.py -index 7c0feeb81..05ee19c7c 100644 ---- a/testing/web-platform/tests/tools/manifest/vcs.py -+++ b/testing/web-platform/tests/tools/manifest/vcs.py -@@ -3,7 +3,7 @@ import json - import os - import stat - from collections import deque --from collections import MutableMapping -+from collections.abc import MutableMapping - - from six import with_metaclass, PY2 - -diff --git a/testing/web-platform/tests/tools/third_party/h2/h2/settings.py b/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -index 3da720329..e097630e9 100644 ---- a/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -+++ b/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -@@ -88,7 +88,7 @@ class ChangedSetting: - ) - - --class Settings(collections.MutableMapping): -+class Settings(collections.abc.MutableMapping): - """ - An object that encapsulates HTTP/2 settings state. - -diff --git 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 -index a1158bbbf..a9295a2ba 100644 ---- 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 -@@ -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 --git 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 -index dcfac220b..818a33433 100644 ---- 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 -@@ -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 --git 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 -index 655a591ac..6454f550a 100644 ---- 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 -@@ -10,7 +10,7 @@ import collections - 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 --git 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 -index fedc5e3c4..040afea92 100755 ---- 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 -@@ -151,7 +151,7 @@ class ChangedSetting: - ) - - --class Settings(collections.MutableMapping): -+class Settings(collections.abc.MutableMapping): - """ - An object that encapsulates HTTP/2 settings state. - -diff --git 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 -index 61361c358..a214311d2 100644 ---- 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 -@@ -10,7 +10,7 @@ import os - 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 @@ class HTTP11Connection(object): - 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 --git 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 -index e8f630056..8f2ea689b 100644 ---- 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 -@@ -11,7 +11,7 @@ import collections - 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 --git a/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py b/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -index 05b35017e..14c352e10 100644 ---- a/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -+++ b/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -@@ -11,7 +11,7 @@ import collections - 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 --git a/testing/web-platform/tests/tools/wptserve/wptserve/config.py b/testing/web-platform/tests/tools/wptserve/wptserve/config.py -index 7766565fe..3c1c36d6f 100644 ---- a/testing/web-platform/tests/tools/wptserve/wptserve/config.py -+++ b/testing/web-platform/tests/tools/wptserve/wptserve/config.py -@@ -2,7 +2,8 @@ import copy - 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 --git a/testing/web-platform/tests/webdriver/tests/support/sync.py b/testing/web-platform/tests/webdriver/tests/support/sync.py -index 3fc77131c..8e8f6b819 100644 ---- a/testing/web-platform/tests/webdriver/tests/support/sync.py -+++ b/testing/web-platform/tests/webdriver/tests/support/sync.py -@@ -81,7 +81,7 @@ class Poll(object): - - 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) --- -2.31.1 - diff --git a/source/l/mozjs78/patches/armv7_disable_WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS.patch b/source/l/mozjs78/patches/armv7_disable_WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS.patch deleted file mode 100644 index 0cb26ac76..000000000 --- a/source/l/mozjs78/patches/armv7_disable_WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- firefox-68.0/js/src/wasm/WasmSignalHandlers.cpp -+++ firefox-68.0/js/src/wasm/WasmSignalHandlers.cpp -@@ -243,7 +243,7 @@ - // If you run into compile problems on a tier-3 platform, you can disable the - // emulation here. - --#if defined(__linux__) && defined(__arm__) -+#if 0 && defined(__linux__) && defined(__arm__) - # define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS - #endif diff --git a/source/l/mozjs78/patches/emitter.patch b/source/l/mozjs78/patches/emitter.patch deleted file mode 100644 index 15e752ba7..000000000 --- a/source/l/mozjs78/patches/emitter.patch +++ /dev/null @@ -1,61 +0,0 @@ -From d1d785c169345b81c76213f6dd9be32b4db60294 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= <fzatlouk@redhat.com> -Date: Wed, 15 Jul 2020 08:39:47 +0200 -Subject: [PATCH] Build: allow LOCAL_INCLUDES paths with topsrcdir or topobjdir - ---- - python/mozbuild/mozbuild/frontend/emitter.py | 6 ------ - .../mozbuild/test/frontend/test_emitter.py | 20 ------------------- - 2 files changed, 26 deletions(-) - -diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py -index 8d5ab8e..65c43ff 100644 ---- a/python/mozbuild/mozbuild/frontend/emitter.py -+++ b/python/mozbuild/mozbuild/frontend/emitter.py -@@ -1239,12 +1239,6 @@ class TreeMetadataEmitter(LoggingMixin): - 'is a filename, but a directory is required: %s ' - '(resolved to %s)' % (local_include, full_path), - context) -- if (full_path == context.config.topsrcdir or -- full_path == context.config.topobjdir): -- raise SandboxValidationError( -- 'Path specified in LOCAL_INCLUDES ' -- '(%s) resolves to the topsrcdir or topobjdir (%s), which is ' -- 'not allowed' % (local_include, full_path), context) - include_obj = LocalInclude(context, local_include) - local_includes.append(include_obj.path.full_path) - yield include_obj -diff --git a/python/mozbuild/mozbuild/test/frontend/test_emitter.py b/python/mozbuild/mozbuild/test/frontend/test_emitter.py -index e8cbd81..d45ccee 100644 ---- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py -+++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py -@@ -1040,26 +1040,6 @@ class TestEmitterBasic(unittest.TestCase): - - self.assertEqual(local_includes, expected) - -- def test_local_includes_invalid(self): -- """Test that invalid LOCAL_INCLUDES are properly detected.""" -- reader = self.reader('local_includes-invalid/srcdir') -- -- with six.assertRaisesRegex( -- self, -- SandboxValidationError, -- 'Path specified in LOCAL_INCLUDES.*resolves to the ' -- 'topsrcdir or topobjdir'): -- self.read_topsrcdir(reader) -- -- reader = self.reader('local_includes-invalid/objdir') -- -- with six.assertRaisesRegex( -- self, -- SandboxValidationError, -- 'Path specified in LOCAL_INCLUDES.*resolves to the ' -- 'topsrcdir or topobjdir'): -- self.read_topsrcdir(reader) -- - def test_local_includes_file(self): - """Test that a filename can't be used in LOCAL_INCLUDES.""" - reader = self.reader('local_includes-filename') --- -2.26.2 - diff --git a/source/l/mozjs78/patches/icu_sources_data-Write-command-output-to-our-stderr.patch b/source/l/mozjs78/patches/icu_sources_data-Write-command-output-to-our-stderr.patch deleted file mode 100644 index e2ed48454..000000000 --- a/source/l/mozjs78/patches/icu_sources_data-Write-command-output-to-our-stderr.patch +++ /dev/null @@ -1,34 +0,0 @@ -From: Simon McVittie <smcv@debian.org> -Date: Mon, 9 Oct 2017 09:23:14 +0100 -Subject: icu_sources_data: Write command output to our stderr - -Saying "See output in /tmp/foobar" is all very well for a developer -build, but on a buildd our /tmp is going to get thrown away after -the build. Just log the usual way instead. ---- - intl/icu_sources_data.py | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/intl/icu_sources_data.py b/intl/icu_sources_data.py -index 8cf9290..7d2d983 100644 ---- a/intl/icu_sources_data.py -+++ b/intl/icu_sources_data.py -@@ -187,16 +187,13 @@ - - def try_run(name, command, cwd=None, **kwargs): - try: -- with tempfile.NamedTemporaryFile(prefix=name, delete=False) as f: -- subprocess.check_call(command, cwd=cwd, stdout=f, -- stderr=subprocess.STDOUT, **kwargs) -+ subprocess.check_call(command, cwd=cwd, stdout=sys.stderr, -+ stderr=subprocess.STDOUT, **kwargs) - except subprocess.CalledProcessError: -- print('''Error running "{}" in directory {} -- See output in {}'''.format(' '.join(command), cwd, f.name), -- file=sys.stderr) -+ print('''Error running "{}" in directory {}'''.format(' '.join(command), cwd), -+ file=sys.stderr) - return False - else: -- os.unlink(f.name) - return True diff --git a/source/l/mozjs78/patches/init_patch.patch b/source/l/mozjs78/patches/init_patch.patch deleted file mode 100644 index fd09eb797..000000000 --- a/source/l/mozjs78/patches/init_patch.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/python/mozbuild/mozbuild/configure/__init__.py -+++ b/python/mozbuild/mozbuild/configure/__init__.py -@@ -473,8 +473,8 @@ - msg = 'Unknown option: %s' % without_value - if self._help: - self._logger.warning(msg) -- else: -- raise InvalidOptionError(msg) -+ #else: -+ # raise InvalidOptionError(msg) - - # Run the execution queue - for func, args in self._execution_queue: diff --git a/source/l/mozjs78/patches/spidermonkey_checks_disable.patch b/source/l/mozjs78/patches/spidermonkey_checks_disable.patch deleted file mode 100644 index 14ba0ad71..000000000 --- a/source/l/mozjs78/patches/spidermonkey_checks_disable.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/config/run_spidermonkey_checks.py -+++ b/config/run_spidermonkey_checks.py -@@ -11,5 +11,5 @@ - for script in scripts: - retcode = subprocess.call( - [sys.executable, script], cwd=buildconfig.topsrcdir) -- if retcode != 0: -- raise Exception(script + " failed") -+ #if retcode != 0: -+ # raise Exception(script + " failed") diff --git a/source/l/mozjs78/patches/spidermonkey_style_check_disable_s390x.patch b/source/l/mozjs78/patches/spidermonkey_style_check_disable_s390x.patch deleted file mode 100644 index 690c1c57d..000000000 --- a/source/l/mozjs78/patches/spidermonkey_style_check_disable_s390x.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/config/check_spidermonkey_style.py -+++ b/config/check_spidermonkey_style.py - -@@ -766,6 +766,7 @@ - - - def main(): -+ sys.exit(0) - if sys.argv[1:] == ["--fixup"]: - # Sort #include directives in-place. Fixup mode doesn't solve - # all possible silliness that the script checks for; it's just a diff --git a/source/l/mozjs78/slack-desc b/source/l/mozjs78/slack-desc deleted file mode 100644 index 94125293d..000000000 --- a/source/l/mozjs78/slack-desc +++ /dev/null @@ -1,20 +0,0 @@ -# HOW TO EDIT THIS FILE: -# The "handy ruler" below makes it easier to edit a package description. Line -# up the first '|' above the ':' following the base package name, and the '|' -# on the right side marks the last column you can put a character in. You must -# make exactly 11 lines for the formatting to be correct. It's also -# customary to leave one space after the ':'. - - |-----handy-ruler------------------------------------------------------| -mozjs78: mozjs78 (Mozilla's JavaScript Engine) -mozjs78: -mozjs78: SpiderMonkey is Mozilla's JavaScript engine written in C/C++. It is -mozjs78: used in various Mozilla products (including Firefox) and is available -mozjs78: under MPL/GPL/LGPL tri-license. -mozjs78: -mozjs78: Homepage: -mozjs78: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey -mozjs78: -mozjs78: -mozjs78: -mozjs78: diff --git a/source/l/polkit/0001-configure-fix-elogind-support.patch b/source/l/polkit/0001-configure-fix-elogind-support.patch deleted file mode 100644 index 4c40bd9b2..000000000 --- a/source/l/polkit/0001-configure-fix-elogind-support.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 08bb656496cd3d6213bbe9473f63f2d4a110da6e Mon Sep 17 00:00:00 2001 -From: Rasmus Thomsen <cogitri@exherbo.org> -Date: Wed, 11 Apr 2018 13:14:14 +0200 -Subject: [PATCH] configure: fix elogind support - -HAVE_LIBSYSTEMD is used to determine which source files to use. -We have to check if either have_libsystemd or have_libelogind is -true, as both of these need the source files which are used when -HAVE_LIBSYSTEMD is true. ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 36df239..da47ecb 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -221,7 +221,7 @@ AS_IF([test "x$cross_compiling" != "xyes" ], [ - - AC_SUBST(LIBSYSTEMD_CFLAGS) - AC_SUBST(LIBSYSTEMD_LIBS) --AM_CONDITIONAL(HAVE_LIBSYSTEMD, [test "$have_libsystemd" = "yes"], [Using libsystemd]) -+AM_CONDITIONAL(HAVE_LIBSYSTEMD, [test "$have_libsystemd" = "yes" || test "$have_libelogind" = "yes" ], [Using libsystemd]) - - dnl --------------------------------------------------------------------------- - dnl - systemd unit / service files --- -2.17.0 - diff --git a/source/l/polkit/CVE-2021-4115.patch b/source/l/polkit/CVE-2021-4115.patch deleted file mode 100644 index 3cb55819c..000000000 --- a/source/l/polkit/CVE-2021-4115.patch +++ /dev/null @@ -1,71 +0,0 @@ -diff --git a/src/polkit/polkitsystembusname.c b/src/polkit/polkitsystembusname.c -index 8ed1363..2fbf5f1 100644 ---- a/src/polkit/polkitsystembusname.c -+++ b/src/polkit/polkitsystembusname.c -@@ -62,6 +62,10 @@ enum - PROP_NAME, - }; - -+ -+guint8 dbus_call_respond_fails; // has to be global because of callback -+ -+ - static void subject_iface_init (PolkitSubjectIface *subject_iface); - - G_DEFINE_TYPE_WITH_CODE (PolkitSystemBusName, polkit_system_bus_name, G_TYPE_OBJECT, -@@ -364,6 +368,7 @@ on_retrieved_unix_uid_pid (GObject *src, - if (!v) - { - data->caught_error = TRUE; -+ dbus_call_respond_fails += 1; - } - else - { -@@ -405,6 +410,8 @@ polkit_system_bus_name_get_creds_sync (PolkitSystemBusName *system_bus - tmp_context = g_main_context_new (); - g_main_context_push_thread_default (tmp_context); - -+ dbus_call_respond_fails = 0; -+ - /* Do two async calls as it's basically as fast as one sync call. - */ - g_dbus_connection_call (connection, -@@ -432,11 +439,34 @@ polkit_system_bus_name_get_creds_sync (PolkitSystemBusName *system_bus - on_retrieved_unix_uid_pid, - &data); - -- while (!((data.retrieved_uid && data.retrieved_pid) || data.caught_error)) -- g_main_context_iteration (tmp_context, TRUE); -+ while (TRUE) -+ { -+ /* If one dbus call returns error, we must wait until the other call -+ * calls _call_finish(), otherwise fd leak is possible. -+ * Resolves: GHSL-2021-077 -+ */ - -- if (data.caught_error) -- goto out; -+ if ( (dbus_call_respond_fails > 1) ) -+ { -+ // we got two faults, we can leave -+ goto out; -+ } -+ -+ if ((data.caught_error && (data.retrieved_pid || data.retrieved_uid))) -+ { -+ // we got one fault and the other call finally finished, we can leave -+ goto out; -+ } -+ -+ if ( !(data.retrieved_uid && data.retrieved_pid) ) -+ { -+ g_main_context_iteration (tmp_context, TRUE); -+ } -+ else -+ { -+ break; -+ } -+ } - - if (out_uid) - *out_uid = data.uid; diff --git a/source/l/polkit/a2bf5c9c83b6ae46cbd5c779d3055bff81ded683.patch b/source/l/polkit/a2bf5c9c83b6ae46cbd5c779d3055bff81ded683.patch deleted file mode 100644 index a06300a53..000000000 --- a/source/l/polkit/a2bf5c9c83b6ae46cbd5c779d3055bff81ded683.patch +++ /dev/null @@ -1,79 +0,0 @@ -From a2bf5c9c83b6ae46cbd5c779d3055bff81ded683 Mon Sep 17 00:00:00 2001 -From: Jan Rybar <jrybar@redhat.com> -Date: Tue, 25 Jan 2022 17:21:46 +0000 -Subject: [PATCH] pkexec: local privilege escalation (CVE-2021-4034) - ---- - src/programs/pkcheck.c | 5 +++++ - src/programs/pkexec.c | 23 ++++++++++++++++++++--- - 2 files changed, 25 insertions(+), 3 deletions(-) - -diff --git a/src/programs/pkcheck.c b/src/programs/pkcheck.c -index f1bb4e1..768525c 100644 ---- a/src/programs/pkcheck.c -+++ b/src/programs/pkcheck.c -@@ -363,6 +363,11 @@ main (int argc, char *argv[]) - local_agent_handle = NULL; - ret = 126; - -+ if (argc < 1) -+ { -+ exit(126); -+ } -+ - /* Disable remote file access from GIO. */ - setenv ("GIO_USE_VFS", "local", 1); - -diff --git a/src/programs/pkexec.c b/src/programs/pkexec.c -index 7698c5c..84e5ef6 100644 ---- a/src/programs/pkexec.c -+++ b/src/programs/pkexec.c -@@ -488,6 +488,15 @@ main (int argc, char *argv[]) - pid_t pid_of_caller; - gpointer local_agent_handle; - -+ -+ /* -+ * If 'pkexec' is called THIS wrong, someone's probably evil-doing. Don't be nice, just bail out. -+ */ -+ if (argc<1) -+ { -+ exit(127); -+ } -+ - ret = 127; - authority = NULL; - subject = NULL; -@@ -614,10 +623,10 @@ main (int argc, char *argv[]) - - path = g_strdup (pwstruct.pw_shell); - if (!path) -- { -+ { - g_printerr ("No shell configured or error retrieving pw_shell\n"); - goto out; -- } -+ } - /* If you change this, be sure to change the if (!command_line) - case below too */ - command_line = g_strdup (path); -@@ -636,7 +645,15 @@ main (int argc, char *argv[]) - goto out; - } - g_free (path); -- argv[n] = path = s; -+ path = s; -+ -+ /* argc<2 and pkexec runs just shell, argv is guaranteed to be null-terminated. -+ * /-less shell shouldn't happen, but let's be defensive and don't write to null-termination -+ */ -+ if (argv[n] != NULL) -+ { -+ argv[n] = path; -+ } - } - if (access (path, F_OK) != 0) - { --- -GitLab - diff --git a/source/l/polkit/doinst.sh b/source/l/polkit/doinst.sh index 3d81307e8..840abca13 100644 --- a/source/l/polkit/doinst.sh +++ b/source/l/polkit/doinst.sh @@ -10,9 +10,7 @@ config() { # Otherwise, we leave the .new copy for the admin to consider... } -if [ -r etc/pam.d/polkit-1.new ]; then - config etc/pam.d/polkit-1.new -fi +config etc/pam.d/polkit-1.new # Make sure the polkitd user and group exist: if ! grep -q "^polkitd:" etc/passwd ; then diff --git a/source/l/polkit/polkit.SlackBuild b/source/l/polkit/polkit.SlackBuild index 74949650b..47d0238c4 100755 --- a/source/l/polkit/polkit.SlackBuild +++ b/source/l/polkit/polkit.SlackBuild @@ -2,7 +2,7 @@ # Copyright 2009, 2011, 2015 Robby Workman, Northport, Alabama, USA # Copyright 2010 Eric Hameleers, Eindhoven, NL -# Copyright 2009, 2010, 2011, 2012, 2013, 2018, 2020 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2009, 2010, 2011, 2012, 2013, 2018, 2020, 2023 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # Redistribution and use of this script, with or without modification, is @@ -26,7 +26,7 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=polkit VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-3} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -81,11 +81,6 @@ find . \ -exec chmod 644 {} \+ zcat $CWD/dont-set-wheel-group-as-admin.diff.gz | patch -p1 --verbose || exit 1 -zcat $CWD/a2bf5c9c83b6ae46cbd5c779d3055bff81ded683.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/CVE-2021-4115.patch.gz | patch -p1 --verbose || exit 1 - -# https://gitlab.freedesktop.org/polkit/polkit/-/issues/29 -zcat $CWD/0001-configure-fix-elogind-support.patch.gz | patch -p1 || exit 1 # If we get here and don't have a polkitd user/group, add one. # Otherwise a few directories in the package will have wrong permissions. @@ -94,53 +89,36 @@ if ! grep -q "^polkitd:" /etc/passwd ; then useradd -c "PolicyKit daemon owner" -d /var/lib/polkit -u 87 -g polkitd -s /bin/false polkitd fi -# Choose correct options depending on whether PAM is installed: -if [ -L /lib${LIBDIRSUFFIX}/libpam.so.? ]; then - PAM_OPTIONS="--with-authfw=pam --with-pam-module-dir=/lib${LIBDIRSUFFIX}/security" - unset SHADOW_OPTIONS -else - unset PAM_OPTIONS - SHADOW_OPTIONS="--with-authfw=shadow" -fi - -if [ ! -r configure ]; then - if [ -x ./autogen.sh ]; then - NOCONFIGURE=1 ./autogen.sh - else - autoreconf -vif - fi -fi - -LIBELOGIND_CFLAGS="$(pkg-config --cflags libelogind)" \ -LIBELOGIND_LIBS="$(pkg-config --libs libelogind)" \ -CFLAGS="$SLKCFLAGS" \ -CXXFLAGS="$SLKCFLAGS" \ -./configure \ +# Configure, build, and install: +export CFLAGS="$SLKCFLAGS" +export CXXFLAGS="$SLKCFLAGS" +mkdir meson-build +cd meson-build +meson setup \ --prefix=/usr \ - --libdir=/usr/lib${LIBDIRSUFFIX} \ + --libdir=lib${LIBDIRSUFFIX} \ + --libexecdir=/usr/libexec \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --includedir=/usr/include \ + --datadir=/usr/share \ + --mandir=/usr/man \ --sysconfdir=/etc \ --localstatedir=/var \ - --docdir=/usr/doc/$PKGNAM-$VERSION \ - --enable-man-pages \ - --enable-gtk-doc \ - --mandir=/usr/man \ - --disable-static \ - --disable-examples \ - --enable-introspection \ - --enable-libsystemd-login=no \ - --enable-libelogind=yes \ - $PAM_OPTIONS \ - $SHADOW_OPTIONS \ - --enable-verbose-mode \ - --with-os-type=Slackware \ - --build=$ARCH-slackware-linux || exit 1 - -# Build and install: -make $NUMJOBS || make || exit 1 -make install DESTDIR=$PKG || exit 1 - -# Don't ship .la files: -rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la + --buildtype=release \ + -Dintrospection=true \ + -Dsession_tracking=libelogind \ + -Dsystemdsystemunitdir=/usr/lib/systemd/user \ + -Dauthfw=pam \ + -Dpam_module_dir=/lib${LIBDIRSUFFIX}/security \ + -Dman=true \ + -Djs_engine=mozjs \ + .. || exit 1 + "${NINJA:=ninja}" $NUMJOBS || exit 1 + DESTDIR=$PKG $NINJA install || exit 1 +cd .. + + #-Dos_type=slackware \ # Create homedir for polkit. This is mentioned in /etc/passwd, but isn't # actually used for anything later. Perms don't matter. @@ -154,10 +132,8 @@ rmdir --parents $PKG/etc/dbus-1/system.d/ # Leave the /etc/polkit-1/rules.d/ dir in place, but move the config(s) mv $PKG/etc/polkit-1/rules.d/* $PKG/usr/share/polkit-1/rules.d/ -if [ ! -z "$PAM_OPTIONS" ]; then - # Make the PAM file .new: - mv $PKG/etc/pam.d/polkit-1 $PKG/etc/pam.d/polkit-1.new -fi +# Make the PAM file .new: +mv $PKG/etc/pam.d/polkit-1 $PKG/etc/pam.d/polkit-1.new # Strip binaries: find $PKG | xargs file | grep -e "executable" -e "shared object" \ @@ -181,9 +157,8 @@ fi # Add a documentation directory: mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION cp -a \ - AUTHORS COPYING HACKING INSTALL NEWS README \ + AUTHORS* COPYING* HACKING* INSTALL* NEWS* README* \ $PKG/usr/doc/$PKGNAM-$VERSION -( cd $PKG/usr/doc/$PKGNAM-$VERSION; ln -s ../../share/gtk-doc/html/polkit-1 html ) # If there's a ChangeLog, installing at least part of the recent history # is useful, but don't let it get totally out of control: |