summary refs log tree commit diff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorLiliana Marie Prikler <liliana.prikler@gmail.com>2023-05-10 21:39:40 +0200
committerLiliana Marie Prikler <liliana.prikler@gmail.com>2023-05-10 21:39:40 +0200
commit09dd600159801b3b8fd6b95bf69e648f9e37d959 (patch)
treec6961be106846628bf0d128586fc73685b895315 /gnu/packages/patches
parenteab4d0e18a616c71ab5f3af7f2915a9591ef04e8 (diff)
parentb4e5844700b2304bfde451322feb5797bf0c6179 (diff)
downloadguix-09dd600159801b3b8fd6b95bf69e648f9e37d959.tar.gz
Merge branch 'master' into gnome-team.
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/clitest-grep-compat.patch27
-rw-r--r--gnu/packages/patches/dune-common-skip-failing-tests.patch28
-rw-r--r--gnu/packages/patches/dune-grid-add-missing-include-cassert.patch24
-rw-r--r--gnu/packages/patches/dune-istl-fix-solver-playground.patch61
-rw-r--r--gnu/packages/patches/git-header-cmd.patch287
-rw-r--r--gnu/packages/patches/kodi-mesa-eglchromium.patch56
-rw-r--r--gnu/packages/patches/libaio-riscv-test5.patch47
-rw-r--r--gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch100
-rw-r--r--gnu/packages/patches/lxqt-session-procps-4.patch82
-rw-r--r--gnu/packages/patches/mars-install.patch17
-rw-r--r--gnu/packages/patches/mars-sfml-2.3.patch151
-rw-r--r--gnu/packages/patches/mesa-fix-sporadic-test-failures.patch27
-rw-r--r--gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch180
-rw-r--r--gnu/packages/patches/python-scikit-optimize-1148.patch32
-rw-r--r--gnu/packages/patches/python-scikit-optimize-1150.patch275
-rw-r--r--gnu/packages/patches/python-wxwidgets-type-errors.patch42
-rw-r--r--gnu/packages/patches/quilt-grep-compat.patch145
-rw-r--r--gnu/packages/patches/rust-adblock-ignore-live-tests.patch69
-rw-r--r--gnu/packages/patches/rust-webbrowser-remove-unsupported-os.patch24
-rw-r--r--gnu/packages/patches/transmission-honor-localedir.patch34
20 files changed, 1130 insertions, 578 deletions
diff --git a/gnu/packages/patches/clitest-grep-compat.patch b/gnu/packages/patches/clitest-grep-compat.patch
new file mode 100644
index 0000000000..8707c35e3e
--- /dev/null
+++ b/gnu/packages/patches/clitest-grep-compat.patch
@@ -0,0 +1,27 @@
+Suppress a warning from grep which causes tests to fail.
+
+Taken from upstream pull request:
+
+  https://github.com/aureliojargas/clitest/pull/54
+
+diff --git a/test/inline-match-egrep.sh b/test/inline-match-egrep.sh
+--- a/test/inline-match-egrep.sh
++++ b/test/inline-match-egrep.sh
+@@ -42,7 +42,7 @@ $ printf ' \t  \t\t   \n'       #=> --egrep ^ 	  		   $
+ # egrep regexes. You'll need to test in your system if that's the
+ # case. I recommend using a literal tab to avoid problems.
+ 
+-$ printf 'may\tfail'            #=> --egrep ^may\tfail$
++$ printf 'may\tfail'            #=> --egrep ^may\\tfail$
+ $ printf 'may\tfail'            #=> --egrep ^may[\t]fail$
+ $ printf 'will\tmatch'          #=> --egrep ^will	match$
+ 
+@@ -51,7 +51,7 @@ $ printf 'will\tmatch'          #=> --egrep ^will	match$
+ # These tests will fail:
+ 
+ $ printf 'will\nfail'           #=> --egrep will.*fail
+-$ printf 'will\nfail'           #=> --egrep will\nfail
++$ printf 'will\nfail'           #=> --egrep will\\nfail
+ 
+ # If one line of a multiline results matches, the test is OK
+ 
diff --git a/gnu/packages/patches/dune-common-skip-failing-tests.patch b/gnu/packages/patches/dune-common-skip-failing-tests.patch
new file mode 100644
index 0000000000..7b0aa49d73
--- /dev/null
+++ b/gnu/packages/patches/dune-common-skip-failing-tests.patch
@@ -0,0 +1,28 @@
+Disable tests known to fail on AArch64:
+
+  https://gitlab.dune-project.org/core/dune-common/-/issues/262
+  https://issues.guix.gnu.org/62842
+
+--- a/dune/common/test/eigenvaluestest.cc
++++ b/dune/common/test/eigenvaluestest.cc
+@@ -340,20 +340,15 @@
+   testSymmetricFieldMatrix<double,200>();
+   testSymmetricFieldMatrix<float,4>();
+   testSymmetricFieldMatrix<float,200>();
+-  testSymmetricFieldMatrix<long double,4>();
+-  testSymmetricFieldMatrix<long double,200>();
+ #endif // HAVE_LAPACK
+ 
+   testSymmetricFieldMatrix<double,2>();
+   testSymmetricFieldMatrix<double,3>();
+   testSymmetricFieldMatrix<float,2>();
+   testSymmetricFieldMatrix<float,3>();
+-  testSymmetricFieldMatrix<long double,2>();
+-  testSymmetricFieldMatrix<long double,3>();
+ 
+   checkMultiplicity<double>();
+   checkMultiplicity<float>();
+-  checkMultiplicity<long double>();
+ 
+   return 0;
+ }
diff --git a/gnu/packages/patches/dune-grid-add-missing-include-cassert.patch b/gnu/packages/patches/dune-grid-add-missing-include-cassert.patch
new file mode 100644
index 0000000000..7462b11934
--- /dev/null
+++ b/gnu/packages/patches/dune-grid-add-missing-include-cassert.patch
@@ -0,0 +1,24 @@
+From ef843b1a66308247ba4d2e2c116ff5517421a91b Mon Sep 17 00:00:00 2001
+From: Simon Praetorius <simon.praetorius@tu-dresden.de>
+Date: Tue, 6 Dec 2022 13:39:44 +0100
+Subject: [PATCH] Add missing include <cassert>
+
+---
+ dune/grid/test/yasp/test-yaspgrid-partitioner.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/dune/grid/test/yasp/test-yaspgrid-partitioner.cc b/dune/grid/test/yasp/test-yaspgrid-partitioner.cc
+index 93ae042b0..9a4530201 100644
+--- a/dune/grid/test/yasp/test-yaspgrid-partitioner.cc
++++ b/dune/grid/test/yasp/test-yaspgrid-partitioner.cc
+@@ -6,6 +6,7 @@
+ #include <config.h>
+ 
+ #include <array>
++#include <cassert>
+ #include <iostream>
+ 
+ #include <dune/common/filledarray.hh>
+-- 
+2.39.2
+
diff --git a/gnu/packages/patches/dune-istl-fix-solver-playground.patch b/gnu/packages/patches/dune-istl-fix-solver-playground.patch
new file mode 100644
index 0000000000..b3df4b6ffa
--- /dev/null
+++ b/gnu/packages/patches/dune-istl-fix-solver-playground.patch
@@ -0,0 +1,61 @@
+From fe929f17e98b577171f58ca520b5145be41730ea Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= <gruenich@dune-project.org>
+Date: Thu, 16 Mar 2023 19:48:40 +0100
+Subject: [PATCH] Adjust sequential and both parallel cases in
+ istl-solver-playground
+
+Do same thing, independent of paralellel, distributed, or
+sequential.
+This fixes the test in the sequential case.
+---
+ src/istl-solver-playground.hh | 22 ++++++++++++++++------
+ 1 file changed, 16 insertions(+), 6 deletions(-)
+
+diff --git a/src/istl-solver-playground.hh b/src/istl-solver-playground.hh
+index 0ff3abd5..11693cf5 100644
+--- a/src/istl-solver-playground.hh
++++ b/src/istl-solver-playground.hh
+@@ -66,7 +66,11 @@ std::shared_ptr<OOCOMM> loadSystem(std::shared_ptr<Mat>& m,
+   std::shared_ptr<OOCOMM> oocomm;
+   if(distributed){
+     oocomm = std::make_shared<OOCOMM>(MPI_COMM_WORLD);
+-    loadMatrixMarket(*m, matrixfilename, *oocomm);
++    if(matrixfilename != "laplacian"){
++      loadMatrixMarket(*m, matrixfilename, *oocomm);
++    }else{
++      setupLaplacian(*m, config.get("N", 20));
++    }
+     if(config.get("random_rhs", false)){
+       rhs->resize(m->N());
+       srand(42);
+@@ -98,16 +102,22 @@ template<class Mat, class Vec>
+ void loadSystem(std::shared_ptr<Mat>& m,
+                 std::shared_ptr<Vec>& rhs,
+                 const Dune::ParameterTree& config){
+-  std::string matrixfilename = config.get<std::string>("matrix");
++  // generate Laplacian or load matrix
++  std::string matrixfilename = config.get<std::string>("matrix", "laplacian");
++  if(matrixfilename == "laplacian"){
++    setupLaplacian(*m, config.get("N", 20));
++  }else{
++    loadMatrixMarket(*m, matrixfilename);
++  }
++  // use random values or load right-hand side
+   std::string rhsfilename;
+-  if(!config.get("random_rhs", false))
+-    rhsfilename = config.get<std::string>("rhs");
+-  loadMatrixMarket(*m, matrixfilename);
+   if(config.get("random_rhs", false)){
+     rhs->resize(m->N());
+     fillRandom(*rhs);
+-  }else
++  }else{
++    rhsfilename = config.get<std::string>("rhs");
+     loadMatrixMarket(*rhs, rhsfilename);
++  }
+ }
+ #endif
+ 
+-- 
+2.39.2
+
diff --git a/gnu/packages/patches/git-header-cmd.patch b/gnu/packages/patches/git-header-cmd.patch
new file mode 100644
index 0000000000..a8964ab174
--- /dev/null
+++ b/gnu/packages/patches/git-header-cmd.patch
@@ -0,0 +1,287 @@
+Add a '--header-cmd' to git send-email.
+
+Upstream status can be tracked at:
+https://lore.kernel.org/git/20230423122744.4865-1-maxim.cournoyer@gmail.com/T/#t
+
+diff --git a/Documentation/config/sendemail.txt b/Documentation/config/sendemail.txt
+index 51da7088a8..92a9ebe98c 100644
+--- a/Documentation/config/sendemail.txt
++++ b/Documentation/config/sendemail.txt
+@@ -61,6 +61,7 @@ sendemail.ccCmd::
+ sendemail.chainReplyTo::
+ sendemail.envelopeSender::
+ sendemail.from::
++sendemail.headerCmd::
+ sendemail.signedoffbycc::
+ sendemail.smtpPass::
+ sendemail.suppresscc::
+diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
+index b0f438ec99..4d2ae061f9 100644
+--- a/Documentation/git-send-email.txt
++++ b/Documentation/git-send-email.txt
+@@ -320,6 +320,17 @@ Automating
+ 	Output of this command must be single email address per line.
+ 	Default is the value of `sendemail.ccCmd` configuration value.
+ 
++--header-cmd=<command>::
++	Specify a command that is executed once per outgoing message
++	and output RFC 2822 style header lines to be inserted into
++	them. When the `sendemail.headerCmd` configuration variable is
++	set, its value is always used. When --header-cmd is provided
++	at the command line, its value takes precedence over the
++	`sendemail.headerCmd` configuration variable.
++
++--no-header-cmd::
++	Disable any header command in use.
++
+ --[no-]chain-reply-to::
+ 	If this is set, each email will be sent as a reply to the previous
+ 	email sent.  If disabled with "--no-chain-reply-to", all emails after
+diff --git a/git-send-email.perl b/git-send-email.perl
+index 66c9171109..22a64e608f 100755
+--- a/git-send-email.perl
++++ b/git-send-email.perl
+@@ -87,8 +87,10 @@ sub usage {
+ 
+   Automating:
+     --identity              <str>  * Use the sendemail.<id> options.
+-    --to-cmd                <str>  * Email To: via `<str> \$patch_path`
+-    --cc-cmd                <str>  * Email Cc: via `<str> \$patch_path`
++    --to-cmd                <str>  * Email To: via `<str> \$patch_path`.
++    --cc-cmd                <str>  * Email Cc: via `<str> \$patch_path`.
++    --header-cmd            <str>  * Add headers via `<str> \$patch_path`.
++    --no-header-cmd                * Disable any header command in use.
+     --suppress-cc           <str>  * author, self, sob, cc, cccmd, body, bodycc, misc-by, all.
+     --[no-]cc-cover                * Email Cc: addresses in the cover letter.
+     --[no-]to-cover                * Email To: addresses in the cover letter.
+@@ -202,7 +204,7 @@ sub format_2822_time {
+ 	$author,$sender,$smtp_authpass,$annotate,$compose,$time);
+ # Things we either get from config, *or* are overridden on the
+ # command-line.
+-my ($no_cc, $no_to, $no_bcc, $no_identity);
++my ($no_cc, $no_to, $no_bcc, $no_identity, $no_header_cmd);
+ my (@config_to, @getopt_to);
+ my (@config_cc, @getopt_cc);
+ my (@config_bcc, @getopt_bcc);
+@@ -269,7 +271,7 @@ sub do_edit {
+ # Variables with corresponding config settings
+ my ($suppress_from, $signed_off_by_cc);
+ my ($cover_cc, $cover_to);
+-my ($to_cmd, $cc_cmd);
++my ($to_cmd, $cc_cmd, $header_cmd);
+ my ($smtp_server, $smtp_server_port, @smtp_server_options);
+ my ($smtp_authuser, $smtp_encryption, $smtp_ssl_cert_path);
+ my ($batch_size, $relogin_delay);
+@@ -318,6 +320,7 @@ sub do_edit {
+     "tocmd" => \$to_cmd,
+     "cc" => \@config_cc,
+     "cccmd" => \$cc_cmd,
++    "headercmd" => \$header_cmd,
+     "aliasfiletype" => \$aliasfiletype,
+     "bcc" => \@config_bcc,
+     "suppresscc" => \@suppress_cc,
+@@ -519,6 +522,8 @@ sub config_regexp {
+ 		    "compose" => \$compose,
+ 		    "quiet" => \$quiet,
+ 		    "cc-cmd=s" => \$cc_cmd,
++		    "header-cmd=s" => \$header_cmd,
++		    "no-header-cmd" => \$no_header_cmd,
+ 		    "suppress-from!" => \$suppress_from,
+ 		    "no-suppress-from" => sub {$suppress_from = 0},
+ 		    "suppress-cc=s" => \@suppress_cc,
+@@ -1780,16 +1785,16 @@ sub process_file {
+ 	$subject = $initial_subject;
+ 	$message = "";
+ 	$message_num++;
+-	# First unfold multiline header fields
++	# Retrieve and unfold header fields.
++	my @header_lines = ();
+ 	while(<$fh>) {
+ 		last if /^\s*$/;
+-		if (/^\s+\S/ and @header) {
+-			chomp($header[$#header]);
+-			s/^\s+/ /;
+-			$header[$#header] .= $_;
+-	    } else {
+-			push(@header, $_);
+-		}
++		push(@header_lines, $_);
++	}
++	@header = unfold_headers(@header_lines);
++	# Add computed headers, if applicable.
++	unless ($no_header_cmd || ! $header_cmd) {
++		push @header, invoke_header_cmd($header_cmd, $t);
+ 	}
+ 	# Now parse the header
+ 	foreach(@header) {
+@@ -2021,15 +2026,63 @@ sub process_file {
+ 	}
+ }
+ 
++# Execute a command and return its output lines as an array.  Blank
++# lines which do not appear at the end of the output are reported as
++# errors.
++sub execute_cmd {
++	my ($prefix, $cmd, $file) = @_;
++	my @lines = ();
++	my $seen_blank_line = 0;
++	open my $fh, "-|", "$cmd \Q$file\E"
++		or die sprintf(__("(%s) Could not execute '%s'"), $prefix, $cmd);
++	while (my $line = <$fh>) {
++		die sprintf(__("(%s) Malformed output from '%s'"), $prefix, $cmd)
++		    if $seen_blank_line;
++		if ($line =~ /^$/) {
++			$seen_blank_line = $line =~ /^$/;
++			next;
++		}
++		push @lines, $line;
++	}
++	close $fh
++	    or die sprintf(__("(%s) failed to close pipe to '%s'"), $prefix, $cmd);
++	return @lines;
++}
++
++# Process headers lines, unfolding multiline headers as defined by RFC
++# 2822.
++sub unfold_headers {
++	my @headers;
++	foreach(@_) {
++		last if /^\s*$/;
++		if (/^\s+\S/ and @headers) {
++			chomp($headers[$#headers]);
++			s/^\s+/ /;
++			$headers[$#headers] .= $_;
++		} else {
++			push(@headers, $_);
++		}
++	}
++	return @headers;
++}
++
++# Invoke the provided CMD with FILE as an argument, which should
++# output RFC 2822 email headers. Fold multiline headers and return the
++# headers as an array.
++sub invoke_header_cmd {
++	my ($cmd, $file) = @_;
++	my @lines = execute_cmd("header-cmd", $header_cmd, $file);
++	return unfold_headers(@lines);
++}
++
+ # Execute a command (e.g. $to_cmd) to get a list of email addresses
+ # and return a results array
+ sub recipients_cmd {
+ 	my ($prefix, $what, $cmd, $file) = @_;
+-
++	my @lines = ();
+ 	my @addresses = ();
+-	open my $fh, "-|", "$cmd \Q$file\E"
+-	    or die sprintf(__("(%s) Could not execute '%s'"), $prefix, $cmd);
+-	while (my $address = <$fh>) {
++	@lines = execute_cmd($prefix, $cmd, $file);
++	for my $address (@lines) {
+ 		$address =~ s/^\s*//g;
+ 		$address =~ s/\s*$//g;
+ 		$address = sanitize_address($address);
+@@ -2038,8 +2091,6 @@ sub recipients_cmd {
+ 		printf(__("(%s) Adding %s: %s from: '%s'\n"),
+ 		       $prefix, $what, $address, $cmd) unless $quiet;
+ 		}
+-	close $fh
+-	    or die sprintf(__("(%s) failed to close pipe to '%s'"), $prefix, $cmd);
+ 	return @addresses;
+ }
+ 
+diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
+index 6520346246..6519eea1ed 100755
+--- a/t/t9001-send-email.sh
++++ b/t/t9001-send-email.sh
+@@ -374,13 +374,16 @@ test_expect_success $PREREQ,!AUTOIDENT 'broken implicit ident aborts send-email'
+ 	)
+ '
+ 
+-test_expect_success $PREREQ 'setup tocmd and cccmd scripts' '
++test_expect_success $PREREQ 'setup cmd scripts' '
+ 	write_script tocmd-sed <<-\EOF &&
+ 	sed -n -e "s/^tocmd--//p" "$1"
+ 	EOF
+-	write_script cccmd-sed <<-\EOF
++	write_script cccmd-sed <<-\EOF &&
+ 	sed -n -e "s/^cccmd--//p" "$1"
+ 	EOF
++	write_script headercmd-sed <<-\EOF
++	sed -n -e "s/^headercmd--//p" "$1"
++	EOF
+ '
+ 
+ test_expect_success $PREREQ 'tocmd works' '
+@@ -410,6 +413,70 @@ test_expect_success $PREREQ 'cccmd works' '
+ 	grep "^	cccmd@example.com" msgtxt1
+ '
+ 
++test_expect_success $PREREQ 'headercmd works' '
++	clean_fake_sendmail &&
++	cp $patches headercmd.patch &&
++	echo "headercmd--X-Debbugs-CC: dummy@example.com" >>headercmd.patch &&
++	git send-email \
++		--from="Example <nobody@example.com>" \
++		--to=nobody@example.com \
++		--header-cmd=./headercmd-sed \
++		--smtp-server="$(pwd)/fake.sendmail" \
++		headercmd.patch \
++		&&
++	grep "^X-Debbugs-CC: dummy@example.com" msgtxt1
++'
++
++test_expect_success $PREREQ '--no-header-cmd works' '
++	clean_fake_sendmail &&
++	cp $patches headercmd.patch &&
++	echo "headercmd--X-Debbugs-CC: dummy@example.com" >>headercmd.patch &&
++	git send-email \
++		--from="Example <nobody@example.com>" \
++		--to=nobody@example.com \
++		--header-cmd=./headercmd-sed \
++                --no-header-cmd \
++		--smtp-server="$(pwd)/fake.sendmail" \
++		headercmd.patch \
++		&&
++	! grep "^X-Debbugs-CC: dummy@example.com" msgtxt1
++'
++
++test_expect_success $PREREQ 'multiline fields are correctly unfolded' '
++	clean_fake_sendmail &&
++	cp $patches headercmd.patch &&
++	write_script headercmd-multiline <<-\EOF &&
++	echo "X-Debbugs-CC: someone@example.com
++FoldedField: This is a tale
++ best told using
++ multiple lines."
++	EOF
++	git send-email \
++		--from="Example <nobody@example.com>" \
++		--to=nobody@example.com \
++		--header-cmd=./headercmd-multiline \
++		--smtp-server="$(pwd)/fake.sendmail" \
++		headercmd.patch &&
++	grep "^FoldedField: This is a tale best told using multiple lines.$" msgtxt1
++'
++
++# Blank lines in the middle of the output of a command are invalid.
++test_expect_success $PREREQ 'malform output reported on blank lines in command output' '
++	clean_fake_sendmail &&
++	cp $patches headercmd.patch &&
++	write_script headercmd-malformed-output <<-\EOF &&
++	echo "X-Debbugs-CC: someone@example.com
++
++SomeOtherField: someone-else@example.com"
++	EOF
++	! git send-email \
++		--from="Example <nobody@example.com>" \
++		--to=nobody@example.com \
++		--header-cmd=./headercmd-malformed-output \
++		--smtp-server="$(pwd)/fake.sendmail" \
++		headercmd.patch
++'
++
+ test_expect_success $PREREQ 'reject long lines' '
+ 	z8=zzzzzzzz &&
+ 	z64=$z8$z8$z8$z8$z8$z8$z8$z8 &&
diff --git a/gnu/packages/patches/kodi-mesa-eglchromium.patch b/gnu/packages/patches/kodi-mesa-eglchromium.patch
new file mode 100644
index 0000000000..3324062274
--- /dev/null
+++ b/gnu/packages/patches/kodi-mesa-eglchromium.patch
@@ -0,0 +1,56 @@
+From https://github.com/xbmc/xbmc/pull/22291/commits/5449652abf0bb9dddd0d796de4120e60f19f89a5
+
+From 5449652abf0bb9dddd0d796de4120e60f19f89a5 Mon Sep 17 00:00:00 2001
+From: Alan Swanson <reiver@improbability.net>
+Date: Mon, 19 Dec 2022 21:28:13 +0200
+Subject: [PATCH] Work around Mesa eglchromium.h removal
+
+I have polished Alan's snippet to buildable state and tested
+on Kodi from Debian sid.
+
+Signed-off-by: Vasyl Gello <vasek.gello@gmail.com>
+---
+ cmake/modules/FindEGL.cmake       | 6 ++++++
+ xbmc/windowing/X11/GLContextEGL.h | 4 ++++
+ 2 files changed, 10 insertions(+)
+
+diff --git a/cmake/modules/FindEGL.cmake b/cmake/modules/FindEGL.cmake
+index b00fe08a25f95..a68a8db901222 100644
+--- a/cmake/modules/FindEGL.cmake
++++ b/cmake/modules/FindEGL.cmake
+@@ -9,6 +9,7 @@
+ # EGL_INCLUDE_DIRS - the EGL include directory
+ # EGL_LIBRARIES - the EGL libraries
+ # EGL_DEFINITIONS - the EGL definitions
++# HAVE_EGLEXTANGLE - if eglext_angle.h exists else use eglextchromium.h
+ #
+ # and the following imported targets::
+ #
+@@ -35,6 +36,11 @@ if(EGL_FOUND)
+   set(EGL_LIBRARIES ${EGL_LIBRARY})
+   set(EGL_INCLUDE_DIRS ${EGL_INCLUDE_DIR})
+   set(EGL_DEFINITIONS -DHAS_EGL=1)
++  include(CheckIncludeFiles)
++  check_include_files("EGL/egl.h;EGL/eglext.h;EGL/eglext_angle.h" HAVE_EGLEXTANGLE)
++  if(HAVE_EGLEXTANGLE)
++    list(APPEND EGL_DEFINITIONS "-DHAVE_EGLEXTANGLE=1")
++  endif()
+ 
+   if(NOT TARGET EGL::EGL)
+     add_library(EGL::EGL UNKNOWN IMPORTED)
+diff --git a/xbmc/windowing/X11/GLContextEGL.h b/xbmc/windowing/X11/GLContextEGL.h
+index 99a6a9024e8c6..afea0b7c43eac 100644
+--- a/xbmc/windowing/X11/GLContextEGL.h
++++ b/xbmc/windowing/X11/GLContextEGL.h
+@@ -13,7 +13,11 @@
+ #include "threads/CriticalSection.h"
+ 
+ #include <EGL/eglext.h>
++#ifdef HAVE_EGLEXTANGLE
++#include <EGL/eglext_angle.h>
++#else
+ #include <EGL/eglextchromium.h>
++#endif
+ #include <X11/Xutil.h>
+ 
+ class CGLContextEGL : public CGLContext
diff --git a/gnu/packages/patches/libaio-riscv-test5.patch b/gnu/packages/patches/libaio-riscv-test5.patch
new file mode 100644
index 0000000000..c1df41795d
--- /dev/null
+++ b/gnu/packages/patches/libaio-riscv-test5.patch
@@ -0,0 +1,47 @@
+https://pagure.io/libaio/pull-request/23
+
+From f68c69b6cbc1260a6034997d5f146e3d0a197ed8 Mon Sep 17 00:00:00 2001
+From: Xiongchuan Tan <xc-tan@outlook.com>
+Date: Jun 28 2022 15:53:38 +0000
+Subject: As of June 28th, 2022, the RISC-V spec[1] reserves the PTE permission bit
+
+combination of "write+!read", and the kernel would have incoherent behavior in
+the last test case of "harness/cases/5.t". Since it leads to undefined behavior,
+until further spec update, this test case should be disabled for RISC-V.
+
+A patch to disallow such permission in mmap() can be found here[2].
+
+[1]: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
+[2]: https://www.spinics.net/lists/kernel/msg4412421.html
+
+---
+
+diff --git a/harness/cases/5.t b/harness/cases/5.t
+index b0a7c56..8d6c959 100644
+--- a/harness/cases/5.t
++++ b/harness/cases/5.t
+@@ -37,6 +37,14 @@ int test_main(void)
+ 	status |= attempt_rw(rwfd, buf, SIZE,  0,  READ, -EFAULT);
+ 
+ 	res = munmap(buf, page_size);			assert(res == 0);
++
++	/* As of  June 28th, 2022,  the RISC-V spec Volume 2 Section 4.3
++	 * version "20211203 Privileged Architecture v1.12, Ratified"
++	 * reserves the usage of  the PTE permission bit combination  of
++	 * "write+!read",   so the next test leads to undefined behavior
++	 * and should be disabled. */
++#ifndef __riscv
++
+ 	buf = mmap(0, page_size, PROT_WRITE, MAP_SHARED, rwfd, 0);
+ 	assert(buf != (char *)-1);
+ 
+@@ -48,6 +56,8 @@ int test_main(void)
+ 	status |= attempt_rw(rwfd, buf, SIZE,  0,  READ, SIZE);
+ 	status |= attempt_rw(rwfd, buf, SIZE,  0, WRITE, res);
+ 
++#endif
++
+ 	return status;
+ }
+ 
+
diff --git a/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch b/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch
deleted file mode 100644
index 215c920e53..0000000000
--- a/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-This patch comes from upstream.  It corresponds to a patch applied to
-the generated C source code for llhttp included in Node.js 14.16.0
-(see commit 641f786bb1a1f6eb1ff8750782ed939780f2b31a).  That commit
-fixes CVE-2020-8287.  With this patch, the output of our
-llhttp-bootstrap package matches the files included in Node.js 14.16.0
-exactly.
-
-commit e9b36ea64709c35ca66094d5cf3787f444029601
-Author: Fedor Indutny <fedor@indutny.com>
-Date:   Sat Oct 10 19:56:01 2020 -0700
-
-    http: unset `F_CHUNKED` on new `Transfer-Encoding`
-    
-    Duplicate `Transfer-Encoding` header should be a treated as a single,
-    but with original header values concatenated with a comma separator. In
-    the light of this, even if the past `Transfer-Encoding` ended with
-    `chunked`, we should be not let the `F_CHUNKED` to leak into the next
-    header, because mere presence of another header indicates that `chunked`
-    is not the last transfer-encoding token.
-
-diff --git a/src/llhttp/http.ts b/src/llhttp/http.ts
-index f4f1a6e..0a0c365 100644
---- a/src/llhttp/http.ts
-+++ b/src/llhttp/http.ts
-@@ -460,11 +460,19 @@ export class HTTP {
-       .match([ ' ', '\t' ], n('header_value_discard_ws'))
-       .otherwise(checkContentLengthEmptiness);
- 
-+    // Multiple `Transfer-Encoding` headers should be treated as one, but with
-+    // values separate by a comma.
-+    //
-+    // See: https://tools.ietf.org/html/rfc7230#section-3.2.2
-+    const toTransferEncoding = this.unsetFlag(
-+      FLAGS.CHUNKED,
-+      'header_value_te_chunked');
-+
-     n('header_value_start')
-       .otherwise(this.load('header_state', {
-         [HEADER_STATE.UPGRADE]: this.setFlag(FLAGS.UPGRADE, fallback),
-         [HEADER_STATE.TRANSFER_ENCODING]: this.setFlag(
--          FLAGS.TRANSFER_ENCODING, 'header_value_te_chunked'),
-+          FLAGS.TRANSFER_ENCODING, toTransferEncoding),
-         [HEADER_STATE.CONTENT_LENGTH]: n('header_value_content_length_once'),
-         [HEADER_STATE.CONNECTION]: n('header_value_connection'),
-       }, 'header_value'));
-@@ -847,6 +855,11 @@ export class HTTP {
-     return span.start(span.end(this.node(next)));
-   }
- 
-+  private unsetFlag(flag: FLAGS, next: string | Node): Node {
-+    const p = this.llparse;
-+    return p.invoke(p.code.and('flags', ~flag), this.node(next));
-+  }
-+
-   private setFlag(flag: FLAGS, next: string | Node): Node {
-     const p = this.llparse;
-     return p.invoke(p.code.or('flags', flag), this.node(next));
-diff --git a/test/request/transfer-encoding.md b/test/request/transfer-encoding.md
-index a7d1681..b0891d6 100644
---- a/test/request/transfer-encoding.md
-+++ b/test/request/transfer-encoding.md
-@@ -353,6 +353,38 @@ off=106 headers complete method=3 v=1/1 flags=200 content_length=0
- off=106 error code=15 reason="Request has invalid `Transfer-Encoding`"
- ```
- 
-+## POST with `chunked` and duplicate transfer-encoding
-+
-+<!-- meta={"type": "request", "noScan": true} -->
-+```http
-+POST /post_identity_body_world?q=search#hey HTTP/1.1
-+Accept: */*
-+Transfer-Encoding: chunked
-+Transfer-Encoding: deflate
-+
-+World
-+```
-+
-+```log
-+off=0 message begin
-+off=5 len=38 span[url]="/post_identity_body_world?q=search#hey"
-+off=44 url complete
-+off=54 len=6 span[header_field]="Accept"
-+off=61 header_field complete
-+off=62 len=3 span[header_value]="*/*"
-+off=67 header_value complete
-+off=67 len=17 span[header_field]="Transfer-Encoding"
-+off=85 header_field complete
-+off=86 len=7 span[header_value]="chunked"
-+off=95 header_value complete
-+off=95 len=17 span[header_field]="Transfer-Encoding"
-+off=113 header_field complete
-+off=114 len=7 span[header_value]="deflate"
-+off=123 header_value complete
-+off=125 headers complete method=3 v=1/1 flags=200 content_length=0
-+off=125 error code=15 reason="Request has invalid `Transfer-Encoding`"
-+```
-+
- ## POST with `chunked` before other transfer-coding (lenient)
- 
- TODO(indutny): should we allow it even in lenient mode? (Consider disabling
diff --git a/gnu/packages/patches/lxqt-session-procps-4.patch b/gnu/packages/patches/lxqt-session-procps-4.patch
deleted file mode 100644
index d10e310723..0000000000
--- a/gnu/packages/patches/lxqt-session-procps-4.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From d1db1c791195f3c0cf148e2be8bd46c5a51ca535 Mon Sep 17 00:00:00 2001
-From: Palo Kisa <palo.kisa@gmail.com>
-Date: Tue, 7 Mar 2023 14:21:40 +0100
-Subject: [PATCH 978/978] reaper: Build/Run on systems with procps-ng >= 4.0.0
- (#456)
-
-On Linux, make it possible to use libproc2 or libprocps whichever is
-available.
----
- CMakeLists.txt                  |  6 +++++-
- lxqt-session/src/procreaper.cpp | 24 +++++++++++++++++++++++-
- 2 files changed, 28 insertions(+), 2 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index a3c5e0d..f208600 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -35,7 +35,11 @@ find_package(X11 REQUIRED)
- message(STATUS "Building with Qt${Qt5Core_VERSION}")
- find_package(PkgConfig REQUIRED)
- if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    pkg_search_module(PROCPS REQUIRED libprocps)
-+    pkg_search_module(PROCPS REQUIRED libproc2 libprocps)
-+    message(STATUS "Using PROCPS -> ${PROCPS_MODULE_NAME} v${PROCPS_VERSION}")
-+    if (PROCPS_VERSION VERSION_GREATER_EQUAL 4.0.0)
-+        add_definitions("-DUSING_LIBPROC2")
-+    endif()
- endif()
- 
- # Please don't move, must be after lxqt
-diff --git a/lxqt-session/src/procreaper.cpp b/lxqt-session/src/procreaper.cpp
-index 2acd030..1ea4bdc 100644
---- a/lxqt-session/src/procreaper.cpp
-+++ b/lxqt-session/src/procreaper.cpp
-@@ -29,7 +29,11 @@
- #include "log.h"
- #if defined(Q_OS_LINUX)
- #include <sys/prctl.h>
--#include <proc/readproc.h>
-+# if defined(USING_LIBPROC2)
-+#  include <libproc2/pids.h>
-+# else
-+#  include <proc/readproc.h>
-+# endif
- #elif defined(Q_OS_FREEBSD)
- #include <sys/procctl.h>
- #include <libutil.h>
-@@ -109,6 +113,23 @@ void ProcReaper::stop(const std::set<int64_t> & excludedPids)
-     const pid_t my_pid = ::getpid();
-     std::vector<pid_t> children;
- #if defined(Q_OS_LINUX)
-+# if defined(USING_LIBPROC2)
-+    constexpr pids_item items[] = { PIDS_ID_PPID, PIDS_ID_TGID };
-+    enum rel_items { rel_ppid, rel_tgid };
-+    pids_info * info = nullptr;
-+    procps_pids_new(&info, const_cast<pids_item *>(items), sizeof(items) / sizeof(pids_item));
-+    pids_stack * stack = nullptr;
-+    while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY)))
-+    {
-+        const int ppid = PIDS_VAL(rel_ppid, s_int, stack, info);
-+        if (ppid == my_pid)
-+        {
-+            const int tgid = PIDS_VAL(rel_tgid, s_int, stack, info);
-+            children.push_back(tgid);
-+        }
-+    }
-+    procps_pids_unref(&info);
-+# else
-     PROCTAB * proc_dir = ::openproc(PROC_FILLSTAT);
-     while (proc_t * proc = ::readproc(proc_dir, nullptr))
-     {
-@@ -119,6 +140,7 @@ void ProcReaper::stop(const std::set<int64_t> & excludedPids)
-         ::freeproc(proc);
-     }
-     ::closeproc(proc_dir);
-+# endif
- #elif defined(Q_OS_FREEBSD)
-     int cnt = 0;
-     if (kinfo_proc *proc_info = kinfo_getallproc(&cnt))
--- 
-2.39.2
-
diff --git a/gnu/packages/patches/mars-install.patch b/gnu/packages/patches/mars-install.patch
deleted file mode 100644
index 1e3964c141..0000000000
--- a/gnu/packages/patches/mars-install.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Remove install target for non-existant directory.
-
---- a/src/CMakeLists.txt	2015-09-13 20:52:28.517344327 +0200
-+++ b/src/CMakeLists.txt	2015-09-13 20:53:04.842453987 +0200
-@@ -122,12 +122,6 @@
- 		DESTINATION
- 			${CMAKE_INSTALL_PREFIX}/share/applications
- 	)
--	install(
--		FILES
--			${MARS_SOURCE_DIR}/resources/mars
--		DESTINATION
--			${CMAKE_INSTALL_PREFIX}/share/menu
--	)
- 
- else(UNIX)
- 	# executable
diff --git a/gnu/packages/patches/mars-sfml-2.3.patch b/gnu/packages/patches/mars-sfml-2.3.patch
deleted file mode 100644
index 01ec05ff36..0000000000
--- a/gnu/packages/patches/mars-sfml-2.3.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-This is a concatenation of the following two patches:
-
-  https://github.com/jcowgill/M.A.R.S./commit/33d5affabf8ff84f2c028b9303c6a9e83cc824ad.patch
-  https://patch-diff.githubusercontent.com/raw/thelaui/M.A.R.S./pull/2.patch
-
-Their purpose is to allow Mars to be built against the latest version of SFML.
-
-From 33d5affabf8ff84f2c028b9303c6a9e83cc824ad Mon Sep 17 00:00:00 2001
-From: James Cowgill <james410@cowgill.org.uk>
-Date: Sat, 9 May 2015 01:54:14 +0100
-Subject: [PATCH] Remove dependency on GLU - fixes build with SFML 2.3
-
----
- premake4.lua           |  8 ++++----
- src/Shaders/postFX.cpp |  2 +-
- src/System/window.cpp  | 12 ++++++------
- 3 files changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/premake4.lua b/premake4.lua
-index 023dddd..5af4495 100755
---- a/premake4.lua
-+++ b/premake4.lua
-@@ -11,11 +11,11 @@ project "mars"
-     defines { "NDEBUG" }

-     flags   { "Optimize" }

-     if os.get() == "windows" then

--      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "glu32", "opengl32", "fribidi-0", "tag" }

-+      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "opengl32", "fribidi-0", "tag" }

-     elseif os.get() == "macosx" then

-       links { "sfml-graphics.framework", "sfml-audio.framework", "sfml-system.framework", "sfml-window.framework", "opengl.framework", "fribidi", "tag" }

-     else

--      links { "GLU", "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "fribidi", "tag" }

-+      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "fribidi", "tag" }

-       libdirs { "/usr/lib", "/usr/local/lib" }

-     end

-     

-@@ -23,10 +23,10 @@ project "mars"
-     defines { "_DEBUG", "DEBUG" }

-     flags   { "Symbols" }

-     if os.get() == "windows" then

--      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "glu32", "opengl32", "fribidi-0", "tag" }

-+      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "opengl32", "fribidi-0", "tag" }

-     elseif os.get() == "macosx" then

-       links { "sfml-graphics.framework", "sfml-audio.framework", "sfml-system.framework", "sfml-window.framework", "opengl.framework", "fribidi", "tag" }

-     else

--      links { "GLU", "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "fribidi", "tag" }

-+      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "fribidi", "tag" }

-       libdirs { "/usr/lib", "/usr/local/lib" }

-     end

-diff --git a/src/Shaders/postFX.cpp b/src/Shaders/postFX.cpp
-index 987f411..f767a47 100644
---- a/src/Shaders/postFX.cpp
-+++ b/src/Shaders/postFX.cpp
-@@ -78,7 +78,7 @@ namespace postFX {
-             postFX_.loadFromFile(settings::C_dataPath + "shaders/bump.frag", sf::Shader::Fragment);
-             bumpMap_.create(SPACE_X_RESOLUTION*0.5f, SPACE_Y_RESOLUTION*0.5f);
-             glViewport(0,0,SPACE_X_RESOLUTION*0.5f,SPACE_Y_RESOLUTION*0.5f);
--            gluOrtho2D(0, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0);
-+            glOrtho(0, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0, -1, 1);
-             glEnable(GL_BLEND);
-             glMatrixMode(GL_MODELVIEW);
-             postFX_.setParameter("BumpMap", bumpMap_.getTexture());
-diff --git a/src/System/window.cpp b/src/System/window.cpp
-index e9a099a..8e12dcc 100644
---- a/src/System/window.cpp
-+++ b/src/System/window.cpp
-@@ -222,7 +222,7 @@ namespace window {
-         glLoadIdentity();
- 
-         // Setup translation (according to left-upper corner)
--        gluOrtho2D(0.f, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0.f);
-+        glOrtho(0.f, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0.f, -1, 1);
- 
-         // probably improves performance...
-         glDisable(GL_LIGHTING);
-@@ -247,7 +247,7 @@ namespace window {
- 
-         glMatrixMode(GL_PROJECTION);
-         glLoadIdentity();
--        gluOrtho2D(0.f, viewPort_.x_, viewPort_.y_, 0.f);
-+        glOrtho(0.f, viewPort_.x_, viewPort_.y_, 0.f, -1, 1);
-         glMatrixMode(GL_MODELVIEW);
-         glLoadIdentity();
- 
-@@ -255,7 +255,7 @@ namespace window {
- 
-         glMatrixMode(GL_PROJECTION);
-         glLoadIdentity();
--        gluOrtho2D(0.f, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0.f);
-+        glOrtho(0.f, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0.f, -1, 1);
-         glMatrixMode(GL_MODELVIEW);
-         glLoadIdentity();
-     }
-@@ -270,7 +270,7 @@ namespace window {
-             glLoadIdentity();
-             setViewPort();
- 
--            gluOrtho2D(0.f, viewPort_.x_, viewPort_.y_, 0.f);
-+            glOrtho(0.f, viewPort_.x_, viewPort_.y_, 0.f, -1, 1);
- 
-             glMatrixMode(GL_MODELVIEW);
-             glLoadIdentity();
-@@ -284,7 +284,7 @@ namespace window {
-             glLoadIdentity();
-             setViewPort();
- 
--            gluOrtho2D(0.f, viewPort_.x_, viewPort_.y_, 0.f);
-+            glOrtho(0.f, viewPort_.x_, viewPort_.y_, 0.f, -1, 1);
- 
-             glMatrixMode(GL_MODELVIEW);
-             glLoadIdentity();
-@@ -294,7 +294,7 @@ namespace window {
-         else {
-             glMatrixMode(GL_PROJECTION);
-             glLoadIdentity();
--            gluOrtho2D(0.f, viewPort_.x_, viewPort_.y_, 0.f);
-+            glOrtho(0.f, viewPort_.x_, viewPort_.y_, 0.f, -1, 1);
-             glMatrixMode(GL_MODELVIEW);
-             glLoadIdentity();
-         }
-
-From a97d0d6a19b5b43e3c53081e36f1f1747b6674e6 Mon Sep 17 00:00:00 2001
-From: Sylvain BOILARD <boilard@crans.org>
-Date: Wed, 23 Jan 2013 02:02:47 +0100
-Subject: [PATCH] Use sf::Shader::Bind() correctly after latest update of the
- SFML's API.
-
----
- src/System/window.cpp | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/src/System/window.cpp b/src/System/window.cpp
-index e9a099a..3ffcf65 100644
---- a/src/System/window.cpp
-+++ b/src/System/window.cpp
-@@ -307,13 +307,11 @@ namespace window {
-         window_.setActive(true);
-         glEnable(GL_TEXTURE_2D);
- 
--        if (shader)
--            shader->bind();
-+        sf::Shader::bind(shader);
- 
-         window_.draw(toBeDrawn, states);
- 
--        if (shader)
--            shader->unbind();
-+        sf::Shader::bind(NULL);
- 
-         window_.popGLStates();
-         glPopMatrix();
diff --git a/gnu/packages/patches/mesa-fix-sporadic-test-failures.patch b/gnu/packages/patches/mesa-fix-sporadic-test-failures.patch
deleted file mode 100644
index 50ac5530a2..0000000000
--- a/gnu/packages/patches/mesa-fix-sporadic-test-failures.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-commit 7749599d737d205a88bbb6fa755ba095d9b581fa
-Author: Gert Wollny <gert.wollny@collabora.com>
-Date:   Mon Aug 15 17:15:43 2022 +0200
-
-    r600/sfn: Initialize out buffer when printing op
-    
-    79ca456b4837b3bc21cf9ef3c03c505c4b4909f6
-       r600/sfn: rewrite NIR backend
-    
-    Closes: #7021
-    
-    Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
-    Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18130>
-
-diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_export.cpp b/src/gallium/drivers/r600/sfn/sfn_instr_export.cpp
-index 3d40ea1796a..00826ed6457 100644
---- a/src/gallium/drivers/r600/sfn/sfn_instr_export.cpp
-+++ b/src/gallium/drivers/r600/sfn/sfn_instr_export.cpp
-@@ -206,7 +206,7 @@ bool WriteScratchInstr::do_ready() const
- 
- void WriteScratchInstr::do_print(std::ostream& os) const
- {
--   char buf[6];
-+   char buf[6] = {0};
- 
-    os << "WRITE_SCRATCH ";
-    if (m_address)
diff --git a/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
index 93996b52a7..4d381b004d 100644
--- a/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
+++ b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
@@ -1,4 +1,4 @@
-From debc32a287209e1d1bb6fedb479bd923fd016399 Mon Sep 17 00:00:00 2001
+From 82e98cf24808754578ab26adef5c33acc949f75e Mon Sep 17 00:00:00 2001
 From: Liliana Marie Prikler <liliana.prikler@gmail.com>
 Date: Sat, 5 Jun 2021 22:47:00 -0400
 Subject: [PATCH] ppsspp: Remove upgrade code and gold support.
@@ -6,7 +6,7 @@ Subject: [PATCH] ppsspp: Remove upgrade code and gold support.
 Original patch from Liliana Marie Prikler.
 Rebased on master (commit 69fa20744958aef8da9ca052ba7675fdc1636e46) by
 Maxim Cournoyer.
-Revised once again by Liliana Marie Prikler for version 1.12.3.
+Revised again by Liliana Marie Prikler for versions 1.12.3 and 1.14.4.
 ---
  Common/System/System.h      |  1 -
  Core/Config.cpp             | 12 -------
@@ -16,24 +16,23 @@ Revised once again by Liliana Marie Prikler for version 1.12.3.
  Qt/mainwindow.h             |  1 -
  SDL/SDLMain.cpp             |  6 ----
  UI/DevScreens.cpp           |  3 --
- UI/GameSettingsScreen.cpp   |  4 +--
- UI/MainScreen.cpp           | 70 +------------------------------------
+ UI/GameSettingsScreen.cpp   |  2 --
+ UI/MainScreen.cpp           | 71 +------------------------------------
  UI/MemStickScreen.cpp       |  8 -----
- UI/MiscScreens.cpp          | 31 ++--------------
+ UI/MiscScreens.cpp          | 33 +++--------------
  UWP/PPSSPP_UWPMain.cpp      |  6 ----
  Windows/MainWindowMenu.cpp  |  8 +----
- Windows/WindowsHost.cpp     |  4 ---
  Windows/main.cpp            |  6 ----
  Windows/resource.h          |  1 -
  android/jni/app-android.cpp |  6 ----
  ios/main.mm                 |  6 ----
- 19 files changed, 6 insertions(+), 181 deletions(-)
+ 18 files changed, 6 insertions(+), 178 deletions(-)
 
 diff --git a/Common/System/System.h b/Common/System/System.h
-index 09560191e..5df68a120 100644
+index 6f1524ab0..cbc51c840 100644
 --- a/Common/System/System.h
 +++ b/Common/System/System.h
-@@ -83,7 +83,6 @@ enum SystemProperty {
+@@ -91,7 +91,6 @@ enum SystemProperty {
  	SYSPROP_DISPLAY_SAFE_INSET_BOTTOM,
  
  	SYSPROP_DEVICE_TYPE,
@@ -42,10 +41,10 @@ index 09560191e..5df68a120 100644
  	// Exposed on Android. Choosing the optimal sample rate for audio
  	// will result in lower latencies. Buffer size is automatically matched
 diff --git a/Core/Config.cpp b/Core/Config.cpp
-index 305098f47..9c28a3315 100644
+index 4971f9a8d..8a8386c0a 100644
 --- a/Core/Config.cpp
 +++ b/Core/Config.cpp
-@@ -512,7 +512,6 @@ static ConfigSetting generalSettings[] = {
+@@ -534,7 +534,6 @@ static ConfigSetting generalSettings[] = {
  	ConfigSetting("IgnoreBadMemAccess", &g_Config.bIgnoreBadMemAccess, true, true),
  	ConfigSetting("CurrentDirectory", &g_Config.currentDirectory, ""),
  	ConfigSetting("ShowDebuggerOnLoad", &g_Config.bShowDebuggerOnLoad, false),
@@ -53,8 +52,8 @@ index 305098f47..9c28a3315 100644
  	ConfigSetting("Language", &g_Config.sLanguageIni, &DefaultLangRegion),
  	ConfigSetting("ForceLagSync2", &g_Config.bForceLagSync, false, true, true),
  	ConfigSetting("DiscordPresence", &g_Config.bDiscordPresence, true, true, false),  // Or maybe it makes sense to have it per-game? Race conditions abound...
-@@ -1395,17 +1394,6 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
- 		upgradeMessage = "";
+@@ -1453,17 +1452,6 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
+ 		upgradeMessage.clear();
  	}
  
 -	// Check for new version on every 10 runs.
@@ -72,10 +71,10 @@ index 305098f47..9c28a3315 100644
  	bSaveSettings = true;
  
 diff --git a/Core/Config.h b/Core/Config.h
-index 7bbbf2798..1bc1c2296 100644
+index 8f10a5089..5e4054be1 100644
 --- a/Core/Config.h
 +++ b/Core/Config.h
-@@ -109,7 +109,6 @@ struct Config {
+@@ -113,7 +113,6 @@ struct Config {
  
  	bool bFastMemory;
  	int iCpuCore;
@@ -83,19 +82,19 @@ index 7bbbf2798..1bc1c2296 100644
  	bool bForceLagSync;
  	bool bFuncReplacements;
  	bool bHideSlowWarnings;
-@@ -562,4 +561,3 @@ std::string CreateRandMAC();
+@@ -596,4 +595,3 @@ std::string CreateRandMAC();
  // TODO: Find a better place for this.
  extern http::Downloader g_DownloadManager;
  extern Config g_Config;
 -
 diff --git a/Qt/QtMain.cpp b/Qt/QtMain.cpp
-index b642f7442..a880d7c94 100644
+index f5a930061..d966d79ea 100644
 --- a/Qt/QtMain.cpp
 +++ b/Qt/QtMain.cpp
-@@ -219,12 +219,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
- 	case SYSPROP_HAS_FILE_BROWSER:
- 	case SYSPROP_HAS_FOLDER_BROWSER:
+@@ -238,12 +238,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
  		return true;
+ 	case SYSPROP_SUPPORTS_OPEN_FILE_IN_EDITOR:
+ 		return true;  // FileUtil.cpp: OpenFileInEditor
 -	case SYSPROP_APP_GOLD:
 -#ifdef GOLD
 -		return true;
@@ -104,12 +103,12 @@ index b642f7442..a880d7c94 100644
 -#endif
  	case SYSPROP_CAN_JIT:
  		return true;
- 	default:
+ 	case SYSPROP_HAS_KEYBOARD:
 diff --git a/Qt/mainwindow.cpp b/Qt/mainwindow.cpp
-index 1f56e0e76..0b7680427 100644
+index 26707a76e..aae5fe133 100644
 --- a/Qt/mainwindow.cpp
 +++ b/Qt/mainwindow.cpp
-@@ -413,11 +413,6 @@ void MainWindow::forumAct()
+@@ -421,11 +421,6 @@ void MainWindow::forumAct()
  	QDesktopServices::openUrl(QUrl("https://forums.ppsspp.org/"));
  }
  
@@ -121,7 +120,7 @@ index 1f56e0e76..0b7680427 100644
  void MainWindow::gitAct()
  {
  	QDesktopServices::openUrl(QUrl("https://github.com/hrydgard/ppsspp/"));
-@@ -666,7 +661,6 @@ void MainWindow::createMenus()
+@@ -673,7 +668,6 @@ void MainWindow::createMenus()
  	MenuTree* helpMenu = new MenuTree(this, menuBar(),    QT_TR_NOOP("&Help"));
  	helpMenu->add(new MenuAction(this, SLOT(websiteAct()),    QT_TR_NOOP("Visit www.&ppsspp.org")));
  	helpMenu->add(new MenuAction(this, SLOT(forumAct()),      QT_TR_NOOP("PPSSPP &forums")));
@@ -130,10 +129,10 @@ index 1f56e0e76..0b7680427 100644
  	helpMenu->add(new MenuAction(this, SLOT(discordAct()),      QT_TR_NOOP("Discord")));
  	helpMenu->addSeparator();
 diff --git a/Qt/mainwindow.h b/Qt/mainwindow.h
-index 99c9fc3ad..8cd6cbf79 100644
+index 705a3dd00..4c8abe452 100644
 --- a/Qt/mainwindow.h
 +++ b/Qt/mainwindow.h
-@@ -197,7 +197,6 @@ private slots:
+@@ -189,7 +189,6 @@ private slots:
  	// Help
  	void websiteAct();
  	void forumAct();
@@ -142,10 +141,10 @@ index 99c9fc3ad..8cd6cbf79 100644
  	void discordAct();
  	void aboutAct();
 diff --git a/SDL/SDLMain.cpp b/SDL/SDLMain.cpp
-index f0f74f979..f963f36e9 100644
+index 415860069..a8a2285be 100644
 --- a/SDL/SDLMain.cpp
 +++ b/SDL/SDLMain.cpp
-@@ -381,12 +381,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+@@ -415,12 +415,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
  	switch (prop) {
  	case SYSPROP_HAS_BACK_BUTTON:
  		return true;
@@ -157,12 +156,12 @@ index f0f74f979..f963f36e9 100644
 -#endif
  	case SYSPROP_CAN_JIT:
  		return true;
- 	default:
+ 	case SYSPROP_SUPPORTS_OPEN_FILE_IN_EDITOR:
 diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp
-index 389fdf096..8442ee8c6 100644
+index 568cc7c2f..051f147e2 100644
 --- a/UI/DevScreens.cpp
 +++ b/UI/DevScreens.cpp
-@@ -649,9 +649,6 @@ void SystemInfoScreen::CreateViews() {
+@@ -691,9 +691,6 @@ void SystemInfoScreen::CreateViews() {
  #ifdef _M_SSE
  	buildConfig->Add(new InfoItem("_M_SSE", StringFromFormat("0x%x", _M_SSE)));
  #endif
@@ -173,32 +172,23 @@ index 389fdf096..8442ee8c6 100644
  	ViewGroup *cpuExtensionsScroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT));
  	cpuExtensionsScroll->SetTag("DevSystemInfoCPUExt");
 diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp
-index 99fb151b9..90f26d5dc 100644
+index e0d12bc97..1e63d5d9d 100644
 --- a/UI/GameSettingsScreen.cpp
 +++ b/UI/GameSettingsScreen.cpp
-@@ -1023,7 +1023,6 @@ void GameSettingsScreen::CreateViews() {
+@@ -1004,8 +1004,6 @@ void GameSettingsScreen::CreateViews() {
  		}
  	}
  #endif
 -	systemSettings->Add(new CheckBox(&g_Config.bCheckForNewVersion, sy->T("VersionCheck", "Check for new versions of PPSSPP")));
- 
+-
  	systemSettings->Add(new Choice(sy->T("Restore Default Settings")))->OnClick.Handle(this, &GameSettingsScreen::OnRestoreDefaultSettings);
  	systemSettings->Add(new CheckBox(&g_Config.bEnableStateUndo, sy->T("Savestate slot backups")));
-@@ -2076,8 +2075,7 @@ void GestureMappingScreen::CreateViews() {
- 	vert->Add(new PopupMultiChoice(&g_Config.iSwipeRight, mc->T("Swipe Right"), gestureButton, 0, ARRAY_SIZE(gestureButton), mc->GetName(), screenManager()))->SetEnabledPtr(&g_Config.bGestureControlEnabled);
- 	vert->Add(new PopupSliderChoiceFloat(&g_Config.fSwipeSensitivity, 0.01f, 1.0f, co->T("Swipe sensitivity"), 0.01f, screenManager(), "x"))->SetEnabledPtr(&g_Config.bGestureControlEnabled);
- 	vert->Add(new PopupSliderChoiceFloat(&g_Config.fSwipeSmoothing, 0.0f, 0.95f, co->T("Swipe smoothing"), 0.05f, screenManager(), "x"))->SetEnabledPtr(&g_Config.bGestureControlEnabled);
--	
-+
- 	vert->Add(new ItemHeader(co->T("Double tap")));
- 	vert->Add(new PopupMultiChoice(&g_Config.iDoubleTapGesture, mc->T("Double tap button"), gestureButton, 0, ARRAY_SIZE(gestureButton), mc->GetName(), screenManager()))->SetEnabledPtr(&g_Config.bGestureControlEnabled);
- }
--
+ 	static const char *autoLoadSaveStateChoices[] = { "Off", "Oldest Save", "Newest Save", "Slot 1", "Slot 2", "Slot 3", "Slot 4", "Slot 5" };
 diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp
-index 4e86ac1ab..be49c3add 100644
+index cc273ebbd..6623025de 100644
 --- a/UI/MainScreen.cpp
 +++ b/UI/MainScreen.cpp
-@@ -1100,11 +1100,7 @@ void MainScreen::CreateViews() {
+@@ -1111,11 +1111,7 @@ void MainScreen::CreateViews() {
  	sprintf(versionString, "%s", PPSSPP_GIT_VERSION);
  	rightColumnItems->SetSpacing(0.0f);
  	AnchorLayout *logos = new AnchorLayout(new AnchorLayoutParams(FILL_PARENT, 60.0f, false));
@@ -211,19 +201,20 @@ index 4e86ac1ab..be49c3add 100644
  	logos->Add(new ImageView(ImageID("I_LOGO"), "PPSSPP", IS_DEFAULT, new AnchorLayoutParams(180, 64, 64, -5.0f, NONE, NONE, false)));
  
  #if !defined(MOBILE_DEVICE)
-@@ -1127,11 +1123,6 @@ void MainScreen::CreateViews() {
- 	rightColumnItems->Add(new Choice(mm->T("Game Settings", "Settings")))->OnClick.Handle(this, &MainScreen::OnGameSettings);
+@@ -1140,12 +1136,6 @@ void MainScreen::CreateViews() {
  	rightColumnItems->Add(new Choice(mm->T("Credits")))->OnClick.Handle(this, &MainScreen::OnCredits);
  	rightColumnItems->Add(new Choice(mm->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg);
--	if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+ 
+-	if (!System_GetPropertyBool(SYSPROP_APP_GOLD) && (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) != DEVICE_TYPE_VR)) {
 -		Choice *gold = rightColumnItems->Add(new Choice(mm->T("Buy PPSSPP Gold")));
 -		gold->OnClick.Handle(this, &MainScreen::OnSupport);
 -		gold->SetIcon(ImageID("I_ICONGOLD"), 0.5f);
 -	}
- 
+-
  #if !PPSSPP_PLATFORM(UWP)
  	// Having an exit button is against UWP guidelines.
-@@ -1156,32 +1147,6 @@ void MainScreen::CreateViews() {
+ 	rightColumnItems->Add(new Spacer(25.0));
+@@ -1169,32 +1159,6 @@ void MainScreen::CreateViews() {
  	} else if (tabHolder_->GetVisibility() != V_GONE) {
  		root_->SetDefaultFocusView(tabHolder_);
  	}
@@ -256,7 +247,7 @@ index 4e86ac1ab..be49c3add 100644
  }
  
  UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
-@@ -1189,30 +1154,6 @@ UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
+@@ -1202,30 +1166,6 @@ UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
  	return UI::EVENT_DONE;
  }
  
@@ -287,7 +278,7 @@ index 4e86ac1ab..be49c3add 100644
  void MainScreen::sendMessage(const char *message, const char *value) {
  	// Always call the base class method first to handle the most common messages.
  	UIScreenWithBackground::sendMessage(message, value);
-@@ -1386,15 +1327,6 @@ UI::EventReturn MainScreen::OnCredits(UI::EventParams &e) {
+@@ -1392,15 +1332,6 @@ UI::EventReturn MainScreen::OnCredits(UI::EventParams &e) {
  	return UI::EVENT_DONE;
  }
  
@@ -304,7 +295,7 @@ index 4e86ac1ab..be49c3add 100644
  	LaunchBrowser("https://www.ppsspp.org");
  	return UI::EVENT_DONE;
 diff --git a/UI/MemStickScreen.cpp b/UI/MemStickScreen.cpp
-index ef617c5b5..664614c62 100644
+index 374c4683a..4a3d54155 100644
 --- a/UI/MemStickScreen.cpp
 +++ b/UI/MemStickScreen.cpp
 @@ -157,23 +157,16 @@ static void AddExplanation(UI::ViewGroup *viewGroup, MemStickScreen::Choice choi
@@ -340,23 +331,32 @@ index ef617c5b5..664614c62 100644
  	}
  	if (choice_ == CHOICE_BROWSE_FOLDER || choice_ == CHOICE_SET_MANUAL) {
 diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp
-index 04e5df6c3..fb6c29725 100644
+index fef1fae1b..942997925 100644
 --- a/UI/MiscScreens.cpp
 +++ b/UI/MiscScreens.cpp
-@@ -769,11 +769,7 @@ void LogoScreen::render() {
+@@ -657,7 +657,7 @@ void NewLanguageScreen::OnCompleted(DialogResult result) {
+ 	g_Config.sLanguageIni = code;
+ 
+ 	bool iniLoadedSuccessfully = false;
+-	// Allow the lang directory to be overridden for testing purposes (e.g. Android, where it's hard to 
++	// Allow the lang directory to be overridden for testing purposes (e.g. Android, where it's hard to
+ 	// test new languages without recompiling the entire app, which is a hassle).
+ 	const Path langOverridePath = GetSysDirectory(DIRECTORY_SYSTEM) / "lang";
+ 
+@@ -781,11 +781,7 @@ void LogoScreen::render() {
  	char temp[256];
  	// Manually formatting UTF-8 is fun.  \xXX doesn't work everywhere.
  	snprintf(temp, sizeof(temp), "%s Henrik Rydg%c%crd", cr->T("created", "Created by"), 0xC3, 0xA5);
 -	if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
--		dc.Draw()->DrawImage(ImageID("I_ICONGOLD"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
+-		dc.Draw()->DrawImage(ImageID("I_ICONGOLD"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, 0xFFFFFFFF, ALIGN_CENTER);
 -	} else {
--		dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
+-		dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, 0xFFFFFFFF, ALIGN_CENTER);
 -	}
-+	dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
- 	dc.Draw()->DrawImage(ImageID("I_LOGO"), bounds.centerX() + 40, bounds.centerY() - 30, 1.5f, textColor, ALIGN_CENTER);
++	dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, 0xFFFFFFFF, ALIGN_CENTER);
+ 	dc.Draw()->DrawImage(ImageID("I_LOGO"), bounds.centerX() + 40, bounds.centerY() - 30, 1.5f, 0xFFFFFFFF, ALIGN_CENTER);
  	//dc.Draw()->DrawTextShadow(UBUNTU48, "PPSSPP", bounds.w / 2, bounds.h / 2 - 30, textColor, ALIGN_CENTER);
  	dc.SetFontScale(1.0f, 1.0f);
-@@ -809,10 +805,6 @@ void CreditsScreen::CreateViews() {
+@@ -821,10 +817,6 @@ void CreditsScreen::CreateViews() {
  	// Really need to redo this whole layout with some linear layouts...
  
  	int rightYOffset = 0;
@@ -367,7 +367,7 @@ index 04e5df6c3..fb6c29725 100644
  	root_->Add(new Button(cr->T("PPSSPP Forums"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 158, false)))->OnClick.Handle(this, &CreditsScreen::OnForums);
  	root_->Add(new Button(cr->T("Discord"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 232, false)))->OnClick.Handle(this, &CreditsScreen::OnDiscord);
  	root_->Add(new Button("www.ppsspp.org", new AnchorLayoutParams(260, 64, 10, NONE, NONE, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnPPSSPPOrg);
-@@ -821,20 +813,7 @@ void CreditsScreen::CreateViews() {
+@@ -833,20 +825,7 @@ void CreditsScreen::CreateViews() {
  #if PPSSPP_PLATFORM(ANDROID) || PPSSPP_PLATFORM(IOS)
  	root_->Add(new Button(cr->T("Share PPSSPP"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 158, false)))->OnClick.Handle(this, &CreditsScreen::OnShare);
  #endif
@@ -389,7 +389,7 @@ index 04e5df6c3..fb6c29725 100644
  }
  
  UI::EventReturn CreditsScreen::OnTwitter(UI::EventParams &e) {
-@@ -1024,11 +1003,7 @@ void CreditsScreen::render() {
+@@ -1033,11 +1012,7 @@ void CreditsScreen::render() {
  
  	// TODO: This is kinda ugly, done on every frame...
  	char temp[256];
@@ -403,10 +403,10 @@ index 04e5df6c3..fb6c29725 100644
  
  	UIContext &dc = *screenManager()->getUIContext();
 diff --git a/UWP/PPSSPP_UWPMain.cpp b/UWP/PPSSPP_UWPMain.cpp
-index 29afda806..b7028fc0c 100644
+index b734f6e3d..ef694fcd3 100644
 --- a/UWP/PPSSPP_UWPMain.cpp
 +++ b/UWP/PPSSPP_UWPMain.cpp
-@@ -426,12 +426,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+@@ -418,12 +418,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
  		return false;
  	case SYSPROP_HAS_BACK_BUTTON:
  		return true;
@@ -418,9 +418,9 @@ index 29afda806..b7028fc0c 100644
 -#endif
  	case SYSPROP_CAN_JIT:
  		return true;
- 	default:
+ 	case SYSPROP_HAS_KEYBOARD:
 diff --git a/Windows/MainWindowMenu.cpp b/Windows/MainWindowMenu.cpp
-index 006fed4f4..4761171ff 100644
+index 25af2cd08..19ffd0a52 100644
 --- a/Windows/MainWindowMenu.cpp
 +++ b/Windows/MainWindowMenu.cpp
 @@ -136,7 +136,6 @@ namespace MainWindow {
@@ -439,7 +439,7 @@ index 006fed4f4..4761171ff 100644
  		AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_GITHUB, gitHub.c_str());
  		AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_DISCORD, discord.c_str());
  		AppendMenu(helpMenu, MF_SEPARATOR, 0, 0);
-@@ -1015,10 +1013,6 @@ namespace MainWindow {
+@@ -924,10 +922,6 @@ namespace MainWindow {
  			ShellExecute(NULL, L"open", L"https://www.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
  			break;
  
@@ -450,7 +450,7 @@ index 006fed4f4..4761171ff 100644
  		case ID_HELP_OPENFORUM:
  			ShellExecute(NULL, L"open", L"https://forums.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
  			break;
-@@ -1397,7 +1391,7 @@ namespace MainWindow {
+@@ -1280,7 +1274,7 @@ namespace MainWindow {
  		{
  			W32Util::CenterWindow(hDlg);
  			HWND versionBox = GetDlgItem(hDlg, IDC_VERSION);
@@ -459,27 +459,11 @@ index 006fed4f4..4761171ff 100644
  			windowText.append(PPSSPP_GIT_VERSION);
  			SetWindowText(versionBox, ConvertUTF8ToWString(windowText).c_str());
  		}
-diff --git a/Windows/WindowsHost.cpp b/Windows/WindowsHost.cpp
-index 610b79890..3d5926fce 100644
---- a/Windows/WindowsHost.cpp
-+++ b/Windows/WindowsHost.cpp
-@@ -155,11 +155,7 @@ void WindowsHost::ShutdownGraphics() {
- }
- 
- void WindowsHost::SetWindowTitle(const char *message) {
--#ifdef GOLD
--	const char *name = "PPSSPP Gold ";
--#else
- 	const char *name = "PPSSPP ";
--#endif
- 	std::wstring winTitle = ConvertUTF8ToWString(std::string(name) + PPSSPP_GIT_VERSION);
- 	if (message != nullptr) {
- 		winTitle.append(ConvertUTF8ToWString(" - "));
 diff --git a/Windows/main.cpp b/Windows/main.cpp
-index 9395233e2..90abec570 100644
+index 9351202be..30c75e092 100644
 --- a/Windows/main.cpp
 +++ b/Windows/main.cpp
-@@ -304,12 +304,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+@@ -333,12 +333,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
  		return true;
  	case SYSPROP_HAS_BACK_BUTTON:
  		return true;
@@ -491,12 +475,12 @@ index 9395233e2..90abec570 100644
 -#endif
  	case SYSPROP_CAN_JIT:
  		return true;
- 	default:
+ 	case SYSPROP_HAS_KEYBOARD:
 diff --git a/Windows/resource.h b/Windows/resource.h
-index ce21b3a85..1f8002c10 100644
+index 83ef88957..bdaef6234 100644
 --- a/Windows/resource.h
 +++ b/Windows/resource.h
-@@ -322,7 +322,6 @@
+@@ -339,7 +339,6 @@
  // Dummy option to let the buffered rendering hotkey cycle through all the options.
  #define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500
  #define IDC_STEPOUT                       40501
@@ -505,13 +489,13 @@ index ce21b3a85..1f8002c10 100644
  #define IDC_STATIC                      -1
  
 diff --git a/android/jni/app-android.cpp b/android/jni/app-android.cpp
-index df395e304..cebdf5804 100644
+index 18ef723d4..61d8e5c2d 100644
 --- a/android/jni/app-android.cpp
 +++ b/android/jni/app-android.cpp
-@@ -458,12 +458,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
- 		// Doesn't actually mean it's usable though, in many early versions of Android
- 		// this dialog is complete garbage and only lets you select subfolders of the Downloads folder.
+@@ -480,12 +480,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
  		return androidVersion >= 21;  // when ACTION_OPEN_DOCUMENT_TREE was added
+ 	case SYSPROP_SUPPORTS_OPEN_FILE_IN_EDITOR:
+ 		return false;  // Update if we add support in FileUtil.cpp: OpenFileInEditor
 -	case SYSPROP_APP_GOLD:
 -#ifdef GOLD
 -		return true;
@@ -522,10 +506,10 @@ index df395e304..cebdf5804 100644
  		return true;
  	case SYSPROP_ANDROID_SCOPED_STORAGE:
 diff --git a/ios/main.mm b/ios/main.mm
-index e53b7c7ab..fe69647ed 100644
+index b10db1a79..c410befdc 100644
 --- a/ios/main.mm
 +++ b/ios/main.mm
-@@ -148,12 +148,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+@@ -153,12 +153,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
  	switch (prop) {
  		case SYSPROP_HAS_BACK_BUTTON:
  			return false;
@@ -536,8 +520,8 @@ index e53b7c7ab..fe69647ed 100644
 -			return false;
 -#endif
  		case SYSPROP_CAN_JIT:
- 			return g_jitAvailable;
+ 			return get_debugged();
  
 -- 
-2.34.0
+2.39.2
 
diff --git a/gnu/packages/patches/python-scikit-optimize-1148.patch b/gnu/packages/patches/python-scikit-optimize-1148.patch
new file mode 100644
index 0000000000..6ad854ab1e
--- /dev/null
+++ b/gnu/packages/patches/python-scikit-optimize-1148.patch
@@ -0,0 +1,32 @@
+From 3a5d5eb90ec9d8d4905c05387748486157cadbbb Mon Sep 17 00:00:00 2001
+From: valtron <valtron2000@gmail.com>
+Date: Tue, 14 Feb 2023 09:56:10 -0700
+Subject: [PATCH] `np.int` -> `int`
+
+`np.int is int` and it was deprecated in numpy 1.20: https://numpy.org/doc/1.20/release/1.20.0-notes.html#deprecations
+---
+ skopt/space/transformers.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/skopt/space/transformers.py b/skopt/space/transformers.py
+index 68892952..f2dfb164 100644
+--- a/skopt/space/transformers.py
++++ b/skopt/space/transformers.py
+@@ -259,7 +259,7 @@ def transform(self, X):
+         if (self.high - self.low) == 0.:
+             return X * 0.
+         if self.is_int:
+-            return (np.round(X).astype(np.int) - self.low) /\
++            return (np.round(X).astype(int) - self.low) /\
+                    (self.high - self.low)
+         else:
+             return (X - self.low) / (self.high - self.low)
+@@ -272,7 +272,7 @@ def inverse_transform(self, X):
+             raise ValueError("All values should be greater than 0.0")
+         X_orig = X * (self.high - self.low) + self.low
+         if self.is_int:
+-            return np.round(X_orig).astype(np.int)
++            return np.round(X_orig).astype(int)
+         return X_orig
+ 
+ 
diff --git a/gnu/packages/patches/python-scikit-optimize-1150.patch b/gnu/packages/patches/python-scikit-optimize-1150.patch
new file mode 100644
index 0000000000..0cdf361a80
--- /dev/null
+++ b/gnu/packages/patches/python-scikit-optimize-1150.patch
@@ -0,0 +1,275 @@
+From cd74e00d0e4f435d548444e1a5edc20155e371d7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20T=C3=B8rnes?= <jonas.tornes@gmail.com>
+Date: Wed, 15 Feb 2023 18:47:52 +0100
+Subject: [PATCH 1/5] Update RandomForesetRegressor criterion to be inline with
+ scikit-learn change from mse to squared error this has the same funcitonality
+
+---
+ requirements.txt         |  6 +++---
+ setup.py                 |  6 +++---
+ skopt/learning/forest.py | 30 +++++++++++++++---------------
+ 3 files changed, 21 insertions(+), 21 deletions(-)
+
+diff --git a/requirements.txt b/requirements.txt
+index 1eaa3083a..23ab3d856 100644
+--- a/requirements.txt
++++ b/requirements.txt
+@@ -1,6 +1,6 @@
+-numpy>=1.13.3
+-scipy>=0.19.1
+-scikit-learn>=0.20
++numpy>=1.23.2
++scipy>=1.10.0
++scikit-learn>=1.2.1
+ matplotlib>=2.0.0
+ pytest
+ pyaml>=16.9
+diff --git a/setup.py b/setup.py
+index 8879da880..e7f921765 100644
+--- a/setup.py
++++ b/setup.py
+@@ -42,9 +42,9 @@
+       classifiers=CLASSIFIERS,
+       packages=['skopt', 'skopt.learning', 'skopt.optimizer', 'skopt.space',
+                 'skopt.learning.gaussian_process', 'skopt.sampler'],
+-      install_requires=['joblib>=0.11', 'pyaml>=16.9', 'numpy>=1.13.3',
+-                        'scipy>=0.19.1',
+-                        'scikit-learn>=0.20.0'],
++      install_requires=['joblib>=0.11', 'pyaml>=16.9', 'numpy>=1.23.2',
++                        'scipy>=1.10.0',
++                        'scikit-learn>=1.2.1'],
+       extras_require={
+         'plots':  ["matplotlib>=2.0.0"]
+         }
+diff --git a/skopt/learning/forest.py b/skopt/learning/forest.py
+index 096770c1d..ebde568f5 100644
+--- a/skopt/learning/forest.py
++++ b/skopt/learning/forest.py
+@@ -27,7 +27,7 @@ def _return_std(X, trees, predictions, min_variance):
+     -------
+     std : array-like, shape=(n_samples,)
+         Standard deviation of `y` at `X`. If criterion
+-        is set to "mse", then `std[i] ~= std(y | X[i])`.
++        is set to "squared_error", then `std[i] ~= std(y | X[i])`.
+ 
+     """
+     # This derives std(y | x) as described in 4.3.2 of arXiv:1211.0906
+@@ -61,9 +61,9 @@ class RandomForestRegressor(_sk_RandomForestRegressor):
+     n_estimators : integer, optional (default=10)
+         The number of trees in the forest.
+ 
+-    criterion : string, optional (default="mse")
++    criterion : string, optional (default="squared_error")
+         The function to measure the quality of a split. Supported criteria
+-        are "mse" for the mean squared error, which is equal to variance
++        are "squared_error" for the mean squared error, which is equal to variance
+         reduction as feature selection criterion, and "mae" for the mean
+         absolute error.
+ 
+@@ -194,7 +194,7 @@ class RandomForestRegressor(_sk_RandomForestRegressor):
+     .. [1] L. Breiman, "Random Forests", Machine Learning, 45(1), 5-32, 2001.
+ 
+     """
+-    def __init__(self, n_estimators=10, criterion='mse', max_depth=None,
++    def __init__(self, n_estimators=10, criterion='squared_error', max_depth=None,
+                  min_samples_split=2, min_samples_leaf=1,
+                  min_weight_fraction_leaf=0.0, max_features='auto',
+                  max_leaf_nodes=None, min_impurity_decrease=0.,
+@@ -228,20 +228,20 @@ def predict(self, X, return_std=False):
+         Returns
+         -------
+         predictions : array-like of shape = (n_samples,)
+-            Predicted values for X. If criterion is set to "mse",
++            Predicted values for X. If criterion is set to "squared_error",
+             then `predictions[i] ~= mean(y | X[i])`.
+ 
+         std : array-like of shape=(n_samples,)
+             Standard deviation of `y` at `X`. If criterion
+-            is set to "mse", then `std[i] ~= std(y | X[i])`.
++            is set to "squared_error", then `std[i] ~= std(y | X[i])`.
+ 
+         """
+         mean = super(RandomForestRegressor, self).predict(X)
+ 
+         if return_std:
+-            if self.criterion != "mse":
++            if self.criterion != "squared_error":
+                 raise ValueError(
+-                    "Expected impurity to be 'mse', got %s instead"
++                    "Expected impurity to be 'squared_error', got %s instead"
+                     % self.criterion)
+             std = _return_std(X, self.estimators_, mean, self.min_variance)
+             return mean, std
+@@ -257,9 +257,9 @@ class ExtraTreesRegressor(_sk_ExtraTreesRegressor):
+     n_estimators : integer, optional (default=10)
+         The number of trees in the forest.
+ 
+-    criterion : string, optional (default="mse")
++    criterion : string, optional (default="squared_error")
+         The function to measure the quality of a split. Supported criteria
+-        are "mse" for the mean squared error, which is equal to variance
++        are "squared_error" for the mean squared error, which is equal to variance
+         reduction as feature selection criterion, and "mae" for the mean
+         absolute error.
+ 
+@@ -390,7 +390,7 @@ class ExtraTreesRegressor(_sk_ExtraTreesRegressor):
+     .. [1] L. Breiman, "Random Forests", Machine Learning, 45(1), 5-32, 2001.
+ 
+     """
+-    def __init__(self, n_estimators=10, criterion='mse', max_depth=None,
++    def __init__(self, n_estimators=10, criterion='squared_error', max_depth=None,
+                  min_samples_split=2, min_samples_leaf=1,
+                  min_weight_fraction_leaf=0.0, max_features='auto',
+                  max_leaf_nodes=None, min_impurity_decrease=0.,
+@@ -425,19 +425,19 @@ def predict(self, X, return_std=False):
+         Returns
+         -------
+         predictions : array-like of shape=(n_samples,)
+-            Predicted values for X. If criterion is set to "mse",
++            Predicted values for X. If criterion is set to "squared_error",
+             then `predictions[i] ~= mean(y | X[i])`.
+ 
+         std : array-like of shape=(n_samples,)
+             Standard deviation of `y` at `X`. If criterion
+-            is set to "mse", then `std[i] ~= std(y | X[i])`.
++            is set to "squared_error", then `std[i] ~= std(y | X[i])`.
+         """
+         mean = super(ExtraTreesRegressor, self).predict(X)
+ 
+         if return_std:
+-            if self.criterion != "mse":
++            if self.criterion != "squared_error":
+                 raise ValueError(
+-                    "Expected impurity to be 'mse', got %s instead"
++                    "Expected impurity to be 'squared_error', got %s instead"
+                     % self.criterion)
+             std = _return_std(X, self.estimators_, mean, self.min_variance)
+             return mean, std
+
+From 6eb2d4ddaa299ae47d9a69ffb31ebc4ed366d1c1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20T=C3=B8rnes?= <jonas.tornes@gmail.com>
+Date: Thu, 16 Feb 2023 11:34:58 +0100
+Subject: [PATCH 2/5] Change test to be consistent with code changes.
+
+---
+ skopt/learning/tests/test_forest.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/skopt/learning/tests/test_forest.py b/skopt/learning/tests/test_forest.py
+index 0711cde9d..c6ed610f3 100644
+--- a/skopt/learning/tests/test_forest.py
++++ b/skopt/learning/tests/test_forest.py
+@@ -35,7 +35,7 @@ def test_random_forest():
+     assert_array_equal(clf.predict(T), true_result)
+     assert 10 == len(clf)
+ 
+-    clf = RandomForestRegressor(n_estimators=10, criterion="mse",
++    clf = RandomForestRegressor(n_estimators=10, criterion="squared_error",
+                                 max_depth=None, min_samples_split=2,
+                                 min_samples_leaf=1,
+                                 min_weight_fraction_leaf=0.,
+@@ -80,7 +80,7 @@ def test_extra_forest():
+     assert_array_equal(clf.predict(T), true_result)
+     assert 10 == len(clf)
+ 
+-    clf = ExtraTreesRegressor(n_estimators=10, criterion="mse",
++    clf = ExtraTreesRegressor(n_estimators=10, criterion="squared_error",
+                               max_depth=None, min_samples_split=2,
+                               min_samples_leaf=1, min_weight_fraction_leaf=0.,
+                               max_features="auto", max_leaf_nodes=None,
+
+From 52c620add07d845debbaff2ce2b1c5faf3eae79b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20T=C3=B8rnes?= <jonas.tornes@gmail.com>
+Date: Wed, 22 Feb 2023 16:59:03 +0100
+Subject: [PATCH 3/5] Update skopt/learning/forest.py
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fix max line width
+
+Co-authored-by: Roland Laurès <roland@laures-valdivia.net>
+---
+ skopt/learning/forest.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/skopt/learning/forest.py b/skopt/learning/forest.py
+index ebde568f5..07dc42664 100644
+--- a/skopt/learning/forest.py
++++ b/skopt/learning/forest.py
+@@ -194,8 +194,8 @@ class RandomForestRegressor(_sk_RandomForestRegressor):
+     .. [1] L. Breiman, "Random Forests", Machine Learning, 45(1), 5-32, 2001.
+ 
+     """
+-    def __init__(self, n_estimators=10, criterion='squared_error', max_depth=None,
+-                 min_samples_split=2, min_samples_leaf=1,
++    def __init__(self, n_estimators=10, criterion='squared_error',
++                 max_depth=None, min_samples_split=2, min_samples_leaf=1,
+                  min_weight_fraction_leaf=0.0, max_features='auto',
+                  max_leaf_nodes=None, min_impurity_decrease=0.,
+                  bootstrap=True, oob_score=False,
+
+From 52a7db95cb567186fb4e9003139fea4592bdbf05 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20T=C3=B8rnes?= <jonas.tornes@gmail.com>
+Date: Wed, 22 Feb 2023 17:03:25 +0100
+Subject: [PATCH 4/5] Fix line widht issues
+
+---
+ skopt/learning/forest.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/skopt/learning/forest.py b/skopt/learning/forest.py
+index 07dc42664..d4c24456b 100644
+--- a/skopt/learning/forest.py
++++ b/skopt/learning/forest.py
+@@ -390,8 +390,8 @@ class ExtraTreesRegressor(_sk_ExtraTreesRegressor):
+     .. [1] L. Breiman, "Random Forests", Machine Learning, 45(1), 5-32, 2001.
+ 
+     """
+-    def __init__(self, n_estimators=10, criterion='squared_error', max_depth=None,
+-                 min_samples_split=2, min_samples_leaf=1,
++    def __init__(self, n_estimators=10, criterion='squared_error',
++                 max_depth=None, min_samples_split=2, min_samples_leaf=1,
+                  min_weight_fraction_leaf=0.0, max_features='auto',
+                  max_leaf_nodes=None, min_impurity_decrease=0.,
+                  bootstrap=False, oob_score=False,
+
+From 6b185e489fb4a56625e8505292a20c80434f0633 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20T=C3=B8rnes?= <jonas.tornes@gmail.com>
+Date: Wed, 22 Feb 2023 18:37:11 +0100
+Subject: [PATCH 5/5] Fix lin width issues for comments.
+
+---
+ skopt/learning/forest.py | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/skopt/learning/forest.py b/skopt/learning/forest.py
+index d4c24456b..eb3bd6648 100644
+--- a/skopt/learning/forest.py
++++ b/skopt/learning/forest.py
+@@ -63,9 +63,9 @@ class RandomForestRegressor(_sk_RandomForestRegressor):
+ 
+     criterion : string, optional (default="squared_error")
+         The function to measure the quality of a split. Supported criteria
+-        are "squared_error" for the mean squared error, which is equal to variance
+-        reduction as feature selection criterion, and "mae" for the mean
+-        absolute error.
++        are "squared_error" for the mean squared error, which is equal to
++        variance reduction as feature selection criterion, and "mae" for the
++        mean absolute error.
+ 
+     max_features : int, float, string or None, optional (default="auto")
+         The number of features to consider when looking for the best split:
+@@ -259,9 +259,9 @@ class ExtraTreesRegressor(_sk_ExtraTreesRegressor):
+ 
+     criterion : string, optional (default="squared_error")
+         The function to measure the quality of a split. Supported criteria
+-        are "squared_error" for the mean squared error, which is equal to variance
+-        reduction as feature selection criterion, and "mae" for the mean
+-        absolute error.
++        are "squared_error" for the mean squared error, which is equal to
++        variance reduction as feature selection criterion, and "mae" for the
++        mean absolute error.
+ 
+     max_features : int, float, string or None, optional (default="auto")
+         The number of features to consider when looking for the best split:
diff --git a/gnu/packages/patches/python-wxwidgets-type-errors.patch b/gnu/packages/patches/python-wxwidgets-type-errors.patch
new file mode 100644
index 0000000000..53e48c0886
--- /dev/null
+++ b/gnu/packages/patches/python-wxwidgets-type-errors.patch
@@ -0,0 +1,42 @@
+Merged upstream but not yet released (see:
+https://github.com/wxWidgets/Phoenix/pull/2387/commits/5d9f7aa185cd18da3e93ae1d0033fb9172d7a714).
+
+From 5d9f7aa185cd18da3e93ae1d0033fb9172d7a714 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Mon, 1 May 2023 13:53:55 -0400
+Subject: [PATCH] agw: Fix TypeError caused by floats with Python 3.10
+ extensions.
+
+This fixes the following error:
+
+   File "/lib/python3.10/site-packages/wx/lib/agw/pygauge.py", line 380, in OnPaint
+       dc.DrawText(drawString, textXPos, textYPos)
+   TypeError: DC.DrawText(): arguments did not match any overloaded call:
+     overload 1: argument 2 has unexpected type 'float'
+     overload 2: argument 2 has unexpected type 'float'
+   TimeLeft: 3.0
+
+Visible when using Python 3.10 or newer.
+---
+ wx/lib/agw/pygauge.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/wx/lib/agw/pygauge.py b/wx/lib/agw/pygauge.py
+index b8654436a..da42e6f61 100644
+--- a/wx/lib/agw/pygauge.py
++++ b/wx/lib/agw/pygauge.py
+@@ -367,12 +367,12 @@ def OnPaint(self, event):
+             drawString = self._drawIndicatorText_formatString.format(drawValue)
+             rect = self.GetClientRect()
+             (textWidth, textHeight, descent, extraLeading) = dc.GetFullTextExtent(drawString)
+-            textYPos = (rect.height-textHeight)/2
++            textYPos = (rect.height-textHeight)//2
+ 
+             if textHeight > rect.height:
+                 textYPos = 0-descent+extraLeading
+ 
+-            textXPos = (rect.width-textWidth)/2
++            textXPos = (rect.width-textWidth)//2
+ 
+             if textWidth>rect.width:
+                 textXPos = 0
diff --git a/gnu/packages/patches/quilt-grep-compat.patch b/gnu/packages/patches/quilt-grep-compat.patch
new file mode 100644
index 0000000000..25fef506d1
--- /dev/null
+++ b/gnu/packages/patches/quilt-grep-compat.patch
@@ -0,0 +1,145 @@
+From upstream
+https://git.savannah.nongnu.org/cgit/quilt.git/patch/?id=f73f8d7f71de2878d3f92881a5fcb8eafd78cb5f
+
+From f73f8d7f71de2878d3f92881a5fcb8eafd78cb5f Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Fri, 9 Sep 2022 10:10:37 +0200
+Subject: Avoid warnings with grep 3.8
+
+GNU grep version 3.8 became more strict about needless quoting in
+patterns. We have one occurrence of that in quilt, where "/"
+characters are being quoted by default. There are cases where they
+indeed need to be quoted (typically when used in a sed s/// command)
+but most of the time they do not, and this results in the following
+warning:
+
+grep: warning: stray \ before /
+
+So rename quote_bre() to quote_sed_re(), and introduce
+quote_grep_re() which does not quote "/".
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+---
+ quilt/diff.in             |  2 +-
+ quilt/patches.in          |  2 +-
+ quilt/scripts/patchfns.in | 20 +++++++++++++-------
+ quilt/upgrade.in          |  4 ++--
+ 4 files changed, 17 insertions(+), 11 deletions(-)
+
+diff --git a/quilt/diff.in b/quilt/diff.in
+index e90dc33..07788ff 100644
+--- a/quilt/diff.in
++++ b/quilt/diff.in
+@@ -255,7 +255,7 @@ then
+ 	# Add all files in the snapshot into the file list (they may all
+ 	# have changed).
+ 	files=( $(find $QUILT_PC/$snap_subdir -type f \
+-		  | sed -e "s/^$(quote_bre $QUILT_PC/$snap_subdir/)//" \
++		  | sed -e "s/^$(quote_sed_re $QUILT_PC/$snap_subdir/)//" \
+ 		  | sort) )
+ 	printf "%s\n" "${files[@]}" >&4
+ 	unset files
+diff --git a/quilt/patches.in b/quilt/patches.in
+index bb17a46..eac45a9 100644
+--- a/quilt/patches.in
++++ b/quilt/patches.in
+@@ -60,7 +60,7 @@ scan_unapplied()
+ 	# Quote each file name only once
+ 	for file in "${opt_files[@]}"
+ 	do
+-		files_bre[${#files_bre[@]}]=$(quote_bre "$file")
++		files_bre[${#files_bre[@]}]=$(quote_grep_re "$file")
+ 	done
+ 
+ 	# "Or" all files in a single pattern
+diff --git a/quilt/scripts/patchfns.in b/quilt/scripts/patchfns.in
+index c2d5f9d..1bd7233 100644
+--- a/quilt/scripts/patchfns.in
++++ b/quilt/scripts/patchfns.in
+@@ -78,8 +78,14 @@ array_join()
+ 	done
+ }
+ 
+-# Quote a string for use in a basic regular expression.
+-quote_bre()
++# Quote a string for use in a regular expression for a grep pattern.
++quote_grep_re()
++{
++	echo "$1" | sed -e 's:\([][^$.*\\]\):\\\1:g'
++}
++
++# Quote a string for use in a regular expression for a sed s/// command.
++quote_sed_re()
+ {
+ 	echo "$1" | sed -e 's:\([][^$/.*\\]\):\\\1:g'
+ }
+@@ -215,7 +221,7 @@ patch_in_series()
+ 
+ 	if [ -e "$SERIES" ]
+ 	then
+-		grep -q "^$(quote_bre $patch)\([ \t]\|$\)" "$SERIES"
++		grep -q "^$(quote_grep_re $patch)\([ \t]\|$\)" "$SERIES"
+ 	else
+ 		return 1
+ 	fi
+@@ -365,7 +371,7 @@ is_applied()
+ {
+ 	local patch=$1
+ 	[ -e $DB ] || return 1
+-	grep -q "^$(quote_bre $patch)\$" $DB
++	grep -q "^$(quote_grep_re $patch)\$" $DB
+ }
+ 
+ applied_patches()
+@@ -465,7 +471,7 @@ remove_from_db()
+ 	local tmpfile
+ 	if tmpfile=$(gen_tempfile)
+ 	then
+-		grep -v "^$(quote_bre $patch)\$" $DB > $tmpfile
++		grep -v "^$(quote_grep_re $patch)\$" $DB > $tmpfile
+ 		cat $tmpfile > $DB
+ 		rm -f $tmpfile
+ 		[ -s $DB ] || rm -f $DB
+@@ -520,7 +526,7 @@ find_patch()
+ 		fi
+ 
+ 		local patch=${1#$SUBDIR_DOWN$QUILT_PATCHES/}
+-		local bre=$(quote_bre "$patch")
++		local bre=$(quote_sed_re "$patch")
+ 		set -- $(sed -e "/^$bre\(\|\.patch\|\.diff\?\)\(\|\.gz\|\.bz2\|\.xz\|\.lzma\|\.lz\)\([ "$'\t'"]\|$\)/!d" \
+ 			       -e 's/[ '$'\t''].*//' "$SERIES")
+ 		if [ $# -eq 1 ]
+@@ -631,7 +637,7 @@ files_in_patch()
+ 	then
+ 		find "$path" -type f \
+ 			       -a ! -path "$(quote_glob "$path")/.timestamp" |
+-		sed -e "s/$(quote_bre "$path")\///"
++		sed -e "s/$(quote_sed_re "$path")\///"
+ 	fi
+ }
+ 
+diff --git a/quilt/upgrade.in b/quilt/upgrade.in
+index dbf7d05..866aa33 100644
+--- a/quilt/upgrade.in
++++ b/quilt/upgrade.in
+@@ -74,7 +74,7 @@ printf $"Converting meta-data to version %s\n" "$DB_VERSION"
+ 
+ for patch in $(applied_patches)
+ do
+-	proper_name="$(grep "^$(quote_bre $patch)"'\(\|\.patch\|\.diff?\)\(\|\.gz\|\.bz2\)\([ \t]\|$\)' $SERIES)"
++	proper_name="$(grep "^$(quote_grep_re $patch)"'\(\|\.patch\|\.diff?\)\(\|\.gz\|\.bz2\)\([ \t]\|$\)' $SERIES)"
+ 	proper_name=${proper_name#$QUILT_PATCHES/}
+ 	proper_name=${proper_name%% *}
+ 	if [ -z "$proper_name" ]
+@@ -84,7 +84,7 @@ do
+ 	fi
+ 
+ 	if [ "$patch" != "$proper_name" -a -d $QUILT_PC/$patch ] \
+-	   && grep -q "^$(quote_bre $patch)\$" \
++	   && grep -q "^$(quote_grep_re $patch)\$" \
+ 		   $QUILT_PC/applied-patches
+ 	then
+ 		mv $QUILT_PC/$patch $QUILT_PC/$proper_name \
+-- 
+cgit v1.1
+
diff --git a/gnu/packages/patches/rust-adblock-ignore-live-tests.patch b/gnu/packages/patches/rust-adblock-ignore-live-tests.patch
deleted file mode 100644
index fc7f2858ff..0000000000
--- a/gnu/packages/patches/rust-adblock-ignore-live-tests.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From b83b5b453d3f7883ef4c12f84a7045486957c709 Mon Sep 17 00:00:00 2001
-From: Petr Hodina <phodina@protonmail.com>
-Date: Tue, 9 Nov 2021 17:02:54 +0100
-Subject: [PATCH] Ignore live tests.
-
-
-diff --git a/tests/live.rs b/tests/live.rs
-index b1a19fc..6bd4685 100644
---- a/tests/live.rs
-+++ b/tests/live.rs
-@@ -140,6 +140,7 @@ fn get_blocker_engine_deserialized_ios() -> Engine {
- }
-
- #[test]
-+#[ignore]
- fn check_live_specific_urls() {
-     let mut engine = get_blocker_engine();
-     {
-@@ -176,6 +177,7 @@ fn check_live_specific_urls() {
- }
-
- #[test]
-+#[ignore]
- fn check_live_deserialized_specific_urls() {
-     let mut engine = get_blocker_engine_deserialized();
-     {
-@@ -201,6 +203,7 @@ fn check_live_deserialized_specific_urls() {
- }
-
- #[test]
-+#[ignore]
- fn check_live_from_filterlists() {
-     let engine = get_blocker_engine();
-     let requests = load_requests();
-@@ -214,6 +217,7 @@ fn check_live_from_filterlists() {
- }
-
- #[test]
-+#[ignore]
- fn check_live_deserialized_file() {
-     let engine = get_blocker_engine_deserialized();
-     let requests = load_requests();
-@@ -243,6 +247,7 @@ fn check_live_deserialized_ios() {
-
- #[cfg(feature = "resource_assembler")]
- #[test]
-+#[ignore]
- fn check_live_redirects() {
-     use adblock::resources::resource_assembler::assemble_web_accessible_resources;
-
-@@ -278,6 +283,7 @@ fn check_live_redirects() {
- }
-
- #[test]
-+#[ignore]
- /// Ensure that two different engines loaded from the same textual filter set serialize to
- /// identical buffers.
- fn stable_serialization() {
-@@ -291,6 +297,7 @@ fn stable_serialization() {
- }
-
- #[test]
-+#[ignore]
- /// Ensure that one engine's serialization result can be exactly reproduced by another engine after
- /// deserializing from it.
- fn stable_serialization_through_load() {
---
-2.33.1
-
diff --git a/gnu/packages/patches/rust-webbrowser-remove-unsupported-os.patch b/gnu/packages/patches/rust-webbrowser-remove-unsupported-os.patch
new file mode 100644
index 0000000000..9fea1e1665
--- /dev/null
+++ b/gnu/packages/patches/rust-webbrowser-remove-unsupported-os.patch
@@ -0,0 +1,24 @@
+--- Cargo.toml	2023-05-07 13:39:13.029066693 +0100
++++ Cargo.toml	2023-05-07 13:39:22.545138206 +0100
+@@ -67,21 +67,3 @@
+ [target."cfg(target_arch = \"wasm32\")".dependencies.web-sys]
+ version = "0.3"
+ features = ["Window"]
+-
+-[target."cfg(target_os = \"android\")".dependencies.jni]
+-version = "0.21"
+-
+-[target."cfg(target_os = \"android\")".dependencies.ndk-context]
+-version = "0.1"
+-
+-[target."cfg(target_os = \"android\")".dev-dependencies.ndk-glue]
+-version = ">= 0.3, <= 0.7"
+-
+-[target."cfg(target_os = \"ios\")".dependencies.objc]
+-version = "0.2.7"
+-
+-[target."cfg(target_os = \"ios\")".dependencies.raw-window-handle]
+-version = "0.5.0"
+-
+-[target."cfg(target_os = \"macos\")".dependencies.core-foundation]
+-version = "0.9"
diff --git a/gnu/packages/patches/transmission-honor-localedir.patch b/gnu/packages/patches/transmission-honor-localedir.patch
deleted file mode 100644
index 70c66bfb2b..0000000000
--- a/gnu/packages/patches/transmission-honor-localedir.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-This patch modifies Transmission so it honors the "localedir" option
-passed to its configure script, allowing GTK-specific localization
-data to be placed in the package's "gui" output.
-
-Without this patch, localization of transmission-gtk can break as the
-application will expect to find this data in the package's default
-output (as a result of the call to bindtextdomain in gtk/main.c).
-
-diff --git a/configure b/configure
-index a29e24f..3ae8ef4 100755
---- a/configure
-+++ b/configure
-@@ -21305,7 +21305,7 @@ $as_echo "$LINGUAS" >&6; }
-    sed -e "/^#/d" -e "/^\$/d" -e "s,.*,	$posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
- 	< $srcdir/po/POTFILES.in > po/POTFILES
- 
--    transmissionlocaledir='${prefix}/${DATADIRNAME}/locale'
-+    transmissionlocaledir='${localedir}'
- 
- fi
- 
-diff --git a/configure.ac b/configure.ac
-index 57d3cae..ab62093 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -563,7 +563,7 @@ if test "x$enable_nls" = "xyes" ; then
-     AC_SUBST(GETTEXT_PACKAGE)
-     AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[Gettext package])
-     AM_GLIB_GNU_GETTEXT
--    transmissionlocaledir='${prefix}/${DATADIRNAME}/locale'
-+    transmissionlocaledir='${localedir}'
-     AC_SUBST(transmissionlocaledir)
- fi
- AC_SUBST(INTLLIBS)