summary refs log tree commit diff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2019-10-08 19:24:34 +0200
committerMarius Bakke <mbakke@fastmail.com>2019-10-08 19:24:34 +0200
commitd1f3b333e6176a7879ab3742bbebb2a99f61a528 (patch)
tree8bd82ce68bd2534a48bf13c7256997f82dd1b3f4 /gnu/packages/patches
parente01d384efcdaf564bbb221e43b81e087c8e2af06 (diff)
parent861907f01efb1cae7f260e8cb7b991d5034a486a (diff)
downloadguix-d1f3b333e6176a7879ab3742bbebb2a99f61a528.tar.gz
Merge branch 'master' into staging
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/abcl-fix-build-xml.patch50
-rw-r--r--gnu/packages/patches/acl-fix-perl-regex.patch22
-rw-r--r--gnu/packages/patches/acl-hurd-path-max.patch80
-rw-r--r--gnu/packages/patches/aria2-CVE-2019-3500.patch55
-rw-r--r--gnu/packages/patches/aspell-gcc-compat.patch31
-rw-r--r--gnu/packages/patches/bash-reproducible-linux-pgrp-pipe.patch34
-rw-r--r--gnu/packages/patches/beets-python-3.7-fix.patch57
-rw-r--r--gnu/packages/patches/binutils-boot-2.20.1a.patch157
-rw-r--r--gnu/packages/patches/boost-fix-icu-build.patch53
-rw-r--r--gnu/packages/patches/cmake-curl-certificates.patch40
-rw-r--r--gnu/packages/patches/dbus-CVE-2019-12749.patch116
-rw-r--r--gnu/packages/patches/dbus-c++-gcc-compat.patch14
-rw-r--r--gnu/packages/patches/dbus-c++-threading-mutex.patch37
-rw-r--r--gnu/packages/patches/dealii-mpi-deprecations.patch28
-rw-r--r--gnu/packages/patches/debops-constants-for-external-program-names.patch276
-rw-r--r--gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch45
-rw-r--r--gnu/packages/patches/diffutils-getopt.patch44
-rw-r--r--gnu/packages/patches/elm-compiler-disable-reactor.patch71
-rw-r--r--gnu/packages/patches/elm-compiler-fix-map-key.patch38
-rw-r--r--gnu/packages/patches/elm-compiler-relax-glsl-bound.patch19
-rw-r--r--gnu/packages/patches/emacs-unpackaged-req.patch24
-rw-r--r--gnu/packages/patches/enjarify-setup-py.patch19
-rw-r--r--gnu/packages/patches/enlightenment-fix-setuid-path.patch74
-rw-r--r--gnu/packages/patches/evolution-data-server-locales.patch33
-rw-r--r--gnu/packages/patches/expat-CVE-2018-20843.patch21
-rw-r--r--gnu/packages/patches/freeimage-CVE-2015-0852.patch129
-rw-r--r--gnu/packages/patches/freeimage-CVE-2016-5684.patch34
-rw-r--r--gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch1453
-rw-r--r--gnu/packages/patches/freeimage-unbundle.patch167
-rw-r--r--gnu/packages/patches/gcc-7-cross-mingw.patch24
-rw-r--r--gnu/packages/patches/gcc-boot-2.95.3.patch137
-rw-r--r--gnu/packages/patches/gcc-boot-4.7.4.patch68
-rw-r--r--gnu/packages/patches/gdm-CVE-2018-14424.patch172
-rw-r--r--gnu/packages/patches/glib-networking-connection.patch51
-rw-r--r--gnu/packages/patches/glibc-2.27-supported-locales.patch33
-rw-r--r--gnu/packages/patches/glibc-2.28-supported-locales.patch33
-rw-r--r--gnu/packages/patches/glibc-2.29-git-updates.patch742
-rw-r--r--gnu/packages/patches/glibc-CVE-2019-7309.patch76
-rw-r--r--gnu/packages/patches/glibc-CVE-2019-9169.patch22
-rw-r--r--gnu/packages/patches/glibc-boot-2.16.0.patch352
-rw-r--r--gnu/packages/patches/glibc-boot-2.2.5.patch251
-rw-r--r--gnu/packages/patches/glibc-bootstrap-system-2.16.0.patch30
-rw-r--r--gnu/packages/patches/glibc-bootstrap-system.patch34
-rw-r--r--gnu/packages/patches/glibc-locales-2.28.patch31
-rw-r--r--gnu/packages/patches/glibc-locales.patch17
-rw-r--r--gnu/packages/patches/glibc-supported-locales.patch33
-rw-r--r--gnu/packages/patches/glm-restore-install-target.patch574
-rw-r--r--gnu/packages/patches/gnome-control-center-udisks.patch221
-rw-r--r--gnu/packages/patches/go-skip-gc-test.patch17
-rw-r--r--gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch144
-rw-r--r--gnu/packages/patches/gobject-introspection-cc.patch11
-rw-r--r--gnu/packages/patches/groff-source-date-epoch.patch299
-rw-r--r--gnu/packages/patches/guile-2.2-default-utf8.patch36
-rw-r--r--gnu/packages/patches/guile-2.2-skip-oom-test.patch25
-rw-r--r--gnu/packages/patches/guile-relocatable.patch18
-rw-r--r--gnu/packages/patches/handbrake-opt-in-nvenc.patch14
-rw-r--r--gnu/packages/patches/hdf4-tirpc.patch33
-rw-r--r--gnu/packages/patches/idris-test-no-node.patch61
-rw-r--r--gnu/packages/patches/ilmbase-fix-tests.patch12
-rw-r--r--gnu/packages/patches/ilmbase-openexr-pkg-config.patch40
-rw-r--r--gnu/packages/patches/inkscape-poppler-0.76.patch36
-rw-r--r--gnu/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch100
-rw-r--r--gnu/packages/patches/libarchive-CVE-2017-14166.patch45
-rw-r--r--gnu/packages/patches/libarchive-CVE-2017-14502.patch40
-rw-r--r--gnu/packages/patches/libarchive-CVE-2018-1000877.patch45
-rw-r--r--gnu/packages/patches/libarchive-CVE-2018-1000878.patch86
-rw-r--r--gnu/packages/patches/libarchive-CVE-2018-1000880.patch51
-rw-r--r--gnu/packages/patches/libcroco-CVE-2017-7960.patch66
-rw-r--r--gnu/packages/patches/libcroco-CVE-2017-7961.patch50
-rw-r--r--gnu/packages/patches/libextractor-exiv2.patch124
-rw-r--r--gnu/packages/patches/libgcrypt-make-yat2m-reproducible.patch32
-rw-r--r--gnu/packages/patches/libgdata-fix-tests.patch325
-rw-r--r--gnu/packages/patches/libgdata-glib-duplicate-tests.patch16
-rw-r--r--gnu/packages/patches/libgpg-error-gawk-compat.patch155
-rw-r--r--gnu/packages/patches/libmp4v2-c++11.patch14
-rw-r--r--gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch33
-rw-r--r--gnu/packages/patches/libxt-guix-search-paths.patch42
-rw-r--r--gnu/packages/patches/linux-libre-active-entropy.patch86
-rw-r--r--gnu/packages/patches/mescc-tools-boot.patch222
-rw-r--r--gnu/packages/patches/mingw-w64-5.0rc2-gcc-4.9.3.patch218
-rw-r--r--gnu/packages/patches/mingw-w64-6.0.0-gcc.patch65
-rw-r--r--gnu/packages/patches/p11-kit-jks-timestamps.patch42
-rw-r--r--gnu/packages/patches/perl-no-sys-dirs.patch23
-rw-r--r--gnu/packages/patches/python-2.7-search-paths.patch4
-rw-r--r--gnu/packages/patches/python-3-deterministic-build-info.patch4
-rw-r--r--gnu/packages/patches/python-3-fix-tests.patch368
-rw-r--r--gnu/packages/patches/python-3-search-paths.patch8
-rw-r--r--gnu/packages/patches/python-fix-tests.patch147
-rw-r--r--gnu/packages/patches/python-keras-integration-test.patch19
-rw-r--r--gnu/packages/patches/python-libxml2-utf8.patch40
-rw-r--r--gnu/packages/patches/python-pep8-stdlib-tokenize-compat.patch35
-rw-r--r--gnu/packages/patches/python-slugify-depend-on-unidecode.patch4
-rw-r--r--gnu/packages/patches/python2-CVE-2018-1000802.patch47
-rw-r--r--gnu/packages/patches/python2-CVE-2018-14647.patch61
-rw-r--r--gnu/packages/patches/qemu-CVE-2018-16872.patch88
-rw-r--r--gnu/packages/patches/qemu-CVE-2019-6778.patch43
-rw-r--r--gnu/packages/patches/rapidjson-gcc-compat.patch18
-rw-r--r--gnu/packages/patches/scribus-poppler.patch72
-rw-r--r--gnu/packages/patches/sssd-curl-compat.patch18
-rw-r--r--gnu/packages/patches/supercollider-boost-1.70-build-fix.patch28
-rw-r--r--gnu/packages/patches/supertux-fix-build-with-gcc5.patch75
-rw-r--r--gnu/packages/patches/tcc-boot-0.9.27.patch26
-rw-r--r--gnu/packages/patches/texinfo-perl-compat.patch51
-rw-r--r--gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch341
-rw-r--r--gnu/packages/patches/tipp10-fix-compiling.patch3
-rwxr-xr-xgnu/packages/patches/twinkle-include-qregexpvalidator.patch123
-rw-r--r--gnu/packages/patches/util-linux-tests.patch13
-rw-r--r--gnu/packages/patches/weechat-python.patch40
-rw-r--r--gnu/packages/patches/xfce4-session-fix-xflock4.patch31
109 files changed, 5476 insertions, 4979 deletions
diff --git a/gnu/packages/patches/abcl-fix-build-xml.patch b/gnu/packages/patches/abcl-fix-build-xml.patch
new file mode 100644
index 0000000000..dd315b4271
--- /dev/null
+++ b/gnu/packages/patches/abcl-fix-build-xml.patch
@@ -0,0 +1,50 @@
+ABCL's build calls the hostname command, and needs the internet to download
+JUnit. Neither of these are really required, though, so we can patch them out
+to make it build.
+
+We also remove the Implemetation-Build property that ends up in the manifest
+file, because it stores information about the time of the build, which makes
+it non-deterministic.
+
+--- a/build.xml
++++ b/build.xml
+@@ -327,7 +327,7 @@ from ${abcl.home.dir}
+     <property name="abcl.build.path"
+               value="${build.classes.dir}/org/armedbear/lisp/build"/>
+     <target name="abcl.stamp" 
+-            depends="abcl.compile,abcl.stamp.version,abcl.stamp.hostname">
++            depends="abcl.compile,abcl.stamp.version">
+       <mkdir dir="${abcl.build.path}/.."/>
+       <loadfile property="abcl.version"
+                 srcFile="${abcl.version.path}"/>
+@@ -455,11 +455,6 @@ from ${abcl.home.dir}
+                 value="${abcl.version}-${abcl.version.src}"/>
+     </target>
+ 
+-    <target name="abcl.stamp.hostname" if="unix">
+-      <exec executable="hostname" outputproperty="abcl.hostname"/>
+-      <echo>abcl.hostname: ${abcl.hostname}</echo>
+-    </target>
+-
+     <target name="abcl.system.uptodate">
+       <condition property="abcl.system.needs-update.p">
+         <and>
+@@ -500,8 +495,6 @@ from ${abcl.home.dir}
+                        value="ABCL"/>
+             <attribute name="Implementation-Version"  
+                        value="${abcl.implementation.version}"/>
+-            <attribute name="Implementation-Build" 
+-                       value="${build}"/>
+           </section>
+         </manifest>
+         <metainf dir="${src.dir}/META-INF"> 
+@@ -1019,8 +1012,7 @@ ${basedir}/../cl-bench
+       </unzip>
+     </target>
+         
+-    <target name="abcl.test.compile" 
+-            depends="abcl.test.pre-compile">
++    <target name="abcl.test.compile" >
+       <mkdir dir="${abcl.test.classes.dir}"/>
+       <javac destdir="${abcl.test.classes.dir}"
+              classpathref="abcl.test.compile.classpath"
diff --git a/gnu/packages/patches/acl-fix-perl-regex.patch b/gnu/packages/patches/acl-fix-perl-regex.patch
deleted file mode 100644
index f682abc058..0000000000
--- a/gnu/packages/patches/acl-fix-perl-regex.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This can be removed with the next acl release
-
----
- test/run | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/test/run b/test/run
-index 2cf52e8..4627cd2 100755
---- a/test/run
-+++ b/test/run
-@@ -70,7 +70,7 @@ for (;;) {
-   if (defined $line) {
-     # Substitute %VAR and %{VAR} with environment variables.
-     $line =~ s[%(\w+)][$ENV{$1}]eg;
--    $line =~ s[%{(\w+)}][$ENV{$1}]eg;
-+    $line =~ s[%\{(\w+)\}][$ENV{$1}]eg;
-   }
-   if (defined $line) {
-     if ($line =~ s/^\s*< ?//) {
--- 
-2.15.0
-
diff --git a/gnu/packages/patches/acl-hurd-path-max.patch b/gnu/packages/patches/acl-hurd-path-max.patch
deleted file mode 100644
index 89cb3a38d7..0000000000
--- a/gnu/packages/patches/acl-hurd-path-max.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=636512
-
-From: Svante Signell <srs@kth.se>
-Subject: acl: Fix FTBFS on hurd-i386
-Date: Wed, 03 Aug 2011 19:36:27 +0200
-
-Currently acl does not compile on hurd-i386. The problem is a PATH_MAX
-definition which is not supported on GNU/Hurd.
-
-Index: acl-2.2.52/setfacl/parse.c
-===================================================================
---- acl-2.2.52/setfacl/parse.c
-+++ acl-2.2.52/setfacl/parse.c
-@@ -419,7 +419,13 @@ read_acl_comments(
- 	  bytes for "# file: ". Not a good solution but for now it is the
- 	  best I can do without too much impact on the code. [tw]
- 	*/
-+
-+#ifdef __GNU__
-+	char *linebuf;
-+	size_t dummy = 0;
-+#else
- 	char linebuf[(4*PATH_MAX)+9];
-+#endif
- 	char *cp;
- 	char *p;
- 	int comments_read = 0;
-@@ -449,9 +455,13 @@ read_acl_comments(
- 		if (line)
- 			(*line)++;
- 
-+#ifdef __GNU__
-+		if (getline(&linebuf, &dummy, file) == -1)
-+			break;
-+#else
- 		if (fgets(linebuf, sizeof(linebuf), file) == NULL)
- 			break;
--		
-+#endif		
- 		comments_read = 1;
- 
- 		p = strrchr(linebuf, '\0');
-@@ -473,7 +483,12 @@ read_acl_comments(
- 					goto fail;
- 				*path_p = (char*)malloc(strlen(cp)+1);
- 				if (!*path_p)
-+				  {
-+#ifdef __GNU__
-+				    free (linebuf);
-+#endif
- 					return -1;
-+				  }
- 				strcpy(*path_p, cp);
- 			}
- 		} else if (strncmp(cp, "owner:", 6) == 0) {
-@@ -522,13 +537,24 @@ read_acl_comments(
- 		}
- 	}
- 	if (ferror(file))
-+	  {
-+#ifdef __GNU__
-+	    free (linebuf);
-+#endif
- 		return -1;
-+	  }
-+#ifdef __GNU__
-+	free (linebuf);
-+#endif
- 	return comments_read;
- fail:
- 	if (path_p && *path_p) {
- 		free(*path_p);
- 		*path_p = NULL;
- 	}
-+#ifdef __GNU__
-+	free (linebuf);
-+#endif
- 	return -EINVAL;
- }
- 
diff --git a/gnu/packages/patches/aria2-CVE-2019-3500.patch b/gnu/packages/patches/aria2-CVE-2019-3500.patch
deleted file mode 100644
index 891c9047ba..0000000000
--- a/gnu/packages/patches/aria2-CVE-2019-3500.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-Fix CVE-2019-3500:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-3500
-https://github.com/aria2/aria2/issues/1329
-
-Patch copied from upstream source repository:
-
-https://github.com/aria2/aria2/commit/37368130ca7de5491a75fd18a20c5c5cc641824a
-
-From 37368130ca7de5491a75fd18a20c5c5cc641824a Mon Sep 17 00:00:00 2001
-From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
-Date: Sat, 5 Jan 2019 09:32:40 +0900
-Subject: [PATCH] Mask headers
-
----
- src/HttpConnection.cc | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/HttpConnection.cc b/src/HttpConnection.cc
-index 77cb9d27a..be5b97723 100644
---- a/src/HttpConnection.cc
-+++ b/src/HttpConnection.cc
-@@ -102,11 +102,17 @@ std::string HttpConnection::eraseConfidentialInfo(const std::string& request)
-   std::string result;
-   std::string line;
-   while (getline(istr, line)) {
--    if (util::startsWith(line, "Authorization: Basic")) {
--      result += "Authorization: Basic ********\n";
-+    if (util::istartsWith(line, "Authorization: ")) {
-+      result += "Authorization: <snip>\n";
-     }
--    else if (util::startsWith(line, "Proxy-Authorization: Basic")) {
--      result += "Proxy-Authorization: Basic ********\n";
-+    else if (util::istartsWith(line, "Proxy-Authorization: ")) {
-+      result += "Proxy-Authorization: <snip>\n";
-+    }
-+    else if (util::istartsWith(line, "Cookie: ")) {
-+      result += "Cookie: <snip>\n";
-+    }
-+    else if (util::istartsWith(line, "Set-Cookie: ")) {
-+      result += "Set-Cookie: <snip>\n";
-     }
-     else {
-       result += line;
-@@ -154,8 +160,8 @@ std::unique_ptr<HttpResponse> HttpConnection::receiveResponse()
-   const auto& proc = outstandingHttpRequests_.front()->getHttpHeaderProcessor();
-   if (proc->parse(socketRecvBuffer_->getBuffer(),
-                   socketRecvBuffer_->getBufferLength())) {
--    A2_LOG_INFO(
--        fmt(MSG_RECEIVE_RESPONSE, cuid_, proc->getHeaderString().c_str()));
-+    A2_LOG_INFO(fmt(MSG_RECEIVE_RESPONSE, cuid_,
-+                    eraseConfidentialInfo(proc->getHeaderString()).c_str()));
-     auto result = proc->getResult();
-     if (result->getStatusCode() / 100 == 1) {
-       socketRecvBuffer_->drain(proc->getLastBytesProcessed());
diff --git a/gnu/packages/patches/aspell-gcc-compat.patch b/gnu/packages/patches/aspell-gcc-compat.patch
new file mode 100644
index 0000000000..94c44f8fb6
--- /dev/null
+++ b/gnu/packages/patches/aspell-gcc-compat.patch
@@ -0,0 +1,31 @@
+Fix GCC7 warnings.
+
+Taken from upstream:
+https://git.savannah.gnu.org/cgit/aspell.git/commit/?id=8089fa02122fed0a6394eba14bbedcb1d18e2384
+
+diff --git a/modules/filter/tex.cpp b/modules/filter/tex.cpp
+index a979539..19ab63c 100644
+--- a/modules/filter/tex.cpp
++++ b/modules/filter/tex.cpp
+@@ -174,7 +174,7 @@ namespace {
+ 
+     if (c == '{') {
+ 
+-      if (top.in_what == Parm || top.in_what == Opt || top.do_check == '\0')
++      if (top.in_what == Parm || top.in_what == Opt || *top.do_check == '\0')
+ 	push_command(Parm);
+ 
+       top.in_what = Parm;
+diff --git a/prog/check_funs.cpp b/prog/check_funs.cpp
+index db54f3d..89ee09d 100644
+--- a/prog/check_funs.cpp
++++ b/prog/check_funs.cpp
+@@ -647,7 +647,7 @@ static void print_truncate(FILE * out, const char * word, int width) {
+     }
+   }
+   if (i == width-1) {
+-    if (word == '\0')
++    if (*word == '\0')
+       put(out,' ');
+     else if (word[len] == '\0')
+       put(out, word, len);
diff --git a/gnu/packages/patches/bash-reproducible-linux-pgrp-pipe.patch b/gnu/packages/patches/bash-reproducible-linux-pgrp-pipe.patch
new file mode 100644
index 0000000000..8a03c4d982
--- /dev/null
+++ b/gnu/packages/patches/bash-reproducible-linux-pgrp-pipe.patch
@@ -0,0 +1,34 @@
+Unconditionally enable PGRP_PIPE on Linux (the kernel), regardless of
+the kernel version in use on the build machine.
+
+diff -purN bash-5.0-orig/configure bash-5.0/configure
+--- configure	1970-01-01 01:00:00.000000000 +0100
++++ configure	2019-09-29 11:51:42.664518665 +0200
+@@ -16312,11 +16312,7 @@ solaris2.10*)	LOCAL_CFLAGS=-DSOLARIS  ;;
+ solaris2*)	LOCAL_CFLAGS=-DSOLARIS ;;
+ lynxos*)	LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
+ linux*)		LOCAL_LDFLAGS=-rdynamic		 # allow dynamic loading
+-		case "`uname -r`" in
+-		1.*|2.[0123]*)	: ;;
+-		*)	$as_echo "#define PGRP_PIPE 1" >>confdefs.h
+- ;;
+-		esac ;;
++		$as_echo "#define PGRP_PIPE 1" >>confdefs.h ;;
+ netbsd*|openbsd*)	LOCAL_CFLAGS="-DDEV_FD_STAT_BROKEN" ;;
+ *qnx[67]*)	LOCAL_LIBS="-lncurses" ;;
+ *qnx*)		LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;;
+diff -purN bash-5.0-orig/configure.ac bash-5.0/configure.ac
+--- configure.ac	1970-01-01 01:00:00.000000000 +0100
++++ configure.ac	2019-09-29 11:51:10.692026225 +0200
+@@ -1108,10 +1108,7 @@ solaris2.10*)	LOCAL_CFLAGS=-DSOLARIS  ;;
+ solaris2*)	LOCAL_CFLAGS=-DSOLARIS ;;
+ lynxos*)	LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
+ linux*)		LOCAL_LDFLAGS=-rdynamic		 # allow dynamic loading
+-		case "`uname -r`" in
+-		1.*|2.[[0123]]*)	: ;;
+-		*)	AC_DEFINE(PGRP_PIPE) ;;
+-		esac ;;
++		AC_DEFINE(PGRP_PIPE) ;;
+ netbsd*|openbsd*)	LOCAL_CFLAGS="-DDEV_FD_STAT_BROKEN" ;;
+ *qnx[[67]]*)	LOCAL_LIBS="-lncurses" ;;
+ *qnx*)		LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;;
diff --git a/gnu/packages/patches/beets-python-3.7-fix.patch b/gnu/packages/patches/beets-python-3.7-fix.patch
deleted file mode 100644
index 43707cd9d0..0000000000
--- a/gnu/packages/patches/beets-python-3.7-fix.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-Fix compatibility issue with Python 3.7:
-
-https://github.com/beetbox/beets/issues/2978
-
-Patch copied from upstream source repository:
-
-https://github.com/beetbox/beets/commit/15d44f02a391764da1ce1f239caef819f08beed8
-
-From 15d44f02a391764da1ce1f239caef819f08beed8 Mon Sep 17 00:00:00 2001
-From: Adrian Sampson <adrian@radbox.org>
-Date: Sun, 22 Jul 2018 12:34:19 -0400
-Subject: [PATCH] Fix Python 3.7 compatibility (#2978)
-
----
- beets/autotag/hooks.py | 8 +++++++-
- docs/changelog.rst     | 2 ++
- 2 files changed, 9 insertions(+), 1 deletion(-)
-
-diff --git a/beets/autotag/hooks.py b/beets/autotag/hooks.py
-index 3615a9333..1c62a54c5 100644
---- a/beets/autotag/hooks.py
-+++ b/beets/autotag/hooks.py
-@@ -31,6 +31,12 @@
- 
- log = logging.getLogger('beets')
- 
-+# The name of the type for patterns in re changed in Python 3.7.
-+try:
-+    Pattern = re._pattern_type
-+except AttributeError:
-+    Pattern = re.Pattern
-+
- 
- # Classes used to represent candidate options.
- 
-@@ -433,7 +439,7 @@ def _eq(self, value1, value2):
-         be a compiled regular expression, in which case it will be
-         matched against `value2`.
-         """
--        if isinstance(value1, re._pattern_type):
-+        if isinstance(value1, Pattern):
-             return bool(value1.match(value2))
-         return value1 == value2
- 
-#diff --git a/docs/changelog.rst b/docs/changelog.rst
-#index be6de2904..d487f31f5 100644
-#--- a/docs/changelog.rst
-#+++ b/docs/changelog.rst
-#@@ -19,6 +19,8 @@ New features:
-# 
-# Fixes:
-# 
-#+* Fix compatibility Python 3.7 and its change to a name in the ``re`` module.
-#+  :bug:`2978`
-# * R128 normalization tags are now properly deleted from files when the values
-#   are missing.
-#   Thanks to :user:`autrimpo`.
diff --git a/gnu/packages/patches/binutils-boot-2.20.1a.patch b/gnu/packages/patches/binutils-boot-2.20.1a.patch
new file mode 100644
index 0000000000..7e5762ceb4
--- /dev/null
+++ b/gnu/packages/patches/binutils-boot-2.20.1a.patch
@@ -0,0 +1,157 @@
+This patch enables building binutils using TCC and Mes C Library
+
+  * disable building DOC
+  * remove signed int trickery that does not work with TCC
+  * fixe the malloc prototype to use size_t
+  * add missing includes
+  * remove C99'isms to avoid of mixing code and variable declaration
+  * [MES_BOOTSTRAP]: remove strncmp to avoid duplicat symbol
+
+Upstream status: Not presented upstream.
+
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/bfd/elf32-i386.c binutils-2.20.1a/bfd/elf32-i386.c
+--- ../binutils-2.20.1a/bfd/elf32-i386.c	2009-09-10 13:47:12.000000000 +0200
++++ binutils-2.20.1a/bfd/elf32-i386.c	2018-06-23 19:33:20.068134411 +0200
+@@ -4254,6 +4254,7 @@ elf_i386_finish_dynamic_symbol (bfd *out
+ 	      if (!h->pointer_equality_needed)
+ 		abort ();
+ 
++              {
+ 	      /* For non-shared object, we can't use .got.plt, which
+ 		 contains the real function addres if we need pointer
+ 		 equality.  We load the GOT entry with the PLT entry.  */
+@@ -4262,6 +4263,7 @@ elf_i386_finish_dynamic_symbol (bfd *out
+ 			  (plt->output_section->vma
+ 			   + plt->output_offset + h->plt.offset),
+ 			  htab->elf.sgot->contents + h->got.offset);
++              }
+ 	      return TRUE;
+ 	    }
+ 	}
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/bfd/elfcode.h binutils-2.20.1a/bfd/elfcode.h
+--- ../binutils-2.20.1a/bfd/elfcode.h	2009-09-10 13:47:12.000000000 +0200
++++ binutils-2.20.1a/bfd/elfcode.h	2018-06-19 19:07:16.647627075 +0200
+@@ -73,6 +73,7 @@
+ #include "bfdlink.h"
+ #include "libbfd.h"
+ #include "elf-bfd.h"
++#include <limits.h>
+ 
+ /* Renaming structures, typedefs, macros and functions to be size-specific.  */
+ #define Elf_External_Ehdr	NAME(Elf,External_Ehdr)
+@@ -706,8 +707,8 @@ elf_object_p (bfd *abfd)
+       if (i_ehdrp->e_shnum != 1)
+ 	{
+ 	  /* Check that we don't have a totally silly number of sections.  */
+-	  if (i_ehdrp->e_shnum > (unsigned int) -1 / sizeof (x_shdr)
+-	      || i_ehdrp->e_shnum > (unsigned int) -1 / sizeof (i_shdr))
++	  if (i_ehdrp->e_shnum > INT_MAX / sizeof (x_shdr)
++	      || i_ehdrp->e_shnum > INT_MAX / sizeof (i_shdr))
+ 	    goto got_wrong_format_error;
+ 
+ 	  where += (i_ehdrp->e_shnum - 1) * sizeof (x_shdr);
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/bfd/Makefile.in binutils-2.20.1a/bfd/Makefile.in
+--- ../binutils-2.20.1a/bfd/Makefile.in	2010-03-03 14:59:15.000000000 +0100
++++ binutils-2.20.1a/bfd/Makefile.in	2018-06-16 14:00:46.297724081 +0200
+@@ -320,7 +320,7 @@ ACLOCAL_AMFLAGS = -I . -I .. -I ../confi
+ # RELEASE=y
+ INCDIR = $(srcdir)/../include
+ CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
+-SUBDIRS = doc po
++SUBDIRS = # these fail to build: doc po
+ bfddocdir = doc
+ libbfd_la_LDFLAGS = $(am__append_1) -release `cat libtool-soversion` \
+ 	@SHARED_LDFLAGS@ $(am__empty)
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/binutils/arparse.c binutils-2.20.1a/binutils/arparse.c
+--- ../binutils-2.20.1a/binutils/arparse.c	2009-10-16 13:52:16.000000000 +0200
++++ binutils-2.20.1a/binutils/arparse.c	2018-06-19 01:30:00.576219981 +0200
+@@ -330,7 +330,7 @@ YYID (i)
+ #   define YYMALLOC malloc
+ #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++void *malloc (size_t); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+ #  endif
+ #  ifndef YYFREE
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/binutils/dwarf.c binutils-2.20.1a/binutils/dwarf.c
+--- ../binutils-2.20.1a/binutils/dwarf.c	2009-09-14 13:43:26.000000000 +0200
++++ binutils-2.20.1a/binutils/dwarf.c	2018-06-16 14:01:45.162684662 +0200
+@@ -27,6 +27,10 @@
+ #include "dwarf2.h"
+ #include "dwarf.h"
+ 
++#if MES_BOOTSTRAP
++#include "getopt.h"
++#endif
++
+ static int have_frame_base;
+ static int need_base_address;
+ 
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/binutils/sysinfo.c binutils-2.20.1a/binutils/sysinfo.c
+--- ../binutils-2.20.1a/binutils/sysinfo.c	2009-10-16 13:52:17.000000000 +0200
++++ binutils-2.20.1a/binutils/sysinfo.c	2018-06-19 01:29:23.823612807 +0200
+@@ -286,7 +286,7 @@ YYID (i)
+ #   define YYMALLOC malloc
+ #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++void *malloc (size_t); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+ #  endif
+ #  ifndef YYFREE
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/gas/config/tc-i386.c binutils-2.20.1a/gas/config/tc-i386.c
+--- ../binutils-2.20.1a/gas/config/tc-i386.c	2009-09-14 13:43:27.000000000 +0200
++++ binutils-2.20.1a/gas/config/tc-i386.c	2018-06-23 19:39:37.546254752 +0200
+@@ -4869,6 +4869,7 @@ build_modrm_byte (void)
+   if (vex_3_sources)
+     {
+       unsigned int nds, reg;
++      expressionS *exp; 
+ 
+       if (i.tm.opcode_modifier.veximmext
+ 	  && i.tm.opcode_modifier.immext)
+@@ -4892,7 +4893,7 @@ build_modrm_byte (void)
+ 
+       /* Generate an 8bit immediate operand to encode the register
+ 	 operand.  */
+-      expressionS *exp = &im_expressions[i.imm_operands++];
++      exp = &im_expressions[i.imm_operands++];
+       i.op[i.operands].imms = exp;
+       i.types[i.operands] = imm8;
+       i.operands++;
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/ld/ldgram.c binutils-2.20.1a/ld/ldgram.c
+--- ../binutils-2.20.1a/ld/ldgram.c	2009-10-16 13:52:15.000000000 +0200
++++ binutils-2.20.1a/ld/ldgram.c	2018-06-19 01:30:57.809165437 +0200
+@@ -561,7 +561,7 @@ YYID (i)
+ #   define YYMALLOC malloc
+ #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++void *malloc (size_t); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+ #  endif
+ #  ifndef YYFREE
+diff -purN -x config.status -x config.h -x BOOT ../binutils-2.20.1a/libiberty/strncmp.c binutils-2.20.1a/libiberty/strncmp.c
+--- ../binutils-2.20.1a/libiberty/strncmp.c	2005-03-28 04:09:01.000000000 +0200
++++ binutils-2.20.1a/libiberty/strncmp.c	2018-06-23 19:19:50.038992482 +0200
+@@ -15,6 +15,13 @@ Compares the first @var{n} bytes of two
+ #include <ansidecl.h>
+ #include <stddef.h>
+ 
++#if !MES_BOOTSTRAP
++
++/*
++   libtool: link: /gnu/store/rgwjixk5zl7s2d3xsb2ws2z2q3m0xjm4-tcc-boot-0.9.26-0.97196ce/bin/tcc -D __GLIBC_MINOR__=6 -D MES_BOOTSTRAP=1 -g -o size size.o bucomm.o version.o filemode.o  ../bfd/.libs/libbfd.a ../libiberty/libiberty.a ./../intl/libintl.a
++   /gnu/store/rgwjixk5zl7s2d3xsb2ws2z2q3m0xjm4-tcc-boot-0.9.26-0.97196ce/lib/libc.a: error: 'strncmp' defined twice
++*/
++
+ int
+ strncmp(const char *s1, const char *s2, register size_t n)
+ {
+@@ -31,3 +38,5 @@ strncmp(const char *s1, const char *s2,
+     }
+   return 0;
+ }
++
++#endif // !MES_BOOTSTRAP
diff --git a/gnu/packages/patches/boost-fix-icu-build.patch b/gnu/packages/patches/boost-fix-icu-build.patch
deleted file mode 100644
index 556f91b8f7..0000000000
--- a/gnu/packages/patches/boost-fix-icu-build.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Pass -std=c++11 when compiling files that include the ICU headers.  Without
-this flag, compilation fails and causes Boost's build system to remove ICU
-support.  Note that $(pkg-config --variable=CXXFLAGS icu-uc) includes
-"-std=c++11", but Boost's build system does not use 'pkg-config'.
-
---- boost_1_66_0/libs/locale/build/Jamfile.v2.orig	2017-12-13 18:56:44.000000000 -0500
-+++ boost_1_66_0/libs/locale/build/Jamfile.v2	2018-04-08 15:18:58.673025760 -0400
-@@ -65,8 +65,8 @@
- 
- if $(ICU_LINK)
- {
--    ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <runtime-link>shared ;
--    ICU64_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin64 <runtime-link>shared ;
-+    ICU_OPTS = <include>$(ICU_PATH)/include <cxxflags>-std=c++11 <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <runtime-link>shared ;
-+    ICU64_OPTS = <include>$(ICU_PATH)/include <cxxflags>-std=c++11 <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin64 <runtime-link>shared ;
- }
- else
- {
-@@ -121,6 +121,7 @@
-     explicit icuuc icudt icuin ;
- 
-     ICU_OPTS =   <include>$(ICU_PATH)/include 
-+      <cxxflags>-std=c++11
-       <library>icuuc/<link>shared/<runtime-link>shared 
-       <library>icudt/<link>shared/<runtime-link>shared 
-       <library>icuin/<link>shared/<runtime-link>shared
-@@ -180,6 +181,7 @@
-     explicit icuuc_64 icudt_64 icuin_64 ;
- 
-     ICU64_OPTS =   <include>$(ICU_PATH)/include 
-+      <cxxflags>-std=c++11
-       <library>icuuc_64/<link>shared/<runtime-link>shared 
-       <library>icudt_64/<link>shared/<runtime-link>shared 
-       <library>icuin_64/<link>shared/<runtime-link>shared
---- boost_1_66_0/libs/regex/build/Jamfile.v2.orig	2017-12-13 18:56:48.000000000 -0500
-+++ boost_1_66_0/libs/regex/build/Jamfile.v2	2018-04-08 15:20:40.865532505 -0400
-@@ -44,7 +44,7 @@
- 
-    if $(ICU_LINK)
-    {
--      ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <define>BOOST_HAS_ICU=1 <runtime-link>shared ;
-+      ICU_OPTS = <include>$(ICU_PATH)/include <cxxflags>-std=c++11 <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <define>BOOST_HAS_ICU=1 <runtime-link>shared ;
-    }
-    else
-    {
-@@ -78,6 +78,7 @@
- 
-       ICU_OPTS = 
-          <include>$(ICU_PATH)/include 
-+         <cxxflags>-std=c++11
-          <runtime-link>shared:<library>icuuc/<link>shared
-          <runtime-link>shared:<library>icudt/<link>shared
-          <runtime-link>shared:<library>icuin/<link>shared
diff --git a/gnu/packages/patches/cmake-curl-certificates.patch b/gnu/packages/patches/cmake-curl-certificates.patch
new file mode 100644
index 0000000000..36252083f8
--- /dev/null
+++ b/gnu/packages/patches/cmake-curl-certificates.patch
@@ -0,0 +1,40 @@
+By default commands such as "ctest" would not look for certificates
+at all: <https://issues.guix.gnu.org/issue/37371>.
+
+This changes CMake such that commands honor SSL_CERT_FILE and SSL_CERT_DIR
+as well as /etc/ssl/certs.
+
+--- cmake-3.13.1/Source/cmCurl.cxx	2019-09-10 17:27:36.926907260 +0200
++++ cmake-3.13.1/Source/cmCurl.cxx	2019-09-10 17:52:35.475903919 +0200
+@@ -4,11 +4,8 @@
+ 
+ #include "cmThirdParty.h"
+ 
+-#if !defined(CMAKE_USE_SYSTEM_CURL) && !defined(_WIN32) &&                    \
+-  !defined(__APPLE__) && !defined(CURL_CA_BUNDLE) && !defined(CURL_CA_PATH)
+ #  define CMAKE_FIND_CAFILE
+ #  include "cmSystemTools.h"
+-#endif
+ 
+ // curl versions before 7.21.5 did not provide this error code
+ #if defined(LIBCURL_VERSION_NUM) && LIBCURL_VERSION_NUM < 0x071505
+@@ -29,6 +26,19 @@ std::string cmCurlSetCAInfo(::CURL* curl
+     ::CURLcode res = ::curl_easy_setopt(curl, CURLOPT_CAINFO, cafile);
+     check_curl_result(res, "Unable to set TLS/SSL Verify CAINFO: ");
+   }
++
++  /* Honor the usual environment variables.  */
++  else if (cmSystemTools::GetEnv("SSL_CERT_FILE", e)) {
++    ::CURLcode res =
++      ::curl_easy_setopt(curl, CURLOPT_CAINFO, e.c_str());
++    check_curl_result(res, "Unable to set TLS/SSL Verify CAINFO: ");
++  }
++  else if (cmSystemTools::GetEnv("SSL_CERT_DIR", e)) {
++    ::CURLcode res =
++      ::curl_easy_setopt(curl, CURLOPT_CAPATH, e.c_str());
++    check_curl_result(res, "Unable to set TLS/SSL Verify CAINFO: ");
++  }
++
+ #ifdef CMAKE_FIND_CAFILE
+ #  define CMAKE_CAFILE_FEDORA "/etc/pki/tls/certs/ca-bundle.crt"
+   else if (cmSystemTools::FileExists(CMAKE_CAFILE_FEDORA, true)) {
diff --git a/gnu/packages/patches/dbus-CVE-2019-12749.patch b/gnu/packages/patches/dbus-CVE-2019-12749.patch
deleted file mode 100644
index 12106f4589..0000000000
--- a/gnu/packages/patches/dbus-CVE-2019-12749.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From 47b1a4c41004bf494b87370987b222c934b19016 Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Thu, 30 May 2019 12:53:03 +0100
-Subject: [PATCH] auth: Reject DBUS_COOKIE_SHA1 for users other than the server
- owner
-
-The DBUS_COOKIE_SHA1 authentication mechanism aims to prove ownership
-of a shared home directory by having the server write a secret "cookie"
-into a .dbus-keyrings subdirectory of the desired identity's home
-directory with 0700 permissions, and having the client prove that it can
-read the cookie. This never actually worked for non-malicious clients in
-the case where server uid != client uid (unless the server and client
-both have privileges, such as Linux CAP_DAC_OVERRIDE or traditional
-Unix uid 0) because an unprivileged server would fail to write out the
-cookie, and an unprivileged client would be unable to read the resulting
-file owned by the server.
-
-Additionally, since dbus 1.7.10 we have checked that ~/.dbus-keyrings
-is owned by the uid of the server (a side-effect of a check added to
-harden our use of XDG_RUNTIME_DIR), further ruling out successful use
-by a non-malicious client with a uid differing from the server's.
-
-Joe Vennix of Apple Information Security discovered that the
-implementation of DBUS_COOKIE_SHA1 was susceptible to a symbolic link
-attack: a malicious client with write access to its own home directory
-could manipulate a ~/.dbus-keyrings symlink to cause the DBusServer to
-read and write in unintended locations. In the worst case this could
-result in the DBusServer reusing a cookie that is known to the
-malicious client, and treating that cookie as evidence that a subsequent
-client connection came from an attacker-chosen uid, allowing
-authentication bypass.
-
-This is mitigated by the fact that by default, the well-known system
-dbus-daemon (since 2003) and the well-known session dbus-daemon (in
-stable releases since dbus 1.10.0 in 2015) only accept the EXTERNAL
-authentication mechanism, and as a result will reject DBUS_COOKIE_SHA1
-at an early stage, before manipulating cookies. As a result, this
-vulnerability only applies to:
-
-* system or session dbus-daemons with non-standard configuration
-* third-party dbus-daemon invocations such as at-spi2-core (although
-  in practice at-spi2-core also only accepts EXTERNAL by default)
-* third-party uses of DBusServer such as the one in Upstart
-
-Avoiding symlink attacks in a portable way is difficult, because APIs
-like openat() and Linux /proc/self/fd are not universally available.
-However, because DBUS_COOKIE_SHA1 already doesn't work in practice for
-a non-matching uid, we can solve this vulnerability in an easier way
-without regressions, by rejecting it early (before looking at
-~/.dbus-keyrings) whenever the requested identity doesn't match the
-identity of the process hosting the DBusServer.
-
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-Closes: https://gitlab.freedesktop.org/dbus/dbus/issues/269
-Closes: CVE-2019-12749
----
- dbus/dbus-auth.c | 32 ++++++++++++++++++++++++++++++++
- 1 file changed, 32 insertions(+)
-
-diff --git a/dbus/dbus-auth.c b/dbus/dbus-auth.c
-index 37d8d4c9..7390a9d5 100644
---- a/dbus/dbus-auth.c
-+++ b/dbus/dbus-auth.c
-@@ -529,6 +529,7 @@ sha1_handle_first_client_response (DBusAuth         *auth,
-   DBusString tmp2;
-   dbus_bool_t retval = FALSE;
-   DBusError error = DBUS_ERROR_INIT;
-+  DBusCredentials *myself = NULL;
- 
-   _dbus_string_set_length (&auth->challenge, 0);
-   
-@@ -565,6 +566,34 @@ sha1_handle_first_client_response (DBusAuth         *auth,
-       return FALSE;
-     }
- 
-+  myself = _dbus_credentials_new_from_current_process ();
-+
-+  if (myself == NULL)
-+    goto out;
-+
-+  if (!_dbus_credentials_same_user (myself, auth->desired_identity))
-+    {
-+      /*
-+       * DBUS_COOKIE_SHA1 is not suitable for authenticating that the
-+       * client is anyone other than the user owning the process
-+       * containing the DBusServer: we probably aren't allowed to write
-+       * to other users' home directories. Even if we can (for example
-+       * uid 0 on traditional Unix or CAP_DAC_OVERRIDE on Linux), we
-+       * must not, because the other user controls their home directory,
-+       * and could carry out symlink attacks to make us read from or
-+       * write to unintended locations. It's difficult to avoid symlink
-+       * attacks in a portable way, so we just don't try. This isn't a
-+       * regression, because DBUS_COOKIE_SHA1 never worked for other
-+       * users anyway.
-+       */
-+      _dbus_verbose ("%s: client tried to authenticate as \"%s\", "
-+                     "but that doesn't match this process",
-+                     DBUS_AUTH_NAME (auth),
-+                     _dbus_string_get_const_data (data));
-+      retval = send_rejected (auth);
-+      goto out;
-+    }
-+
-   /* we cache the keyring for speed, so here we drop it if it's the
-    * wrong one. FIXME caching the keyring here is useless since we use
-    * a different DBusAuth for every connection.
-@@ -679,6 +708,9 @@ sha1_handle_first_client_response (DBusAuth         *auth,
-   _dbus_string_zero (&tmp2);
-   _dbus_string_free (&tmp2);
- 
-+  if (myself != NULL)
-+    _dbus_credentials_unref (myself);
-+
-   return retval;
- }
- 
diff --git a/gnu/packages/patches/dbus-c++-gcc-compat.patch b/gnu/packages/patches/dbus-c++-gcc-compat.patch
new file mode 100644
index 0000000000..c4f126858c
--- /dev/null
+++ b/gnu/packages/patches/dbus-c++-gcc-compat.patch
@@ -0,0 +1,14 @@
+Fix a string comparison in C++ 11.
+
+Taken from Debian:
+https://sources.debian.org/src/dbus-c++/0.9.0-8.1/debian/patches/06_fix_gcc-7_ftbfs.patch/
+
+--- a/src/pipe.cpp
++++ b/src/pipe.cpp
+@@ -83,5 +83,5 @@ ssize_t Pipe::read(void *buffer, unsigne
+ void Pipe::signal()
+ {
+   // TODO: ignoring return of read/write generates warning; maybe relevant for eventloop work...
+-  ::write(_fd_write, '\0', 1);
++  ::write(_fd_write, "\0", 1);
+ }
diff --git a/gnu/packages/patches/dbus-c++-threading-mutex.patch b/gnu/packages/patches/dbus-c++-threading-mutex.patch
new file mode 100644
index 0000000000..b201700dc0
--- /dev/null
+++ b/gnu/packages/patches/dbus-c++-threading-mutex.patch
@@ -0,0 +1,37 @@
+Description: Fix FTBFS if DBUS_HAS_RECURSIVE_MUTEX is undefined
+Author: Peter Williams <peter@newton.cx>
+Last-Update: 2018-01-26
+
+Taken from Debian:
+https://sources.debian.org/src/dbus-c++/0.9.0-8.1/debian/patches/07_fix_mutex_ftbfs.patch/
+
+--- dbus-c++-0.9.0.orig/include/dbus-c++/dispatcher.h
++++ dbus-c++-0.9.0/include/dbus-c++/dispatcher.h
+@@ -267,6 +267,19 @@ struct Threading
+     return new Mx;
+   }
+ 
++#ifndef DBUS_HAS_RECURSIVE_MUTEX
++  static bool mutex_free(Mutex *mx)
++  {
++    delete mx;
++    return true;
++  }
++
++  static bool mutex_lock(Mutex *mx)
++  {
++    mx->lock();
++    return true;
++  }
++#else
+   static void mutex_free(Mutex *mx)
+   {
+     delete mx;
+@@ -276,6 +289,7 @@ struct Threading
+   {
+     mx->lock();
+   }
++#endif
+ 
+   static void mutex_unlock(Mutex *mx)
+   {
diff --git a/gnu/packages/patches/dealii-mpi-deprecations.patch b/gnu/packages/patches/dealii-mpi-deprecations.patch
deleted file mode 100644
index 816d54140a..0000000000
--- a/gnu/packages/patches/dealii-mpi-deprecations.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 40538ad31a71495649d174b0f7be5f7135d0a905 Mon Sep 17 00:00:00 2001
-From: David Wells <drwells@email.unc.edu>
-Date: Sat, 2 Feb 2019 10:00:38 -0500
-Subject: [PATCH] Avoid calling a deprecated MPI function.
-
-This was deprecated a long time ago (1996) and is not present in the
-latest version of openMPI (4.0): see
-
-https://www.open-mpi.org/faq/?category=mpi-removed
-
-Credit goes to Pratik Nayak for finding this issue.
----
- source/base/mpi.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/source/base/mpi.cc b/source/base/mpi.cc
-index bd1f7f9846a..b8cd45e7c26 100644
---- a/source/base/mpi.cc
-+++ b/source/base/mpi.cc
-@@ -448,7 +448,7 @@ namespace Utilities
-       MPI_Aint     displacements[] = {0, offsetof(MinMaxAvg, min_index)};
-       MPI_Datatype types[]         = {MPI_DOUBLE, MPI_INT};
- 
--      ierr = MPI_Type_struct(2, lengths, displacements, types, &type);
-+      ierr = MPI_Type_create_struct(2, lengths, displacements, types, &type);
-       AssertThrowMPI(ierr);
- 
-       ierr = MPI_Type_commit(&type);
diff --git a/gnu/packages/patches/debops-constants-for-external-program-names.patch b/gnu/packages/patches/debops-constants-for-external-program-names.patch
new file mode 100644
index 0000000000..b3b34ed323
--- /dev/null
+++ b/gnu/packages/patches/debops-constants-for-external-program-names.patch
@@ -0,0 +1,276 @@
+From 78d5cddafebb28e2e54efeb781495b5607ddb356 Mon Sep 17 00:00:00 2001
+From: Hartmut Goebel <h.goebel@crazy-compilers.com>
+Date: Thu, 8 Aug 2019 15:19:48 +0200
+Subject: [PATCH] Scripts: Use constants for external program names.
+
+This makes it much, much easier to replace the program
+with one using an absolute path. This is necessary for
+e.g. Guix to keep references to these external programs.
+---
+ bin/debops              | 10 +++++++---
+ bin/debops-padlock      | 21 +++++++++++++++------
+ bin/debops-task         |  7 +++++--
+ bin/debops-update       | 18 +++++++++++-------
+ debops/__init__.py      | 17 ++++++++++++-----
+ debops/cmds/__init__.py |  6 +++++-
+ 6 files changed, 55 insertions(+), 24 deletions(-)
+
+diff --git a/bin/debops b/bin/debops
+index 2b7ad3f88..caaeb892f 100755
+--- a/bin/debops
++++ b/bin/debops
+@@ -59,6 +59,10 @@ ConfigFileHeader = """\
+ # You can manipulate the contents of this file via `.debops.cfg`.
+ """
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++ANSIBLE_PLAYBOOK = 'ansible-playbook'
++
+ 
+ def write_config(filename, config):
+     cfgparser = configparser.ConfigParser()
+@@ -131,7 +135,7 @@ def gen_ansible_cfg(filename, config, project_root, playbooks_path,
+             os.path.join(playbooks_path, "roles"),
+             "/etc/ansible/roles")))
+ 
+-    ansible_version_out = subprocess.check_output(["ansible-playbook",
++    ansible_version_out = subprocess.check_output([ANSIBLE_PLAYBOOK,
+                                                    "--version"]).decode()
+ 
+     # Get first line and split by spaces to get second 'word'.
+@@ -197,7 +201,7 @@ def main(cmd_args):
+         playbooks_path = '/nonexistent'
+ 
+     # Make sure required commands are present
+-    require_commands('ansible-playbook')
++    require_commands(ANSIBLE_PLAYBOOK)
+ 
+     # Check if user specified a potential playbook name as the first
+     # argument. If yes, use it as the playbook name and remove it from
+@@ -256,7 +260,7 @@ def main(cmd_args):
+         print("Running Ansible playbooks:")
+         for element in play_list:
+             print(element)
+-        return subprocess.call(['ansible-playbook'] + play_list + arg_list)
++        return subprocess.call([ANSIBLE_PLAYBOOK] + play_list + arg_list)
+     finally:
+         if revert_unlock:
+             padlock_lock(encfs_encrypted)
+diff --git a/bin/debops-padlock b/bin/debops-padlock
+index bfdfb8e06..2a97716cd 100755
+--- a/bin/debops-padlock
++++ b/bin/debops-padlock
+@@ -67,6 +67,14 @@ devrandom = os.environ.get('DEVRANDOM', "/dev/urandom")
+ 
+ SCRIPT_FILENAME = 'padlock-script'
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++ENCFS = 'encfs'
++FIND = 'find'
++FUSERMOUNT = 'fusermount'
++UMOUNT = 'umount'
++GPG = 'gpg'
++
+ # ---- DebOps environment setup ----
+ 
+ 
+@@ -80,9 +88,9 @@ def main(subcommand_func, **kwargs):
+     # Make sure required commands are present
+     # OS X compatibility
+     if sys.platform == 'darwin':
+-        require_commands('encfs', 'find', 'umount', 'gpg')
++        require_commands(ENCFS, FIND, UMOUNT, GPG)
+     else:
+-        require_commands('encfs', 'find', 'fusermount', 'gpg')
++        require_commands(ENCFS, FIND, FUSERMOUNT, GPG)
+ 
+     inventory_path = find_inventorypath(project_root, required=False)
+     # If inventory hasn't been found automatically, assume it's the default
+@@ -121,7 +129,7 @@ def init(encfs_decrypted, encfs_encrypted, recipients):
+     # Generate a random password and encrypt it with GPG keys of recipients.
+     print("Generating a random", ENCFS_KEYFILE_LENGTH, "char password")
+     pwd = gen_pwd()
+-    gpg = subprocess.Popen(['gpg', '--encrypt', '--armor',
++    gpg = subprocess.Popen([GPG, '--encrypt', '--armor',
+                             '--output', encfs_keyfile] + recipients,
+                            stdin=subprocess.PIPE)
+     gpg.communicate(pwd.encode('utf-8'))
+@@ -133,9 +141,10 @@ def init(encfs_decrypted, encfs_encrypted, recipients):
+     # NB2: We can not use padlock_unlock here, because the config file
+     # does not yet exist.
+     encfs = subprocess.Popen([
+-        'encfs', encfs_encrypted, encfs_decrypted,
++        ENCFS, encfs_encrypted, encfs_decrypted,
+         '--extpass',
+-        'gpg --decrypt --no-mdc-warning --output - '+shquote(encfs_keyfile)],
++        GPG + ' --decrypt --no-mdc-warning --output - '
++        + shquote(encfs_keyfile)],
+         stdin=subprocess.PIPE)
+     encfs.communicate(('p\n'+pwd).encode('utf-8'))
+ 
+@@ -154,7 +163,7 @@ def init(encfs_decrypted, encfs_encrypted, recipients):
+ 
+     # Protect the EncFS configuration file by also encrypting it with
+     # the GPG keys of recipients.
+-    subprocess.call(['gpg', '--encrypt', '--armor',
++    subprocess.call([GPG, '--encrypt', '--armor',
+                      '--output', encfs_configfile+'.asc']
+                     + recipients + [encfs_configfile])
+     os.remove(encfs_configfile)
+diff --git a/bin/debops-task b/bin/debops-task
+index 223e5f834..dc31ad4e6 100755
+--- a/bin/debops-task
++++ b/bin/debops-task
+@@ -49,11 +49,14 @@ project_root = find_debops_project(required=True)
+ # todo: need to decide on semantics!
+ # config = read_config(project_root)
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++ANSIBLE = 'ansible'
+ 
+ # ---- Main script ----
+ 
+ # Make sure required commands are present
+-require_commands('ansible')
++require_commands(ANSIBLE)
+ 
+ ansible_inventory = find_inventorypath(project_root)
+ 
+@@ -71,5 +74,5 @@ if INSECURE:
+     os.environ['ANSIBLE_HOST_KEY_CHECKING'] = 'False'
+ 
+ # Run ansible with custom environment
+-cmd = ['ansible'] + module + sys.argv[1:]
++cmd = [ANSIBLE] + module + sys.argv[1:]
+ subprocess.call(cmd)
+diff --git a/bin/debops-update b/bin/debops-update
+index 88c5e2c82..cc7e57cb0 100755
+--- a/bin/debops-update
++++ b/bin/debops-update
+@@ -90,6 +90,10 @@ GALAXY_REQUIREMENTS = "galaxy/requirements.txt"
+ # Default Ansible Galaxy user account name
+ GALAXY_ACCOUNT = "debops"
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++GIT = 'git'
++
+ 
+ # ---- Functions ----
+ 
+@@ -137,7 +141,7 @@ def clone_git_repository(repo_uri, branch, destination, dry_run=False):
+     if dry_run:
+         print("Cloning '%s' to %s..." % (repo_uri, destination))
+     else:
+-        subprocess.call(['git', 'clone', '--quiet', '--branch', branch,
++        subprocess.call([GIT, 'clone', '--quiet', '--branch', branch,
+                          repo_uri, destination])
+ 
+ 
+@@ -152,22 +156,22 @@ def update_git_repository(path, dry_run=False, remote_uri=False):
+     os.chdir(path)
+ 
+     if dry_run:
+-        subprocess.call(['git', 'fetch'])
+-        subprocess.call(['git', 'diff', 'HEAD', 'origin', '--stat'])
++        subprocess.call([GIT, 'fetch'])
++        subprocess.call([GIT, 'diff', 'HEAD', 'origin', '--stat'])
+     else:
+         # Get the current sha of the head branch
+         current_sha = subprocess.check_output(
+-                ['git', 'rev-parse', 'HEAD']).strip()
++                [GIT, 'rev-parse', 'HEAD']).strip()
+ 
+         # Fetch it silently and store the new sha
+-        subprocess.call(['git', 'fetch', '--quiet'])
++        subprocess.call([GIT, 'fetch', '--quiet'])
+         fetch_sha = subprocess.check_output(
+-                ['git', 'rev-parse', 'FETCH_HEAD']).strip()
++                [GIT, 'rev-parse', 'FETCH_HEAD']).strip()
+ 
+         if current_sha != fetch_sha:
+             print()
+             print('--')
+-            subprocess.call(['git', 'merge', fetch_sha])
++            subprocess.call([GIT, 'merge', fetch_sha])
+ 
+             if remote_uri:
+                 compare_uri = (remote_uri + '/compare/' + current_sha[:7]
+diff --git a/debops/__init__.py b/debops/__init__.py
+index 1c2cedcb0..da8430e41 100644
+--- a/debops/__init__.py
++++ b/debops/__init__.py
+@@ -93,6 +93,13 @@ ENCFS_KEYFILE = ".encfs6.keyfile"
+ # Length of the random EncFS password stored in encrypted keyfile
+ ENCFS_KEYFILE_LENGTH = 256
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++ENCFS = 'encfs'
++FUSERMOUNT = 'fusermount'
++UMOUNT = 'umount'
++GPG = 'gpg'
++
+ 
+ # ---- Functions ----
+ 
+@@ -180,9 +187,9 @@ def padlock_lock(encrypted_path):
+         return False
+     # OS X compatibility
+     if sys.platform == 'darwin':
+-        subprocess.call(['umount', decrypted_path])
++        subprocess.call([UMOUNT, decrypted_path])
+     else:
+-        subprocess.call(['fusermount', '-u', decrypted_path])
++        subprocess.call([FUSERMOUNT, '-u', decrypted_path])
+     return True
+ 
+ 
+@@ -237,14 +244,14 @@ def padlock_unlock(encrypted_path):
+     # Start encfs. It will wait for input on the `configfile` named
+     # pipe.
+     encfs = subprocess.Popen([
+-        'encfs', encrypted_path, decrypted_path,
++        ENCFS, encrypted_path, decrypted_path,
+         '--extpass',
+-        'gpg --decrypt --no-mdc-warning --output - %s' % shquote(keyfile)])
++        GPG + ' --decrypt --no-mdc-warning --output - %s' % shquote(keyfile)])
+     # now decrypt the config and write it into the named pipe
+     with open(configfile, 'w') as fh:
+         # NB: gpg must write to stdout to avoid it is asking whether
+         # the file should be overwritten
+-        subprocess.Popen(['gpg',
++        subprocess.Popen([GPG,
+                           '--decrypt', '--no-mdc-warning', '--output', '-',
+                           crypted_configfile], stdout=fh).wait()
+     encfs.wait()
+diff --git a/debops/cmds/__init__.py b/debops/cmds/__init__.py
+index b221fa191..9fabf43a5 100644
+--- a/debops/cmds/__init__.py
++++ b/debops/cmds/__init__.py
+@@ -55,6 +55,10 @@ SCRIPT_NAME = os.path.basename(sys.argv[0])
+ # command line)
+ INSECURE = bool(os.environ.get('INSECURE', False))
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++WHICH = 'which'
++
+ 
+ def error_msg(message, severity="Error"):
+     """
+@@ -70,7 +74,7 @@ def require_commands(*cmd_names):
+     Check if required commands exist.
+     """
+     def command_exists(cmd_name):
+-        which = "where" if platform.system() == "Windows" else "which"
++        which = "where" if platform.system() == "Windows" else WHICH
+         return not subprocess.call([which, cmd_name],
+                                    stdout=DEVNULL, stderr=subprocess.STDOUT)
+ 
+-- 
+2.21.0
+
diff --git a/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch b/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch
new file mode 100644
index 0000000000..bbb6b7c08e
--- /dev/null
+++ b/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch
@@ -0,0 +1,45 @@
+From 5059daf8bd59a83f520c14731173ea76ce8b8661 Mon Sep 17 00:00:00 2001
+From: Hartmut Goebel <h.goebel@crazy-compilers.com>
+Date: Sun, 8 Sep 2019 13:09:15 +0200
+Subject: [PATCH] [debops-defaults] If `view` is not available, try less, etc.
+
+---
+ bin/debops-defaults | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+diff --git a/bin/debops-defaults b/bin/debops-defaults
+index 9dd87fe0a..3e3db4c41 100755
+--- a/bin/debops-defaults
++++ b/bin/debops-defaults
+@@ -96,13 +96,22 @@ def main(role_list):
+     config = read_config(project_root)
+     playbooks_path = find_playbookpath(config, project_root, required=True)
+ 
+-    # Make sure required commands are present
+-    require_commands('view')
+-
+-    if sys.stdout.isatty():
++    # Check if one of the output commands is present
++    sys.stdout = io.BytesIO()  # suppress error message, if any
++    for cmd_args in (('view', '+set ft=yaml', '-'),
++                     ('less', '-'),
++                     ('more', '-')):
++        try:
++            require_commands(cmd_args[0])
++            break
++        except SystemExit:
++            # this command was not found
++            cmd_args = None
++    sys.stdout = sys.__stdout__
++
++    if cmd_args and sys.stdout.isatty():
+         # if script is run as standalone, redirect to view
+-        view = subprocess.Popen(['view', '+set ft=yaml', '-'],
+-                                stdin=subprocess.PIPE)
++        view = subprocess.Popen(cmd_args, stdin=subprocess.PIPE)
+         try:
+             aggregate_defaults(playbooks_path, role_list, view.stdin)
+         except IOError as e:
+-- 
+2.21.0
+
diff --git a/gnu/packages/patches/diffutils-getopt.patch b/gnu/packages/patches/diffutils-getopt.patch
deleted file mode 100644
index 05c2504adf..0000000000
--- a/gnu/packages/patches/diffutils-getopt.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-commit e3461d1c21a99bcef1b8826f710434e0ffb5adea
-Author: Paul Eggert <eggert@cs.ucla.edu>
-Date:   Sun Jun 11 15:53:09 2017 -0700
-
-    getopt-posix: port to glibc 2.25.90
-    
-    Problem reported by Daniel P. Berrange in:
-    http://lists.gnu.org/archive/html/bug-gnulib/2017-06/msg00003.html
-    * lib/getopt-pfx-core.h (_GETOPT_CORE_H):
-    * lib/getopt-pfx-ext.h (_GETOPT_EXT_H):
-    #undef if __GETOPT_PREFIX is defined.
-
-diff --git a/lib/getopt-pfx-core.h b/lib/getopt-pfx-core.h
-index 155c11612..6ad0da683 100644
---- a/lib/getopt-pfx-core.h
-+++ b/lib/getopt-pfx-core.h
-@@ -47,6 +47,11 @@
- # define opterr __GETOPT_ID (opterr)
- # define optind __GETOPT_ID (optind)
- # define optopt __GETOPT_ID (optopt)
-+
-+/* The system's getopt.h may have already included getopt-core.h to
-+   declare the unprefixed identifiers.  Undef _GETOPT_CORE_H so that
-+   getopt-core.h declares them with prefixes.  */
-+# undef _GETOPT_CORE_H
- #endif
- 
- #include <getopt-core.h>
-diff --git a/lib/getopt-pfx-ext.h b/lib/getopt-pfx-ext.h
-index d960bb34e..c5ac52202 100644
---- a/lib/getopt-pfx-ext.h
-+++ b/lib/getopt-pfx-ext.h
-@@ -45,6 +45,11 @@
- # define getopt_long_only __GETOPT_ID (getopt_long_only)
- # define option __GETOPT_ID (option)
- # define _getopt_internal __GETOPT_ID (getopt_internal)
-+
-+/* The system's getopt.h may have already included getopt-ext.h to
-+   declare the unprefixed identifiers.  Undef _GETOPT_EXT_H so that
-+   getopt-ext.h declares them with prefixes.  */
-+# undef _GETOPT_EXT_H
- #endif
- 
- /* Standalone applications get correct prototypes for getopt_long and
diff --git a/gnu/packages/patches/elm-compiler-disable-reactor.patch b/gnu/packages/patches/elm-compiler-disable-reactor.patch
new file mode 100644
index 0000000000..9871b55e8d
--- /dev/null
+++ b/gnu/packages/patches/elm-compiler-disable-reactor.patch
@@ -0,0 +1,71 @@
+commit 20d80e2323b565a36751c9455e535d8f73fa32f7
+Author: Robert Vollmert <rob@vllmrt.net>
+Date:   Fri Jun 14 16:05:47 2019 +0200
+
+    disable reactor
+
+diff --git a/elm.cabal b/elm.cabal
+index c75f9689..ece63c46 100644
+--- a/elm.cabal
++++ b/elm.cabal
+@@ -45,9 +45,6 @@ Executable elm
+         builder/src
+         ui/terminal/src
+ 
+-    other-extensions:
+-        TemplateHaskell
+-
+     Main-Is:
+         Main.hs
+ 
+@@ -56,8 +53,6 @@ Executable elm
+         Develop
+         Develop.Generate.Help
+         Develop.Generate.Index
+-        Develop.StaticFiles
+-        Develop.StaticFiles.Build
+         Diff
+         Init
+         Install
+diff --git a/ui/terminal/src/Develop.hs b/ui/terminal/src/Develop.hs
+index 4b2252e1..7ed7716e 100644
+--- a/ui/terminal/src/Develop.hs
++++ b/ui/terminal/src/Develop.hs
+@@ -23,7 +23,6 @@ import Snap.Util.FileServe
+ import qualified Elm.Project as Project
+ import qualified Develop.Generate.Help as Generate
+ import qualified Develop.Generate.Index as Index
+-import qualified Develop.StaticFiles as StaticFiles
+ import qualified Generate.Output as Output
+ import qualified Json.Encode as Encode
+ import qualified Reporting.Exit as Exit
+@@ -219,16 +218,7 @@ compileToHtmlBuilder mode file =
+ 
+ 
+ serveAssets :: Snap ()
+-serveAssets =
+-  do  file <- getSafePath
+-      case StaticFiles.lookup file of
+-        Nothing ->
+-          pass
+-
+-        Just (content, mimeType) ->
+-          do  modifyResponse (setContentType (mimeType <> ";charset=utf-8"))
+-              writeBS content
+-
++serveAssets = pass
+ 
+ 
+ -- MIME TYPES
+diff --git a/ui/terminal/src/Main.hs b/terminal/src/Main.hs
+index 7000f3ca..2c76965a 100644
+--- a/ui/terminal/src/Main.hs
++++ b/ui/terminal/src/Main.hs
+@@ -39,7 +39,6 @@ main =
+       complex intro outro
+         [ repl
+         , init
+-        , reactor
+         , make
+         , install
+         , bump
diff --git a/gnu/packages/patches/elm-compiler-fix-map-key.patch b/gnu/packages/patches/elm-compiler-fix-map-key.patch
new file mode 100644
index 0000000000..4f05ded530
--- /dev/null
+++ b/gnu/packages/patches/elm-compiler-fix-map-key.patch
@@ -0,0 +1,38 @@
+commit e3512d887df41a8162c3e361171c04beca08415b
+Author: Tom Stejskal <tom.stejskal@gmail.com>
+Date:   Mon Nov 19 20:09:43 2018 +0100
+
+    Fix Map.!: given key is not an element in the map
+
+diff --git a/compiler/src/Elm/Compiler/Type/Extract.hs b/compiler/src/Elm/Compiler/Type/Extract.hs
+index 1aafe1d4..99763392 100644
+--- a/compiler/src/Elm/Compiler/Type/Extract.hs
++++ b/compiler/src/Elm/Compiler/Type/Extract.hs
+@@ -10,6 +10,7 @@ module Elm.Compiler.Type.Extract
+ 
+ 
+ import Data.Map ((!))
++import qualified Data.Map as Map
+ import qualified Data.Maybe as Maybe
+ import qualified Data.Set as Set
+ 
+@@ -134,11 +135,15 @@ extractUnion interfaces (Opt.Global home name) =
+     else
+       let
+         pname = toPublicName home name
+-        unions = I._unions (interfaces ! home)
++        maybeUnions = I._unions <$> Map.lookup home interfaces
+       in
+-      case I.toUnionInternals (unions ! name) of
+-        Can.Union vars ctors _ _ ->
+-          T.Union pname vars <$> traverse extractCtor ctors
++      case Map.lookup name =<< maybeUnions of
++        Just union ->
++          case I.toUnionInternals union of
++            Can.Union vars ctors _ _ ->
++              T.Union pname vars <$> traverse extractCtor ctors
++        Nothing ->
++          return $ T.Union pname [] []
+ 
+ 
+ extractCtor :: Can.Ctor -> Extractor (N.Name, [T.Type])
diff --git a/gnu/packages/patches/elm-compiler-relax-glsl-bound.patch b/gnu/packages/patches/elm-compiler-relax-glsl-bound.patch
new file mode 100644
index 0000000000..3f8be810c2
--- /dev/null
+++ b/gnu/packages/patches/elm-compiler-relax-glsl-bound.patch
@@ -0,0 +1,19 @@
+commit 4c649a5a270aba15cc6a3913c3ad51a293047f40
+Author: Rémi Lefèvre <rlefevre@gmail.com>
+Date:   Mon Sep 3 19:18:54 2018 +0200
+
+    update language-glsl maximum version
+
+diff --git a/elm.cabal b/elm.cabal
+index 48aa84f0..464fe9d5 100644
+--- a/elm.cabal
++++ b/elm.cabal
+@@ -246,7 +246,7 @@ Executable elm
+         http-client >= 0.5 && < 0.6,
+         http-client-tls >= 0.3 && < 0.4,
+         http-types >= 0.9 && < 1.0,
+-        language-glsl >= 0.0.2 && < 0.3,
++        language-glsl >= 0.0.2 && < 0.4,
+         logict,
+         mtl >= 2.2.1 && < 3,
+         network >= 2.4 && < 2.7,
diff --git a/gnu/packages/patches/emacs-unpackaged-req.patch b/gnu/packages/patches/emacs-unpackaged-req.patch
deleted file mode 100644
index ddb9277610..0000000000
--- a/gnu/packages/patches/emacs-unpackaged-req.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From e5be173e201710538464c279335bef735a327a68 Mon Sep 17 00:00:00 2001
-From: Brian Leung <bkleung89@gmail.com>
-Date: Tue, 18 Jun 2019 06:37:46 +0200
-Subject: [PATCH] Add missing require.
-
----
- unpackaged.el | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/unpackaged.el b/unpackaged.el
-index 2d46b3c..e62184a 100644
---- a/unpackaged.el
-+++ b/unpackaged.el
-@@ -38,6 +38,7 @@
- (require 'dash)
- (require 's)
- (require 'use-package)
-+(require 'hydra)
- 
- ;;; Faces, fonts
- 
--- 
-2.22.0
-
diff --git a/gnu/packages/patches/enjarify-setup-py.patch b/gnu/packages/patches/enjarify-setup-py.patch
new file mode 100644
index 0000000000..4b382ca320
--- /dev/null
+++ b/gnu/packages/patches/enjarify-setup-py.patch
@@ -0,0 +1,19 @@
+Author: Reiner Herrmann <reiner@reiner-h.de>
+Origin: https://salsa.debian.org/android-tools-team/enjarify/blob/master/debian/patches/setup_py.patch
+Description: provides a minimal setup.py to build/install the package
+
+Index: enjarify/setup.py
+===================================================================
+--- /dev/null
++++ enjarify/setup.py
+@@ -0,0 +1,10 @@
++#!/usr/bin/env python3
++
++from setuptools import setup, find_packages
++
++setup(name='enjarify',
++      version='1.0.3',
++      url='https://github.com/google/enjarify',
++      packages=find_packages(),
++      )
++
diff --git a/gnu/packages/patches/enlightenment-fix-setuid-path.patch b/gnu/packages/patches/enlightenment-fix-setuid-path.patch
index 90e16d3e67..c48f18c8ec 100644
--- a/gnu/packages/patches/enlightenment-fix-setuid-path.patch
+++ b/gnu/packages/patches/enlightenment-fix-setuid-path.patch
@@ -28,7 +28,7 @@ index 2bced6766..208e583ba 100644
  }
  #endif  // HAVE_EEZE || __FreeBSD_kernel__
 diff --git a/src/bin/e_fm/e_fm_main_eeze.c b/src/bin/e_fm/e_fm_main_eeze.c
-index b7d9e3eba..d8a9eb82c 100644
+index 0fcffa249..c1921121d 100644
 --- a/src/bin/e_fm/e_fm_main_eeze.c
 +++ b/src/bin/e_fm/e_fm_main_eeze.c
 @@ -318,7 +318,7 @@ _e_fm_main_eeze_volume_eject(E_Volume *v)
@@ -59,10 +59,10 @@ index b7d9e3eba..d8a9eb82c 100644
       }
     v->guard = ecore_timer_loop_add(E_FM_MOUNT_TIMEOUT, (Ecore_Task_Cb)_e_fm_main_eeze_vol_mount_timeout, v);
 diff --git a/src/bin/e_sys.c b/src/bin/e_sys.c
-index 6781a9b5a..8cd140f1b 100644
+index 671fbcd9a..90ee04cf1 100644
 --- a/src/bin/e_sys.c
 +++ b/src/bin/e_sys.c
-@@ -653,20 +653,16 @@ _e_sys_cb_timer(void *data EINA_UNUSED)
+@@ -702,20 +702,16 @@ _e_sys_cb_timer(void *data EINA_UNUSED)
  
     e_init_status_set(_("Checking System Permissions"));
     snprintf(buf, sizeof(buf),
@@ -87,9 +87,9 @@ index 6781a9b5a..8cd140f1b 100644
     _e_sys_hibernate_check_exe = ecore_exe_run(buf, NULL);
     return ECORE_CALLBACK_CANCEL;
  }
-@@ -1079,8 +1075,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
-         /* shutdown -h now */
+@@ -1134,8 +1130,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
          if (e_util_immortal_check()) return 0;
+         e_fm2_die();
          snprintf(buf, sizeof(buf),
 -                 "%s/enlightenment/utils/enlightenment_sys halt",
 -                 e_prefix_lib_get());
@@ -97,9 +97,9 @@ index 6781a9b5a..8cd140f1b 100644
          if (_e_sys_exe)
            {
               if ((ecore_time_get() - _e_sys_begin_time) > 2.0)
-@@ -1114,8 +1109,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
-         /* shutdown -r now */
+@@ -1170,8 +1165,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
          if (e_util_immortal_check()) return 0;
+         e_fm2_die();
          snprintf(buf, sizeof(buf),
 -                 "%s/enlightenment/utils/enlightenment_sys reboot",
 -                 e_prefix_lib_get());
@@ -107,7 +107,7 @@ index 6781a9b5a..8cd140f1b 100644
          if (_e_sys_exe)
            {
               if ((ecore_time_get() - _e_sys_begin_time) > 2.0)
-@@ -1148,8 +1142,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
+@@ -1204,8 +1198,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
        case E_SYS_SUSPEND:
          /* /etc/acpi/sleep.sh force */
          snprintf(buf, sizeof(buf),
@@ -117,7 +117,7 @@ index 6781a9b5a..8cd140f1b 100644
          if (_e_sys_exe)
            {
               if ((ecore_time_get() - _e_sys_begin_time) > 2.0)
-@@ -1208,8 +1201,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
+@@ -1265,8 +1258,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
        case E_SYS_HIBERNATE:
          /* /etc/acpi/hibernate.sh force */
          snprintf(buf, sizeof(buf),
@@ -152,11 +152,26 @@ index 4b5148634..47d34b07f 100644
     autolock_exe = ecore_exe_run(eina_strbuf_string_get(buf), NULL);
     eina_strbuf_free(buf);
  
+diff --git a/src/modules/bluez5/e_mod_main.c b/src/modules/bluez5/e_mod_main.c
+index a581c466c..095d8f360 100644
+--- a/src/modules/bluez5/e_mod_main.c
++++ b/src/modules/bluez5/e_mod_main.c
+@@ -321,8 +321,8 @@ ebluez5_rfkill_unblock(const char *name)
+    if (buf)
+      {
+         eina_strbuf_append_printf
+-          (buf, "%s/enlightenment/utils/enlightenment_sys rfkill-unblock %s",
+-           e_prefix_lib_get(), name);
++          (buf, "/run/setuid-programs/enlightenment_sys rfkill-unblock %s",
++           name);
+         _rfkill_exe = ecore_exe_run(eina_strbuf_string_get(buf), NULL);
+         eina_strbuf_free(buf);
+      }
 diff --git a/src/modules/cpufreq/e_mod_main.c b/src/modules/cpufreq/e_mod_main.c
-index f4ba259b6..ae228bae3 100644
+index b66b365d8..bab0802cc 100644
 --- a/src/modules/cpufreq/e_mod_main.c
 +++ b/src/modules/cpufreq/e_mod_main.c
-@@ -1450,8 +1450,7 @@ e_modapi_init(E_Module *m)
+@@ -1452,8 +1452,7 @@ e_modapi_init(E_Module *m)
       }
     E_CONFIG_LIMIT(cpufreq_config->poll_interval, 1, 1024);
  
@@ -166,3 +181,40 @@ index f4ba259b6..ae228bae3 100644
     cpufreq_config->set_exe_path = strdup(buf);
     
     if (stat(buf, &st) < 0)
+diff --git a/src/modules/sysinfo/cpuclock/cpuclock.c b/src/modules/sysinfo/cpuclock/cpuclock.c
+index 938916e53..00d5067d0 100644
+--- a/src/modules/sysinfo/cpuclock/cpuclock.c
++++ b/src/modules/sysinfo/cpuclock/cpuclock.c
+@@ -80,8 +80,7 @@ _cpuclock_set_governor(const char *governor)
+    char buf[4096 + 100], exe[4096];
+    struct stat st;
+ 
+-   snprintf(exe, 4096, "%s/%s/cpuclock_sysfs",
+-            e_module_dir_get(sysinfo_config->module), MODULE_ARCH);
++   snprintf(exe, 4096, "/run/setuid-programs/cpuclock_sysfs");
+    if (stat(exe, &st) < 0) return;
+ 
+    snprintf(buf, sizeof(buf),
+@@ -108,8 +107,7 @@ _cpuclock_set_frequency(int frequency)
+    if (system(buf) != 0)
+      ERR("Error code from trying to run \"%s\"", buf);
+ #else
+-   snprintf(exe, 4096, "%s/%s/cpuclock_sysfs",
+-            e_module_dir_get(sysinfo_config->module), MODULE_ARCH);
++   snprintf(exe, 4096, "/run/setuid-programs/cpuclock_sysfs");
+    if (stat(exe, &st) < 0) return;
+    snprintf(buf, sizeof(buf),
+             "%s %s %i", exe, "frequency", frequency);
+@@ -127,8 +125,7 @@ _cpuclock_set_pstate(int min, int max, int turbo)
+    char buf[4096 + 100], exe[4096];
+    struct stat st;
+ 
+-   snprintf(exe, 4096, "%s/%s/cpuclock_sysfs",
+-            e_module_dir_get(sysinfo_config->module), MODULE_ARCH);
++   snprintf(exe, 4096, "/run/setuid-programs/cpuclock_sysfs");
+    if (stat(exe, &st) < 0) return;
+    snprintf(buf, sizeof(buf),
+             "%s %s %i %i %i", exe, "pstate", min, max, turbo);
+-- 
+2.23.0
+
diff --git a/gnu/packages/patches/evolution-data-server-locales.patch b/gnu/packages/patches/evolution-data-server-locales.patch
new file mode 100644
index 0000000000..48baefb0d8
--- /dev/null
+++ b/gnu/packages/patches/evolution-data-server-locales.patch
@@ -0,0 +1,33 @@
+This patch fixes locale canonicalization when using newer versions of
+ICU.  It comes from the upstream repo, and should appear starting in
+version 3.33.5.
+
+From fe4ac94ce3c14f200e049a5d102fc0e4b811c71e Mon Sep 17 00:00:00 2001
+From: Milan Crha <mcrha@redhat.com>
+Date: Tue, 16 Jul 2019 07:22:07 +0200
+Subject: [PATCH] I#137 - POSIX locale tests fail with ICU 64.x
+
+Closes https://gitlab.gnome.org/GNOME/evolution-data-server/issues/137
+---
+ src/libedataserver/e-collator.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/libedataserver/e-collator.c b/src/libedataserver/e-collator.c
+index 718eac5da..ec2cf7951 100644
+--- a/src/libedataserver/e-collator.c
++++ b/src/libedataserver/e-collator.c
+@@ -132,6 +132,11 @@ canonicalize_locale (const gchar *posix_locale,
+ 	gint   len;
+ 	const gchar *collation_type = NULL;
+ 
++	if (posix_locale && (
++	    g_ascii_strcasecmp (posix_locale, "C") == 0 ||
++	    g_ascii_strcasecmp (posix_locale, "POSIX") == 0))
++		posix_locale = "en_US_POSIX";
++
+ 	len = uloc_canonicalize (posix_locale, locale_buffer, LOCALE_BUFFER_LEN, &status);
+ 
+ 	if (U_FAILURE (status)) {
+-- 
+2.22.0
+
diff --git a/gnu/packages/patches/expat-CVE-2018-20843.patch b/gnu/packages/patches/expat-CVE-2018-20843.patch
deleted file mode 100644
index 216fbe9667..0000000000
--- a/gnu/packages/patches/expat-CVE-2018-20843.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Fix extraction of namespace prefix from XML name.
-Fixes CVE-2018-20843
-
-This patch comes from upstream commit 11f8838bf99ea0a6f0b76f9760c43704d00c4ff6
-https://github.com/libexpat/libexpat/commit/11f8838bf99ea0a6f0b76f9760c43704d00c4ff6
-
-CVE is https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20843
-
-diff --git a/expat/lib/xmlparse.c b/expat/lib/xmlparse.c
-index 30d55c5..737d7cd 100644
---- a/lib/xmlparse.c
-+++ b/lib/xmlparse.c
-@@ -6071,7 +6071,7 @@ setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType)
-       else
-         poolDiscard(&dtd->pool);
-       elementType->prefix = prefix;
--
-+      break;
-     }
-   }
-   return 1;
diff --git a/gnu/packages/patches/freeimage-CVE-2015-0852.patch b/gnu/packages/patches/freeimage-CVE-2015-0852.patch
deleted file mode 100644
index 34d538e925..0000000000
--- a/gnu/packages/patches/freeimage-CVE-2015-0852.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-Copied from Debian.
-
-Description: fix integer overflow
-Origin: upstream
- http://freeimage.cvs.sourceforge.net/viewvc/freeimage/FreeImage/Source/FreeImage/PluginPCX.cpp?view=patch&r1=1.17&r2=1.18&pathrev=MAIN
- http://freeimage.cvs.sourceforge.net/viewvc/freeimage/FreeImage/Source/FreeImage/PluginPCX.cpp?view=patch&r1=1.18&r2=1.19&pathrev=MAIN
-Bug-Debian: https://bugs.debian.org/797165
-Last-Update: 2015-09-14
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
-Index: freeimage/Source/FreeImage/PluginPCX.cpp
-===================================================================
---- freeimage.orig/Source/FreeImage/PluginPCX.cpp
-+++ freeimage/Source/FreeImage/PluginPCX.cpp
-@@ -347,12 +347,14 @@ Load(FreeImageIO *io, fi_handle handle,
- 
- 	try {
- 		// check PCX identifier
--
--		long start_pos = io->tell_proc(handle);
--		BOOL validated = pcx_validate(io, handle);		
--		io->seek_proc(handle, start_pos, SEEK_SET);
--		if(!validated) {
--			throw FI_MSG_ERROR_MAGIC_NUMBER;
-+		// (note: should have been already validated using FreeImage_GetFileType but check again)
-+		{
-+			long start_pos = io->tell_proc(handle);
-+			BOOL validated = pcx_validate(io, handle);
-+			io->seek_proc(handle, start_pos, SEEK_SET);
-+			if(!validated) {
-+				throw FI_MSG_ERROR_MAGIC_NUMBER;
-+			}
- 		}
- 
- 		// process the header
-@@ -366,20 +368,38 @@ Load(FreeImageIO *io, fi_handle handle,
- 		SwapHeader(&header);
- #endif
- 
--		// allocate a new DIB
-+		// process the window
-+		const WORD *window = header.window;	// left, upper, right,lower pixel coord.
-+		const int left		= window[0];
-+		const int top		= window[1];
-+		const int right		= window[2];
-+		const int bottom	= window[3];
- 
--		unsigned width = header.window[2] - header.window[0] + 1;
--		unsigned height = header.window[3] - header.window[1] + 1;
--		unsigned bitcount = header.bpp * header.planes;
--
--		if (bitcount == 24) {
--			dib = FreeImage_AllocateHeader(header_only, width, height, bitcount, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
--		} else {
--			dib = FreeImage_AllocateHeader(header_only, width, height, bitcount);			
-+		// check image size
-+		if((left >= right) || (top >= bottom)) {
-+			throw FI_MSG_ERROR_PARSING;
- 		}
- 
--		// if the dib couldn't be allocated, throw an error
-+		const unsigned width = right - left + 1;
-+		const unsigned height = bottom - top + 1;
-+		const unsigned bitcount = header.bpp * header.planes;
-+
-+		// allocate a new DIB
-+		switch(bitcount) {
-+			case 1:
-+			case 4:
-+			case 8:
-+				dib = FreeImage_AllocateHeader(header_only, width, height, bitcount);
-+				break;
-+			case 24:
-+				dib = FreeImage_AllocateHeader(header_only, width, height, bitcount, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
-+				break;
-+			default:
-+				throw FI_MSG_ERROR_DIB_MEMORY;
-+				break;
-+		}
- 
-+		// if the dib couldn't be allocated, throw an error
- 		if (!dib) {
- 			throw FI_MSG_ERROR_DIB_MEMORY;
- 		}
-@@ -426,19 +446,23 @@ Load(FreeImageIO *io, fi_handle handle,
- 
- 				if (palette_id == 0x0C) {
- 					BYTE *cmap = (BYTE*)malloc(768 * sizeof(BYTE));
--					io->read_proc(cmap, 768, 1, handle);
- 
--					pal = FreeImage_GetPalette(dib);
--					BYTE *pColormap = &cmap[0];
-+					if(cmap) {
-+						io->read_proc(cmap, 768, 1, handle);
- 
--					for(int i = 0; i < 256; i++) {
--						pal[i].rgbRed   = pColormap[0];
--						pal[i].rgbGreen = pColormap[1];
--						pal[i].rgbBlue  = pColormap[2];
--						pColormap += 3;
-+						pal = FreeImage_GetPalette(dib);
-+						BYTE *pColormap = &cmap[0];
-+
-+						for(int i = 0; i < 256; i++) {
-+							pal[i].rgbRed   = pColormap[0];
-+							pal[i].rgbGreen = pColormap[1];
-+							pal[i].rgbBlue  = pColormap[2];
-+							pColormap += 3;
-+						}
-+
-+						free(cmap);
- 					}
- 
--					free(cmap);
- 				}
- 
- 				// wrong palette ID, perhaps a gray scale is needed ?
-@@ -466,9 +490,9 @@ Load(FreeImageIO *io, fi_handle handle,
- 		// calculate the line length for the PCX and the DIB
- 
- 		// length of raster line in bytes
--		unsigned linelength = header.bytes_per_line * header.planes;
-+		const unsigned linelength = header.bytes_per_line * header.planes;
- 		// length of DIB line (rounded to DWORD) in bytes
--		unsigned pitch = FreeImage_GetPitch(dib);
-+		const unsigned pitch = FreeImage_GetPitch(dib);
- 
- 		// run-length encoding ?
- 
diff --git a/gnu/packages/patches/freeimage-CVE-2016-5684.patch b/gnu/packages/patches/freeimage-CVE-2016-5684.patch
deleted file mode 100644
index 2fc02d7b0d..0000000000
--- a/gnu/packages/patches/freeimage-CVE-2016-5684.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From: Debian Science Maintainers
- <debian-science-maintainers@lists.alioth.debian.org>
-Date: Mon, 10 Oct 2016 08:22:44 +0100
-Subject: CVE-2016-5684
-
----
- Source/FreeImage/PluginXPM.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/Source/FreeImage/PluginXPM.cpp b/Source/FreeImage/PluginXPM.cpp
-index a698321..cc7bd07 100644
---- a/Source/FreeImage/PluginXPM.cpp
-+++ b/Source/FreeImage/PluginXPM.cpp
-@@ -181,6 +181,11 @@ Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
- 		}
- 		free(str);
- 
-+		// check info string
-+		if((width <= 0) || (height <= 0) || (colors <= 0) || (cpp <= 0)) {
-+			throw "Improperly formed info string";
-+		}
-+
-         if (colors > 256) {
- 			dib = FreeImage_AllocateHeader(header_only, width, height, 24, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
- 		} else {
-@@ -193,7 +198,7 @@ Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
- 			FILE_RGBA rgba;
- 
- 			str = ReadString(io, handle);
--			if(!str)
-+			if(!str || (strlen(str) < (size_t)cpp))
- 				throw "Error reading color strings";
- 
- 			std::string chrs(str,cpp); //create a string for the color chars using the first cpp chars
diff --git a/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch b/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch
deleted file mode 100644
index 2c9f2c3357..0000000000
--- a/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch
+++ /dev/null
@@ -1,1453 +0,0 @@
-The original patch was downloaded from here:
-https://chromium-review.googlesource.com/c/297211
-
-The paths, file names, and line endings have been adapted.
-
-From eebaf97f5a1cb713d81d311308d8a48c124e5aef Mon Sep 17 00:00:00 2001
-From: James Zern <jzern@google.com>
-Date: Wed, 02 Sep 2015 23:21:13 -0700
-Subject: [PATCH] dsp/mips: add whitespace around stringizing operator
-
-fixes compile with gcc 5.1
-BUG=259
-
-Change-Id: Ideb39c6290ab8569b1b6cc835bea11c822d0286c
----
-
-diff --git a/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c
-index 6590f43..40e4d82 100644
---- a/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c
-@@ -548,10 +548,10 @@
- // TEMP3 = SRC[D + D1 * BPS]
- #define LOAD_4_BYTES(TEMP0, TEMP1, TEMP2, TEMP3,                               \

-                      A, A1, B, B1, C, C1, D, D1, SRC)                          \

--  "lbu          %["#TEMP0"],   "#A"+"#A1"*"XSTR(BPS)"(%["#SRC"])     \n\t"     \

--  "lbu          %["#TEMP1"],   "#B"+"#B1"*"XSTR(BPS)"(%["#SRC"])     \n\t"     \

--  "lbu          %["#TEMP2"],   "#C"+"#C1"*"XSTR(BPS)"(%["#SRC"])     \n\t"     \

--  "lbu          %["#TEMP3"],   "#D"+"#D1"*"XSTR(BPS)"(%["#SRC"])     \n\t"     \

-+  "lbu      %[" #TEMP0 "],   " #A "+" #A1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t"     \

-+  "lbu      %[" #TEMP1 "],   " #B "+" #B1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t"     \

-+  "lbu      %[" #TEMP2 "],   " #C "+" #C1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t"     \

-+  "lbu      %[" #TEMP3 "],   " #D "+" #D1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t"     \

- 

- static void SimpleHFilter16(uint8_t* p, int stride, int thresh) {
-   int i;
-@@ -623,8 +623,8 @@
- // DST[A * BPS]     = TEMP0

- // DST[B + C * BPS] = TEMP1

- #define STORE_8_BYTES(TEMP0, TEMP1, A, B, C, DST)                              \

--  "usw          %["#TEMP0"],   "#A"*"XSTR(BPS)"(%["#DST"])         \n\t"       \

--  "usw          %["#TEMP1"],   "#B"+"#C"*"XSTR(BPS)"(%["#DST"])    \n\t"

-+  "usw    %[" #TEMP0 "],   " #A "*"XSTR(BPS)"(%[" #DST "])         \n\t"       \

-+  "usw    %[" #TEMP1 "],   " #B "+" #C "*"XSTR(BPS)"(%[" #DST "])  \n\t"

- 

- static void VE4(uint8_t* dst) {    // vertical

-   const uint8_t* top = dst - BPS;

-@@ -725,8 +725,8 @@
- // TEMP0 = SRC[A * BPS]

- // TEMP1 = SRC[B + C * BPS]

- #define LOAD_8_BYTES(TEMP0, TEMP1, A, B, C, SRC)                               \

--  "ulw          %["#TEMP0"],   "#A"*"XSTR(BPS)"(%["#SRC"])         \n\t"       \

--  "ulw          %["#TEMP1"],   "#B"+"#C"*"XSTR(BPS)"(%["#SRC"])    \n\t"

-+  "ulw    %[" #TEMP0 "],   " #A "*"XSTR(BPS)"(%[" #SRC "])         \n\t"       \

-+  "ulw    %[" #TEMP1 "],   " #B "+" #C "*"XSTR(BPS)"(%[" #SRC "])  \n\t"

- 

- static void LD4(uint8_t* dst) {   // Down-Left

-   int temp0, temp1, temp2, temp3, temp4;

-@@ -873,24 +873,24 @@
- #define CLIPPING(SIZE)                                                         \

-   "preceu.ph.qbl   %[temp2],   %[temp0]                  \n\t"                 \

-   "preceu.ph.qbr   %[temp0],   %[temp0]                  \n\t"                 \

--".if "#SIZE" == 8                                        \n\t"                 \

-+".if " #SIZE " == 8                                      \n\t"                 \

-   "preceu.ph.qbl   %[temp3],   %[temp1]                  \n\t"                 \

-   "preceu.ph.qbr   %[temp1],   %[temp1]                  \n\t"                 \

- ".endif                                                  \n\t"                 \

-   "addu.ph         %[temp2],   %[temp2],   %[dst_1]      \n\t"                 \

-   "addu.ph         %[temp0],   %[temp0],   %[dst_1]      \n\t"                 \

--".if "#SIZE" == 8                                        \n\t"                 \

-+".if " #SIZE " == 8                                      \n\t"                 \

-   "addu.ph         %[temp3],   %[temp3],   %[dst_1]      \n\t"                 \

-   "addu.ph         %[temp1],   %[temp1],   %[dst_1]      \n\t"                 \

- ".endif                                                  \n\t"                 \

-   "shll_s.ph       %[temp2],   %[temp2],   7             \n\t"                 \

-   "shll_s.ph       %[temp0],   %[temp0],   7             \n\t"                 \

--".if "#SIZE" == 8                                        \n\t"                 \

-+".if " #SIZE " == 8                                      \n\t"                 \

-   "shll_s.ph       %[temp3],   %[temp3],   7             \n\t"                 \

-   "shll_s.ph       %[temp1],   %[temp1],   7             \n\t"                 \

- ".endif                                                  \n\t"                 \

-   "precrqu_s.qb.ph %[temp0],   %[temp2],   %[temp0]      \n\t"                 \

--".if "#SIZE" == 8                                        \n\t"                 \

-+".if " #SIZE " == 8                                      \n\t"                 \

-   "precrqu_s.qb.ph %[temp1],   %[temp3],   %[temp1]      \n\t"                 \

- ".endif                                                  \n\t"

- 

-@@ -899,7 +899,7 @@
-   int dst_1 = ((int)(DST)[-1] << 16) + (DST)[-1];                              \

-   int temp0, temp1, temp2, temp3;                                              \

-   __asm__ volatile (                                                           \

--  ".if "#SIZE" < 8                                       \n\t"                 \

-+  ".if " #SIZE " < 8                                     \n\t"                 \

-     "ulw             %[temp0],   0(%[top])               \n\t"                 \

-     "subu.ph         %[dst_1],   %[dst_1],    %[top_1]   \n\t"                 \

-     CLIPPING(4)                                                                \

-@@ -911,7 +911,7 @@
-     CLIPPING(8)                                                                \

-     "usw             %[temp0],   0(%[dst])               \n\t"                 \

-     "usw             %[temp1],   4(%[dst])               \n\t"                 \

--  ".if "#SIZE" == 16                                     \n\t"                 \

-+  ".if " #SIZE " == 16                                   \n\t"                 \

-     "ulw             %[temp0],   8(%[top])               \n\t"                 \

-     "ulw             %[temp1],   12(%[top])              \n\t"                 \

-     CLIPPING(8)                                                                \

-diff --git a/Source/LibWebP/src/dsp/dsp.enc_mips32.c b/Source/LibWebP/src/dsp/dsp.enc_mips32.c
-index c5837f1..b50e08b 100644
---- a/Source/LibWebP/src/dsp/dsp.enc_mips32.c
-+++ b/Source/LibWebP/src/dsp/dsp.enc_mips32.c
-@@ -31,26 +31,26 @@
- // TEMP0..TEMP3 - registers for corresponding tmp elements

- // TEMP4..TEMP5 - temporary registers

- #define VERTICAL_PASS(A, B, C, D, TEMP4, TEMP0, TEMP1, TEMP2, TEMP3)        \

--  "lh      %[temp16],      "#A"(%[temp20])                 \n\t"            \

--  "lh      %[temp18],      "#B"(%[temp20])                 \n\t"            \

--  "lh      %[temp17],      "#C"(%[temp20])                 \n\t"            \

--  "lh      %[temp19],      "#D"(%[temp20])                 \n\t"            \

--  "addu    %["#TEMP4"],    %[temp16],      %[temp18]       \n\t"            \

--  "subu    %[temp16],      %[temp16],      %[temp18]       \n\t"            \

--  "mul     %["#TEMP0"],    %[temp17],      %[kC2]          \n\t"            \

--  "mul     %[temp18],      %[temp19],      %[kC1]          \n\t"            \

--  "mul     %[temp17],      %[temp17],      %[kC1]          \n\t"            \

--  "mul     %[temp19],      %[temp19],      %[kC2]          \n\t"            \

--  "sra     %["#TEMP0"],    %["#TEMP0"],    16              \n\n"            \

--  "sra     %[temp18],      %[temp18],      16              \n\n"            \

--  "sra     %[temp17],      %[temp17],      16              \n\n"            \

--  "sra     %[temp19],      %[temp19],      16              \n\n"            \

--  "subu    %["#TEMP2"],    %["#TEMP0"],    %[temp18]       \n\t"            \

--  "addu    %["#TEMP3"],    %[temp17],      %[temp19]       \n\t"            \

--  "addu    %["#TEMP0"],    %["#TEMP4"],    %["#TEMP3"]     \n\t"            \

--  "addu    %["#TEMP1"],    %[temp16],      %["#TEMP2"]     \n\t"            \

--  "subu    %["#TEMP2"],    %[temp16],      %["#TEMP2"]     \n\t"            \

--  "subu    %["#TEMP3"],    %["#TEMP4"],    %["#TEMP3"]     \n\t"

-+  "lh      %[temp16],      " #A "(%[temp20])                 \n\t"          \

-+  "lh      %[temp18],      " #B "(%[temp20])                 \n\t"          \

-+  "lh      %[temp17],      " #C "(%[temp20])                 \n\t"          \

-+  "lh      %[temp19],      " #D "(%[temp20])                 \n\t"          \

-+  "addu    %[" #TEMP4 "],    %[temp16],      %[temp18]       \n\t"          \

-+  "subu    %[temp16],      %[temp16],      %[temp18]         \n\t"          \

-+  "mul     %[" #TEMP0 "],    %[temp17],      %[kC2]          \n\t"          \

-+  "mul     %[temp18],      %[temp19],      %[kC1]            \n\t"          \

-+  "mul     %[temp17],      %[temp17],      %[kC1]            \n\t"          \

-+  "mul     %[temp19],      %[temp19],      %[kC2]            \n\t"          \

-+  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    16            \n\n"          \

-+  "sra     %[temp18],      %[temp18],      16                \n\n"          \

-+  "sra     %[temp17],      %[temp17],      16                \n\n"          \

-+  "sra     %[temp19],      %[temp19],      16                \n\n"          \

-+  "subu    %[" #TEMP2 "],    %[" #TEMP0 "],    %[temp18]     \n\t"          \

-+  "addu    %[" #TEMP3 "],    %[temp17],      %[temp19]       \n\t"          \

-+  "addu    %[" #TEMP0 "],    %[" #TEMP4 "],    %[" #TEMP3 "] \n\t"          \

-+  "addu    %[" #TEMP1 "],    %[temp16],      %[" #TEMP2 "]   \n\t"          \

-+  "subu    %[" #TEMP2 "],    %[temp16],      %[" #TEMP2 "]   \n\t"          \

-+  "subu    %[" #TEMP3 "],    %[" #TEMP4 "],    %[" #TEMP3 "] \n\t"

- 

- // macro for one horizontal pass in ITransformOne

- // MUL and STORE macros inlined

-@@ -58,59 +58,59 @@
- // temp0..temp15 holds tmp[0]..tmp[15]

- // A - offset in bytes to load from ref and store to dst buffer

- // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements

--#define HORIZONTAL_PASS(A, TEMP0, TEMP4, TEMP8, TEMP12)                     \

--  "addiu   %["#TEMP0"],    %["#TEMP0"],    4               \n\t"            \

--  "addu    %[temp16],      %["#TEMP0"],    %["#TEMP8"]     \n\t"            \

--  "subu    %[temp17],      %["#TEMP0"],    %["#TEMP8"]     \n\t"            \

--  "mul     %["#TEMP0"],    %["#TEMP4"],    %[kC2]          \n\t"            \

--  "mul     %["#TEMP8"],    %["#TEMP12"],   %[kC1]          \n\t"            \

--  "mul     %["#TEMP4"],    %["#TEMP4"],    %[kC1]          \n\t"            \

--  "mul     %["#TEMP12"],   %["#TEMP12"],   %[kC2]          \n\t"            \

--  "sra     %["#TEMP0"],    %["#TEMP0"],    16              \n\t"            \

--  "sra     %["#TEMP8"],    %["#TEMP8"],    16              \n\t"            \

--  "sra     %["#TEMP4"],    %["#TEMP4"],    16              \n\t"            \

--  "sra     %["#TEMP12"],   %["#TEMP12"],   16              \n\t"            \

--  "subu    %[temp18],      %["#TEMP0"],    %["#TEMP8"]     \n\t"            \

--  "addu    %[temp19],      %["#TEMP4"],    %["#TEMP12"]    \n\t"            \

--  "addu    %["#TEMP0"],    %[temp16],      %[temp19]       \n\t"            \

--  "addu    %["#TEMP4"],    %[temp17],      %[temp18]       \n\t"            \

--  "subu    %["#TEMP8"],    %[temp17],      %[temp18]       \n\t"            \

--  "subu    %["#TEMP12"],   %[temp16],      %[temp19]       \n\t"            \

--  "lw      %[temp20],      0(%[args])                      \n\t"            \

--  "sra     %["#TEMP0"],    %["#TEMP0"],    3               \n\t"            \

--  "sra     %["#TEMP4"],    %["#TEMP4"],    3               \n\t"            \

--  "sra     %["#TEMP8"],    %["#TEMP8"],    3               \n\t"            \

--  "sra     %["#TEMP12"],   %["#TEMP12"],   3               \n\t"            \

--  "lbu     %[temp16],      0+"XSTR(BPS)"*"#A"(%[temp20])   \n\t"            \

--  "lbu     %[temp17],      1+"XSTR(BPS)"*"#A"(%[temp20])   \n\t"            \

--  "lbu     %[temp18],      2+"XSTR(BPS)"*"#A"(%[temp20])   \n\t"            \

--  "lbu     %[temp19],      3+"XSTR(BPS)"*"#A"(%[temp20])   \n\t"            \

--  "addu    %["#TEMP0"],    %[temp16],      %["#TEMP0"]     \n\t"            \

--  "addu    %["#TEMP4"],    %[temp17],      %["#TEMP4"]     \n\t"            \

--  "addu    %["#TEMP8"],    %[temp18],      %["#TEMP8"]     \n\t"            \

--  "addu    %["#TEMP12"],   %[temp19],      %["#TEMP12"]    \n\t"            \

--  "slt     %[temp16],      %["#TEMP0"],    $zero           \n\t"            \

--  "slt     %[temp17],      %["#TEMP4"],    $zero           \n\t"            \

--  "slt     %[temp18],      %["#TEMP8"],    $zero           \n\t"            \

--  "slt     %[temp19],      %["#TEMP12"],   $zero           \n\t"            \

--  "movn    %["#TEMP0"],    $zero,          %[temp16]       \n\t"            \

--  "movn    %["#TEMP4"],    $zero,          %[temp17]       \n\t"            \

--  "movn    %["#TEMP8"],    $zero,          %[temp18]       \n\t"            \

--  "movn    %["#TEMP12"],   $zero,          %[temp19]       \n\t"            \

--  "addiu   %[temp20],      $zero,          255             \n\t"            \

--  "slt     %[temp16],      %["#TEMP0"],    %[temp20]       \n\t"            \

--  "slt     %[temp17],      %["#TEMP4"],    %[temp20]       \n\t"            \

--  "slt     %[temp18],      %["#TEMP8"],    %[temp20]       \n\t"            \

--  "slt     %[temp19],      %["#TEMP12"],   %[temp20]       \n\t"            \

--  "movz    %["#TEMP0"],    %[temp20],      %[temp16]       \n\t"            \

--  "movz    %["#TEMP4"],    %[temp20],      %[temp17]       \n\t"            \

--  "lw      %[temp16],      8(%[args])                      \n\t"            \

--  "movz    %["#TEMP8"],    %[temp20],      %[temp18]       \n\t"            \

--  "movz    %["#TEMP12"],   %[temp20],      %[temp19]       \n\t"            \

--  "sb      %["#TEMP0"],    0+"XSTR(BPS)"*"#A"(%[temp16])   \n\t"            \

--  "sb      %["#TEMP4"],    1+"XSTR(BPS)"*"#A"(%[temp16])   \n\t"            \

--  "sb      %["#TEMP8"],    2+"XSTR(BPS)"*"#A"(%[temp16])   \n\t"            \

--  "sb      %["#TEMP12"],   3+"XSTR(BPS)"*"#A"(%[temp16])   \n\t"

-+#define HORIZONTAL_PASS(A, TEMP0, TEMP4, TEMP8, TEMP12)                       \

-+  "addiu   %[" #TEMP0 "],    %[" #TEMP0 "],    4             \n\t"            \

-+  "addu    %[temp16],      %[" #TEMP0 "],    %[" #TEMP8 "]   \n\t"            \

-+  "subu    %[temp17],      %[" #TEMP0 "],    %[" #TEMP8 "]   \n\t"            \

-+  "mul     %[" #TEMP0 "],    %[" #TEMP4 "],    %[kC2]        \n\t"            \

-+  "mul     %[" #TEMP8 "],    %[" #TEMP12 "],   %[kC1]        \n\t"            \

-+  "mul     %[" #TEMP4 "],    %[" #TEMP4 "],    %[kC1]        \n\t"            \

-+  "mul     %[" #TEMP12 "],   %[" #TEMP12 "],   %[kC2]        \n\t"            \

-+  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    16            \n\t"            \

-+  "sra     %[" #TEMP8 "],    %[" #TEMP8 "],    16            \n\t"            \

-+  "sra     %[" #TEMP4 "],    %[" #TEMP4 "],    16            \n\t"            \

-+  "sra     %[" #TEMP12 "],   %[" #TEMP12 "],   16            \n\t"            \

-+  "subu    %[temp18],      %[" #TEMP0 "],    %[" #TEMP8 "]   \n\t"            \

-+  "addu    %[temp19],      %[" #TEMP4 "],    %[" #TEMP12 "]  \n\t"            \

-+  "addu    %[" #TEMP0 "],    %[temp16],      %[temp19]       \n\t"            \

-+  "addu    %[" #TEMP4 "],    %[temp17],      %[temp18]       \n\t"            \

-+  "subu    %[" #TEMP8 "],    %[temp17],      %[temp18]       \n\t"            \

-+  "subu    %[" #TEMP12 "],   %[temp16],      %[temp19]       \n\t"            \

-+  "lw      %[temp20],      0(%[args])                        \n\t"            \

-+  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    3             \n\t"            \

-+  "sra     %[" #TEMP4 "],    %[" #TEMP4 "],    3             \n\t"            \

-+  "sra     %[" #TEMP8 "],    %[" #TEMP8 "],    3             \n\t"            \

-+  "sra     %[" #TEMP12 "],   %[" #TEMP12 "],   3             \n\t"            \

-+  "lbu     %[temp16],      0+"XSTR(BPS)"*" #A "(%[temp20])   \n\t"            \

-+  "lbu     %[temp17],      1+"XSTR(BPS)"*" #A "(%[temp20])   \n\t"            \

-+  "lbu     %[temp18],      2+"XSTR(BPS)"*" #A "(%[temp20])   \n\t"            \

-+  "lbu     %[temp19],      3+"XSTR(BPS)"*" #A "(%[temp20])   \n\t"            \

-+  "addu    %[" #TEMP0 "],    %[temp16],      %[" #TEMP0 "]   \n\t"            \

-+  "addu    %[" #TEMP4 "],    %[temp17],      %[" #TEMP4 "]   \n\t"            \

-+  "addu    %[" #TEMP8 "],    %[temp18],      %[" #TEMP8 "]   \n\t"            \

-+  "addu    %[" #TEMP12 "],   %[temp19],      %[" #TEMP12 "]  \n\t"            \

-+  "slt     %[temp16],      %[" #TEMP0 "],    $zero           \n\t"            \

-+  "slt     %[temp17],      %[" #TEMP4 "],    $zero           \n\t"            \

-+  "slt     %[temp18],      %[" #TEMP8 "],    $zero           \n\t"            \

-+  "slt     %[temp19],      %[" #TEMP12 "],   $zero           \n\t"            \

-+  "movn    %[" #TEMP0 "],    $zero,          %[temp16]       \n\t"            \

-+  "movn    %[" #TEMP4 "],    $zero,          %[temp17]       \n\t"            \

-+  "movn    %[" #TEMP8 "],    $zero,          %[temp18]       \n\t"            \

-+  "movn    %[" #TEMP12 "],   $zero,          %[temp19]       \n\t"            \

-+  "addiu   %[temp20],      $zero,          255               \n\t"            \

-+  "slt     %[temp16],      %[" #TEMP0 "],    %[temp20]       \n\t"            \

-+  "slt     %[temp17],      %[" #TEMP4 "],    %[temp20]       \n\t"            \

-+  "slt     %[temp18],      %[" #TEMP8 "],    %[temp20]       \n\t"            \

-+  "slt     %[temp19],      %[" #TEMP12 "],   %[temp20]       \n\t"            \

-+  "movz    %[" #TEMP0 "],    %[temp20],      %[temp16]       \n\t"            \

-+  "movz    %[" #TEMP4 "],    %[temp20],      %[temp17]       \n\t"            \

-+  "lw      %[temp16],      8(%[args])                        \n\t"            \

-+  "movz    %[" #TEMP8 "],    %[temp20],      %[temp18]       \n\t"            \

-+  "movz    %[" #TEMP12 "],   %[temp20],      %[temp19]       \n\t"            \

-+  "sb      %[" #TEMP0 "],    0+"XSTR(BPS)"*" #A "(%[temp16]) \n\t"            \

-+  "sb      %[" #TEMP4 "],    1+"XSTR(BPS)"*" #A "(%[temp16]) \n\t"            \

-+  "sb      %[" #TEMP8 "],    2+"XSTR(BPS)"*" #A "(%[temp16]) \n\t"            \

-+  "sb      %[" #TEMP12 "],   3+"XSTR(BPS)"*" #A "(%[temp16]) \n\t"

- 

- // Does one or two inverse transforms.

- static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in,

-@@ -161,9 +161,9 @@
- // K - offset in bytes (kZigzag[n] * 4)

- // N - offset in bytes (n * 2)

- #define QUANTIZE_ONE(J, K, N)                                               \

--  "lh           %[temp0],       "#J"(%[ppin])                       \n\t"   \

--  "lhu          %[temp1],       "#J"(%[ppsharpen])                  \n\t"   \

--  "lw           %[temp2],       "#K"(%[ppzthresh])                  \n\t"   \

-+  "lh           %[temp0],       " #J "(%[ppin])                     \n\t"   \

-+  "lhu          %[temp1],       " #J "(%[ppsharpen])                \n\t"   \

-+  "lw           %[temp2],       " #K "(%[ppzthresh])                \n\t"   \

-   "sra          %[sign],        %[temp0],           15              \n\t"   \

-   "xor          %[coeff],       %[temp0],           %[sign]         \n\t"   \

-   "subu         %[coeff],       %[coeff],           %[sign]         \n\t"   \

-@@ -172,9 +172,9 @@
-   "addiu        %[temp5],       $zero,              0               \n\t"   \

-   "addiu        %[level],       $zero,              0               \n\t"   \

-   "beqz         %[temp4],       2f                                  \n\t"   \

--  "lhu          %[temp1],       "#J"(%[ppiq])                       \n\t"   \

--  "lw           %[temp2],       "#K"(%[ppbias])                     \n\t"   \

--  "lhu          %[temp3],       "#J"(%[ppq])                        \n\t"   \

-+  "lhu          %[temp1],       " #J "(%[ppiq])                     \n\t"   \

-+  "lw           %[temp2],       " #K "(%[ppbias])                   \n\t"   \

-+  "lhu          %[temp3],       " #J "(%[ppq])                      \n\t"   \

-   "mul          %[level],       %[coeff],           %[temp1]        \n\t"   \

-   "addu         %[level],       %[level],           %[temp2]        \n\t"   \

-   "sra          %[level],       %[level],           17              \n\t"   \

-@@ -184,8 +184,8 @@
-   "subu         %[level],       %[level],           %[sign]         \n\t"   \

-   "mul          %[temp5],       %[level],           %[temp3]        \n\t"   \

- "2:                                                                 \n\t"   \

--  "sh           %[temp5],       "#J"(%[ppin])                       \n\t"   \

--  "sh           %[level],       "#N"(%[pout])                       \n\t"

-+  "sh           %[temp5],       " #J "(%[ppin])                     \n\t"   \

-+  "sh           %[level],       " #N "(%[pout])                     \n\t"

- 

- static int QuantizeBlock(int16_t in[16], int16_t out[16],

-                          const VP8Matrix* const mtx) {

-@@ -253,39 +253,39 @@
- // A - offset in bytes to load from a and b buffers

- // E..H - offsets in bytes to store first results to tmp buffer

- // E1..H1 - offsets in bytes to store second results to tmp buffer

--#define HORIZONTAL_PASS(A, E, F, G, H, E1, F1, G1, H1)              \

--  "lbu    %[temp0],  0+"XSTR(BPS)"*"#A"(%[a])  \n\t"                \

--  "lbu    %[temp1],  1+"XSTR(BPS)"*"#A"(%[a])  \n\t"                \

--  "lbu    %[temp2],  2+"XSTR(BPS)"*"#A"(%[a])  \n\t"                \

--  "lbu    %[temp3],  3+"XSTR(BPS)"*"#A"(%[a])  \n\t"                \

--  "lbu    %[temp4],  0+"XSTR(BPS)"*"#A"(%[b])  \n\t"                \

--  "lbu    %[temp5],  1+"XSTR(BPS)"*"#A"(%[b])  \n\t"                \

--  "lbu    %[temp6],  2+"XSTR(BPS)"*"#A"(%[b])  \n\t"                \

--  "lbu    %[temp7],  3+"XSTR(BPS)"*"#A"(%[b])  \n\t"                \

--  "addu   %[temp8],  %[temp0],    %[temp2]     \n\t"                \

--  "subu   %[temp0],  %[temp0],    %[temp2]     \n\t"                \

--  "addu   %[temp2],  %[temp1],    %[temp3]     \n\t"                \

--  "subu   %[temp1],  %[temp1],    %[temp3]     \n\t"                \

--  "addu   %[temp3],  %[temp4],    %[temp6]     \n\t"                \

--  "subu   %[temp4],  %[temp4],    %[temp6]     \n\t"                \

--  "addu   %[temp6],  %[temp5],    %[temp7]     \n\t"                \

--  "subu   %[temp5],  %[temp5],    %[temp7]     \n\t"                \

--  "addu   %[temp7],  %[temp8],    %[temp2]     \n\t"                \

--  "subu   %[temp2],  %[temp8],    %[temp2]     \n\t"                \

--  "addu   %[temp8],  %[temp0],    %[temp1]     \n\t"                \

--  "subu   %[temp0],  %[temp0],    %[temp1]     \n\t"                \

--  "addu   %[temp1],  %[temp3],    %[temp6]     \n\t"                \

--  "subu   %[temp3],  %[temp3],    %[temp6]     \n\t"                \

--  "addu   %[temp6],  %[temp4],    %[temp5]     \n\t"                \

--  "subu   %[temp4],  %[temp4],    %[temp5]     \n\t"                \

--  "sw     %[temp7],  "#E"(%[tmp])              \n\t"                \

--  "sw     %[temp2],  "#H"(%[tmp])              \n\t"                \

--  "sw     %[temp8],  "#F"(%[tmp])              \n\t"                \

--  "sw     %[temp0],  "#G"(%[tmp])              \n\t"                \

--  "sw     %[temp1],  "#E1"(%[tmp])             \n\t"                \

--  "sw     %[temp3],  "#H1"(%[tmp])             \n\t"                \

--  "sw     %[temp6],  "#F1"(%[tmp])             \n\t"                \

--  "sw     %[temp4],  "#G1"(%[tmp])             \n\t"

-+#define HORIZONTAL_PASS(A, E, F, G, H, E1, F1, G1, H1)                \

-+  "lbu    %[temp0],  0+"XSTR(BPS)"*" #A "(%[a])  \n\t"                \

-+  "lbu    %[temp1],  1+"XSTR(BPS)"*" #A "(%[a])  \n\t"                \

-+  "lbu    %[temp2],  2+"XSTR(BPS)"*" #A "(%[a])  \n\t"                \

-+  "lbu    %[temp3],  3+"XSTR(BPS)"*" #A "(%[a])  \n\t"                \

-+  "lbu    %[temp4],  0+"XSTR(BPS)"*" #A "(%[b])  \n\t"                \

-+  "lbu    %[temp5],  1+"XSTR(BPS)"*" #A "(%[b])  \n\t"                \

-+  "lbu    %[temp6],  2+"XSTR(BPS)"*" #A "(%[b])  \n\t"                \

-+  "lbu    %[temp7],  3+"XSTR(BPS)"*" #A "(%[b])  \n\t"                \

-+  "addu   %[temp8],  %[temp0],    %[temp2]       \n\t"                \

-+  "subu   %[temp0],  %[temp0],    %[temp2]       \n\t"                \

-+  "addu   %[temp2],  %[temp1],    %[temp3]       \n\t"                \

-+  "subu   %[temp1],  %[temp1],    %[temp3]       \n\t"                \

-+  "addu   %[temp3],  %[temp4],    %[temp6]       \n\t"                \

-+  "subu   %[temp4],  %[temp4],    %[temp6]       \n\t"                \

-+  "addu   %[temp6],  %[temp5],    %[temp7]       \n\t"                \

-+  "subu   %[temp5],  %[temp5],    %[temp7]       \n\t"                \

-+  "addu   %[temp7],  %[temp8],    %[temp2]       \n\t"                \

-+  "subu   %[temp2],  %[temp8],    %[temp2]       \n\t"                \

-+  "addu   %[temp8],  %[temp0],    %[temp1]       \n\t"                \

-+  "subu   %[temp0],  %[temp0],    %[temp1]       \n\t"                \

-+  "addu   %[temp1],  %[temp3],    %[temp6]       \n\t"                \

-+  "subu   %[temp3],  %[temp3],    %[temp6]       \n\t"                \

-+  "addu   %[temp6],  %[temp4],    %[temp5]       \n\t"                \

-+  "subu   %[temp4],  %[temp4],    %[temp5]       \n\t"                \

-+  "sw     %[temp7],  " #E "(%[tmp])              \n\t"                \

-+  "sw     %[temp2],  " #H "(%[tmp])              \n\t"                \

-+  "sw     %[temp8],  " #F "(%[tmp])              \n\t"                \

-+  "sw     %[temp0],  " #G "(%[tmp])              \n\t"                \

-+  "sw     %[temp1],  " #E1 "(%[tmp])             \n\t"                \

-+  "sw     %[temp3],  " #H1 "(%[tmp])             \n\t"                \

-+  "sw     %[temp6],  " #F1 "(%[tmp])             \n\t"                \

-+  "sw     %[temp4],  " #G1 "(%[tmp])             \n\t"

- 

- // macro for one vertical pass in Disto4x4 (TTransform)

- // two calls of function TTransform are merged into single one

-@@ -300,10 +300,10 @@
- // A1..D1 - offsets in bytes to load second results from tmp buffer

- // E..H - offsets in bytes to load from w buffer

- #define VERTICAL_PASS(A, B, C, D, A1, B1, C1, D1, E, F, G, H)     \

--  "lw     %[temp0],  "#A1"(%[tmp])           \n\t"                \

--  "lw     %[temp1],  "#C1"(%[tmp])           \n\t"                \

--  "lw     %[temp2],  "#B1"(%[tmp])           \n\t"                \

--  "lw     %[temp3],  "#D1"(%[tmp])           \n\t"                \

-+  "lw     %[temp0],  " #A1 "(%[tmp])         \n\t"                \

-+  "lw     %[temp1],  " #C1 "(%[tmp])         \n\t"                \

-+  "lw     %[temp2],  " #B1 "(%[tmp])         \n\t"                \

-+  "lw     %[temp3],  " #D1 "(%[tmp])         \n\t"                \

-   "addu   %[temp8],  %[temp0],    %[temp1]   \n\t"                \

-   "subu   %[temp0],  %[temp0],    %[temp1]   \n\t"                \

-   "addu   %[temp1],  %[temp2],    %[temp3]   \n\t"                \

-@@ -324,18 +324,18 @@
-   "subu   %[temp1],  %[temp1],    %[temp5]   \n\t"                \

-   "subu   %[temp0],  %[temp0],    %[temp6]   \n\t"                \

-   "subu   %[temp8],  %[temp8],    %[temp7]   \n\t"                \

--  "lhu    %[temp4],  "#E"(%[w])              \n\t"                \

--  "lhu    %[temp5],  "#F"(%[w])              \n\t"                \

--  "lhu    %[temp6],  "#G"(%[w])              \n\t"                \

--  "lhu    %[temp7],  "#H"(%[w])              \n\t"                \

-+  "lhu    %[temp4],  " #E "(%[w])            \n\t"                \

-+  "lhu    %[temp5],  " #F "(%[w])            \n\t"                \

-+  "lhu    %[temp6],  " #G "(%[w])            \n\t"                \

-+  "lhu    %[temp7],  " #H "(%[w])            \n\t"                \

-   "madd   %[temp4],  %[temp3]                \n\t"                \

-   "madd   %[temp5],  %[temp1]                \n\t"                \

-   "madd   %[temp6],  %[temp0]                \n\t"                \

-   "madd   %[temp7],  %[temp8]                \n\t"                \

--  "lw     %[temp0],  "#A"(%[tmp])            \n\t"                \

--  "lw     %[temp1],  "#C"(%[tmp])            \n\t"                \

--  "lw     %[temp2],  "#B"(%[tmp])            \n\t"                \

--  "lw     %[temp3],  "#D"(%[tmp])            \n\t"                \

-+  "lw     %[temp0],  " #A "(%[tmp])          \n\t"                \

-+  "lw     %[temp1],  " #C "(%[tmp])          \n\t"                \

-+  "lw     %[temp2],  " #B "(%[tmp])          \n\t"                \

-+  "lw     %[temp3],  " #D "(%[tmp])          \n\t"                \

-   "addu   %[temp8],  %[temp0],    %[temp1]   \n\t"                \

-   "subu   %[temp0],  %[temp0],    %[temp1]   \n\t"                \

-   "addu   %[temp1],  %[temp2],    %[temp3]   \n\t"                \

-@@ -412,71 +412,71 @@
- // temp0..temp15 holds tmp[0]..tmp[15]

- // A - offset in bytes to load from src and ref buffers

- // TEMP0..TEMP3 - registers for corresponding tmp elements

--#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3)            \

--  "lw     %["#TEMP1"],  0(%[args])                       \n\t"    \

--  "lw     %["#TEMP2"],  4(%[args])                       \n\t"    \

--  "lbu    %[temp16],    0+"XSTR(BPS)"*"#A"(%["#TEMP1"])  \n\t"    \

--  "lbu    %[temp17],    0+"XSTR(BPS)"*"#A"(%["#TEMP2"])  \n\t"    \

--  "lbu    %[temp18],    1+"XSTR(BPS)"*"#A"(%["#TEMP1"])  \n\t"    \

--  "lbu    %[temp19],    1+"XSTR(BPS)"*"#A"(%["#TEMP2"])  \n\t"    \

--  "subu   %[temp20],    %[temp16],    %[temp17]          \n\t"    \

--  "lbu    %[temp16],    2+"XSTR(BPS)"*"#A"(%["#TEMP1"])  \n\t"    \

--  "lbu    %[temp17],    2+"XSTR(BPS)"*"#A"(%["#TEMP2"])  \n\t"    \

--  "subu   %["#TEMP0"],  %[temp18],    %[temp19]          \n\t"    \

--  "lbu    %[temp18],    3+"XSTR(BPS)"*"#A"(%["#TEMP1"])  \n\t"    \

--  "lbu    %[temp19],    3+"XSTR(BPS)"*"#A"(%["#TEMP2"])  \n\t"    \

--  "subu   %["#TEMP1"],  %[temp16],    %[temp17]          \n\t"    \

--  "subu   %["#TEMP2"],  %[temp18],    %[temp19]          \n\t"    \

--  "addu   %["#TEMP3"],  %[temp20],    %["#TEMP2"]        \n\t"    \

--  "subu   %["#TEMP2"],  %[temp20],    %["#TEMP2"]        \n\t"    \

--  "addu   %[temp20],    %["#TEMP0"],  %["#TEMP1"]        \n\t"    \

--  "subu   %["#TEMP0"],  %["#TEMP0"],  %["#TEMP1"]        \n\t"    \

--  "mul    %[temp16],    %["#TEMP2"],  %[c5352]           \n\t"    \

--  "mul    %[temp17],    %["#TEMP2"],  %[c2217]           \n\t"    \

--  "mul    %[temp18],    %["#TEMP0"],  %[c5352]           \n\t"    \

--  "mul    %[temp19],    %["#TEMP0"],  %[c2217]           \n\t"    \

--  "addu   %["#TEMP1"],  %["#TEMP3"],  %[temp20]          \n\t"    \

--  "subu   %[temp20],    %["#TEMP3"],  %[temp20]          \n\t"    \

--  "sll    %["#TEMP0"],  %["#TEMP1"],  3                  \n\t"    \

--  "sll    %["#TEMP2"],  %[temp20],    3                  \n\t"    \

--  "addiu  %[temp16],    %[temp16],    1812               \n\t"    \

--  "addiu  %[temp17],    %[temp17],    937                \n\t"    \

--  "addu   %[temp16],    %[temp16],    %[temp19]          \n\t"    \

--  "subu   %[temp17],    %[temp17],    %[temp18]          \n\t"    \

--  "sra    %["#TEMP1"],  %[temp16],    9                  \n\t"    \

--  "sra    %["#TEMP3"],  %[temp17],    9                  \n\t"

-+#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3)                \

-+  "lw     %[" #TEMP1 "],  0(%[args])                         \n\t"    \

-+  "lw     %[" #TEMP2 "],  4(%[args])                         \n\t"    \

-+  "lbu    %[temp16],    0+"XSTR(BPS)"*" #A "(%[" #TEMP1 "])  \n\t"    \

-+  "lbu    %[temp17],    0+"XSTR(BPS)"*" #A "(%[" #TEMP2 "])  \n\t"    \

-+  "lbu    %[temp18],    1+"XSTR(BPS)"*" #A "(%[" #TEMP1 "])  \n\t"    \

-+  "lbu    %[temp19],    1+"XSTR(BPS)"*" #A "(%[" #TEMP2 "])  \n\t"    \

-+  "subu   %[temp20],    %[temp16],    %[temp17]              \n\t"    \

-+  "lbu    %[temp16],    2+"XSTR(BPS)"*" #A "(%[" #TEMP1 "])  \n\t"    \

-+  "lbu    %[temp17],    2+"XSTR(BPS)"*" #A "(%[" #TEMP2 "])  \n\t"    \

-+  "subu   %[" #TEMP0 "],  %[temp18],    %[temp19]            \n\t"    \

-+  "lbu    %[temp18],    3+"XSTR(BPS)"*" #A "(%[" #TEMP1 "])  \n\t"    \

-+  "lbu    %[temp19],    3+"XSTR(BPS)"*" #A "(%[" #TEMP2 "])  \n\t"    \

-+  "subu   %[" #TEMP1 "],  %[temp16],    %[temp17]            \n\t"    \

-+  "subu   %[" #TEMP2 "],  %[temp18],    %[temp19]            \n\t"    \

-+  "addu   %[" #TEMP3 "],  %[temp20],    %[" #TEMP2 "]        \n\t"    \

-+  "subu   %[" #TEMP2 "],  %[temp20],    %[" #TEMP2 "]        \n\t"    \

-+  "addu   %[temp20],    %[" #TEMP0 "],  %[" #TEMP1 "]        \n\t"    \

-+  "subu   %[" #TEMP0 "],  %[" #TEMP0 "],  %[" #TEMP1 "]      \n\t"    \

-+  "mul    %[temp16],    %[" #TEMP2 "],  %[c5352]             \n\t"    \

-+  "mul    %[temp17],    %[" #TEMP2 "],  %[c2217]             \n\t"    \

-+  "mul    %[temp18],    %[" #TEMP0 "],  %[c5352]             \n\t"    \

-+  "mul    %[temp19],    %[" #TEMP0 "],  %[c2217]             \n\t"    \

-+  "addu   %[" #TEMP1 "],  %[" #TEMP3 "],  %[temp20]          \n\t"    \

-+  "subu   %[temp20],    %[" #TEMP3 "],  %[temp20]            \n\t"    \

-+  "sll    %[" #TEMP0 "],  %[" #TEMP1 "],  3                  \n\t"    \

-+  "sll    %[" #TEMP2 "],  %[temp20],    3                    \n\t"    \

-+  "addiu  %[temp16],    %[temp16],    1812                   \n\t"    \

-+  "addiu  %[temp17],    %[temp17],    937                    \n\t"    \

-+  "addu   %[temp16],    %[temp16],    %[temp19]              \n\t"    \

-+  "subu   %[temp17],    %[temp17],    %[temp18]              \n\t"    \

-+  "sra    %[" #TEMP1 "],  %[temp16],    9                    \n\t"    \

-+  "sra    %[" #TEMP3 "],  %[temp17],    9                    \n\t"

- 

- // macro for one vertical pass in FTransform

- // temp0..temp15 holds tmp[0]..tmp[15]

- // A..D - offsets in bytes to store to out buffer

- // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements

--#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12)  \

--  "addu   %[temp16],    %["#TEMP0"],  %["#TEMP12"]     \n\t"    \

--  "subu   %[temp19],    %["#TEMP0"],  %["#TEMP12"]     \n\t"    \

--  "addu   %[temp17],    %["#TEMP4"],  %["#TEMP8"]      \n\t"    \

--  "subu   %[temp18],    %["#TEMP4"],  %["#TEMP8"]      \n\t"    \

--  "mul    %["#TEMP8"],  %[temp19],    %[c2217]         \n\t"    \

--  "mul    %["#TEMP12"], %[temp18],    %[c2217]         \n\t"    \

--  "mul    %["#TEMP4"],  %[temp19],    %[c5352]         \n\t"    \

--  "mul    %[temp18],    %[temp18],    %[c5352]         \n\t"    \

--  "addiu  %[temp16],    %[temp16],    7                \n\t"    \

--  "addu   %["#TEMP0"],  %[temp16],    %[temp17]        \n\t"    \

--  "sra    %["#TEMP0"],  %["#TEMP0"],  4                \n\t"    \

--  "addu   %["#TEMP12"], %["#TEMP12"], %["#TEMP4"]      \n\t"    \

--  "subu   %["#TEMP4"],  %[temp16],    %[temp17]        \n\t"    \

--  "sra    %["#TEMP4"],  %["#TEMP4"],  4                \n\t"    \

--  "addiu  %["#TEMP8"],  %["#TEMP8"],  30000            \n\t"    \

--  "addiu  %["#TEMP12"], %["#TEMP12"], 12000            \n\t"    \

--  "addiu  %["#TEMP8"],  %["#TEMP8"],  21000            \n\t"    \

--  "subu   %["#TEMP8"],  %["#TEMP8"],  %[temp18]        \n\t"    \

--  "sra    %["#TEMP12"], %["#TEMP12"], 16               \n\t"    \

--  "sra    %["#TEMP8"],  %["#TEMP8"],  16               \n\t"    \

--  "addiu  %[temp16],    %["#TEMP12"], 1                \n\t"    \

--  "movn   %["#TEMP12"], %[temp16],    %[temp19]        \n\t"    \

--  "sh     %["#TEMP0"],  "#A"(%[temp20])                \n\t"    \

--  "sh     %["#TEMP4"],  "#C"(%[temp20])                \n\t"    \

--  "sh     %["#TEMP8"],  "#D"(%[temp20])                \n\t"    \

--  "sh     %["#TEMP12"], "#B"(%[temp20])                \n\t"

-+#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12)    \

-+  "addu   %[temp16],    %[" #TEMP0 "],  %[" #TEMP12 "]   \n\t"    \

-+  "subu   %[temp19],    %[" #TEMP0 "],  %[" #TEMP12 "]   \n\t"    \

-+  "addu   %[temp17],    %[" #TEMP4 "],  %[" #TEMP8 "]    \n\t"    \

-+  "subu   %[temp18],    %[" #TEMP4 "],  %[" #TEMP8 "]    \n\t"    \

-+  "mul    %[" #TEMP8 "],  %[temp19],    %[c2217]         \n\t"    \

-+  "mul    %[" #TEMP12 "], %[temp18],    %[c2217]         \n\t"    \

-+  "mul    %[" #TEMP4 "],  %[temp19],    %[c5352]         \n\t"    \

-+  "mul    %[temp18],    %[temp18],    %[c5352]           \n\t"    \

-+  "addiu  %[temp16],    %[temp16],    7                  \n\t"    \

-+  "addu   %[" #TEMP0 "],  %[temp16],    %[temp17]        \n\t"    \

-+  "sra    %[" #TEMP0 "],  %[" #TEMP0 "],  4              \n\t"    \

-+  "addu   %[" #TEMP12 "], %[" #TEMP12 "], %[" #TEMP4 "]  \n\t"    \

-+  "subu   %[" #TEMP4 "],  %[temp16],    %[temp17]        \n\t"    \

-+  "sra    %[" #TEMP4 "],  %[" #TEMP4 "],  4              \n\t"    \

-+  "addiu  %[" #TEMP8 "],  %[" #TEMP8 "],  30000          \n\t"    \

-+  "addiu  %[" #TEMP12 "], %[" #TEMP12 "], 12000          \n\t"    \

-+  "addiu  %[" #TEMP8 "],  %[" #TEMP8 "],  21000          \n\t"    \

-+  "subu   %[" #TEMP8 "],  %[" #TEMP8 "],  %[temp18]      \n\t"    \

-+  "sra    %[" #TEMP12 "], %[" #TEMP12 "], 16             \n\t"    \

-+  "sra    %[" #TEMP8 "],  %[" #TEMP8 "],  16             \n\t"    \

-+  "addiu  %[temp16],    %[" #TEMP12 "], 1                \n\t"    \

-+  "movn   %[" #TEMP12 "], %[temp16],    %[temp19]        \n\t"    \

-+  "sh     %[" #TEMP0 "],  " #A "(%[temp20])              \n\t"    \

-+  "sh     %[" #TEMP4 "],  " #C "(%[temp20])              \n\t"    \

-+  "sh     %[" #TEMP8 "],  " #D "(%[temp20])              \n\t"    \

-+  "sh     %[" #TEMP12 "], " #B "(%[temp20])              \n\t"

- 

- static void FTransform(const uint8_t* src, const uint8_t* ref, int16_t* out) {

-   int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;

-@@ -516,14 +516,14 @@
- #if !defined(WORK_AROUND_GCC)

- 

- #define GET_SSE_INNER(A, B, C, D)                               \

--  "lbu     %[temp0],    "#A"(%[a])                   \n\t"      \

--  "lbu     %[temp1],    "#A"(%[b])                   \n\t"      \

--  "lbu     %[temp2],    "#B"(%[a])                   \n\t"      \

--  "lbu     %[temp3],    "#B"(%[b])                   \n\t"      \

--  "lbu     %[temp4],    "#C"(%[a])                   \n\t"      \

--  "lbu     %[temp5],    "#C"(%[b])                   \n\t"      \

--  "lbu     %[temp6],    "#D"(%[a])                   \n\t"      \

--  "lbu     %[temp7],    "#D"(%[b])                   \n\t"      \

-+  "lbu     %[temp0],    " #A "(%[a])                 \n\t"      \

-+  "lbu     %[temp1],    " #A "(%[b])                 \n\t"      \

-+  "lbu     %[temp2],    " #B "(%[a])                 \n\t"      \

-+  "lbu     %[temp3],    " #B "(%[b])                 \n\t"      \

-+  "lbu     %[temp4],    " #C "(%[a])                 \n\t"      \

-+  "lbu     %[temp5],    " #C "(%[b])                 \n\t"      \

-+  "lbu     %[temp6],    " #D "(%[a])                 \n\t"      \

-+  "lbu     %[temp7],    " #D "(%[b])                 \n\t"      \

-   "subu    %[temp0],    %[temp0],     %[temp1]       \n\t"      \

-   "subu    %[temp2],    %[temp2],     %[temp3]       \n\t"      \

-   "subu    %[temp4],    %[temp4],     %[temp5]       \n\t"      \

-diff --git a/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c
-index 56db07c..44f6fd2 100644
---- a/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c
-@@ -27,25 +27,25 @@
- // I - input (macro doesn't change it)

- #define ADD_SUB_HALVES_X4(O0, O1, O2, O3, O4, O5, O6, O7,                      \

-                           I0, I1, I2, I3, I4, I5, I6, I7)                      \

--  "addq.ph          %["#O0"],   %["#I0"],  %["#I1"]           \n\t"            \

--  "subq.ph          %["#O1"],   %["#I0"],  %["#I1"]           \n\t"            \

--  "addq.ph          %["#O2"],   %["#I2"],  %["#I3"]           \n\t"            \

--  "subq.ph          %["#O3"],   %["#I2"],  %["#I3"]           \n\t"            \

--  "addq.ph          %["#O4"],   %["#I4"],  %["#I5"]           \n\t"            \

--  "subq.ph          %["#O5"],   %["#I4"],  %["#I5"]           \n\t"            \

--  "addq.ph          %["#O6"],   %["#I6"],  %["#I7"]           \n\t"            \

--  "subq.ph          %["#O7"],   %["#I6"],  %["#I7"]           \n\t"

-+  "addq.ph          %[" #O0 "],   %[" #I0 "],  %[" #I1 "]     \n\t"            \

-+  "subq.ph          %[" #O1 "],   %[" #I0 "],  %[" #I1 "]     \n\t"            \

-+  "addq.ph          %[" #O2 "],   %[" #I2 "],  %[" #I3 "]     \n\t"            \

-+  "subq.ph          %[" #O3 "],   %[" #I2 "],  %[" #I3 "]     \n\t"            \

-+  "addq.ph          %[" #O4 "],   %[" #I4 "],  %[" #I5 "]     \n\t"            \

-+  "subq.ph          %[" #O5 "],   %[" #I4 "],  %[" #I5 "]     \n\t"            \

-+  "addq.ph          %[" #O6 "],   %[" #I6 "],  %[" #I7 "]     \n\t"            \

-+  "subq.ph          %[" #O7 "],   %[" #I6 "],  %[" #I7 "]     \n\t"

- 

- // IO - input/output

- #define ABS_X8(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7)                         \

--  "absq_s.ph        %["#IO0"],   %["#IO0"]                    \n\t"            \

--  "absq_s.ph        %["#IO1"],   %["#IO1"]                    \n\t"            \

--  "absq_s.ph        %["#IO2"],   %["#IO2"]                    \n\t"            \

--  "absq_s.ph        %["#IO3"],   %["#IO3"]                    \n\t"            \

--  "absq_s.ph        %["#IO4"],   %["#IO4"]                    \n\t"            \

--  "absq_s.ph        %["#IO5"],   %["#IO5"]                    \n\t"            \

--  "absq_s.ph        %["#IO6"],   %["#IO6"]                    \n\t"            \

--  "absq_s.ph        %["#IO7"],   %["#IO7"]                    \n\t"

-+  "absq_s.ph        %[" #IO0 "],   %[" #IO0 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO1 "],   %[" #IO1 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO2 "],   %[" #IO2 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO3 "],   %[" #IO3 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO4 "],   %[" #IO4 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO5 "],   %[" #IO5 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO6 "],   %[" #IO6 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO7 "],   %[" #IO7 "]                \n\t"

- 

- // dpa.w.ph $ac0 temp0 ,temp1

- //  $ac += temp0[31..16] * temp1[31..16] + temp0[15..0] * temp1[15..0]

-@@ -56,15 +56,15 @@
- #define MUL_HALF(O0, I0, I1, I2, I3, I4, I5, I6, I7,                           \

-                  I8, I9, I10, I11, I12, I13, I14, I15)                         \

-     "mult            $ac0,      $zero,     $zero              \n\t"            \

--    "dpa.w.ph        $ac0,      %["#I2"],  %["#I0"]           \n\t"            \

--    "dpax.w.ph       $ac0,      %["#I5"],  %["#I6"]           \n\t"            \

--    "dpa.w.ph        $ac0,      %["#I8"],  %["#I9"]           \n\t"            \

--    "dpax.w.ph       $ac0,      %["#I11"], %["#I4"]           \n\t"            \

--    "dpa.w.ph        $ac0,      %["#I12"], %["#I7"]           \n\t"            \

--    "dpax.w.ph       $ac0,      %["#I13"], %["#I1"]           \n\t"            \

--    "dpa.w.ph        $ac0,      %["#I14"], %["#I3"]           \n\t"            \

--    "dpax.w.ph       $ac0,      %["#I15"], %["#I10"]          \n\t"            \

--    "mflo            %["#O0"],  $ac0                          \n\t"

-+    "dpa.w.ph        $ac0,      %[" #I2 "],  %[" #I0 "]       \n\t"            \

-+    "dpax.w.ph       $ac0,      %[" #I5 "],  %[" #I6 "]       \n\t"            \

-+    "dpa.w.ph        $ac0,      %[" #I8 "],  %[" #I9 "]       \n\t"            \

-+    "dpax.w.ph       $ac0,      %[" #I11 "], %[" #I4 "]       \n\t"            \

-+    "dpa.w.ph        $ac0,      %[" #I12 "], %[" #I7 "]       \n\t"            \

-+    "dpax.w.ph       $ac0,      %[" #I13 "], %[" #I1 "]       \n\t"            \

-+    "dpa.w.ph        $ac0,      %[" #I14 "], %[" #I3 "]       \n\t"            \

-+    "dpax.w.ph       $ac0,      %[" #I15 "], %[" #I10 "]      \n\t"            \

-+    "mflo            %[" #O0 "],  $ac0                        \n\t"

- 

- #define OUTPUT_EARLY_CLOBBER_REGS_17()                                         \

-   OUTPUT_EARLY_CLOBBER_REGS_10(),                                              \

-@@ -77,69 +77,69 @@
- // A - offset in bytes to load from src and ref buffers

- // TEMP0..TEMP3 - registers for corresponding tmp elements

- #define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3)                         \

--  "lw              %["#TEMP0"],   0(%[args])                        \n\t"      \

--  "lw              %["#TEMP1"],   4(%[args])                        \n\t"      \

--  "lw              %["#TEMP2"],   "XSTR(BPS)"*"#A"(%["#TEMP0"])     \n\t"      \

--  "lw              %["#TEMP3"],   "XSTR(BPS)"*"#A"(%["#TEMP1"])     \n\t"      \

--  "preceu.ph.qbl   %["#TEMP0"],   %["#TEMP2"]                       \n\t"      \

--  "preceu.ph.qbl   %["#TEMP1"],   %["#TEMP3"]                       \n\t"      \

--  "preceu.ph.qbr   %["#TEMP2"],   %["#TEMP2"]                       \n\t"      \

--  "preceu.ph.qbr   %["#TEMP3"],   %["#TEMP3"]                       \n\t"      \

--  "subq.ph         %["#TEMP0"],   %["#TEMP0"],   %["#TEMP1"]        \n\t"      \

--  "subq.ph         %["#TEMP2"],   %["#TEMP2"],   %["#TEMP3"]        \n\t"      \

--  "rotr            %["#TEMP0"],   %["#TEMP0"],   16                 \n\t"      \

--  "addq.ph         %["#TEMP1"],   %["#TEMP2"],   %["#TEMP0"]        \n\t"      \

--  "subq.ph         %["#TEMP3"],   %["#TEMP2"],   %["#TEMP0"]        \n\t"      \

--  "seh             %["#TEMP0"],   %["#TEMP1"]                       \n\t"      \

--  "sra             %[temp16],     %["#TEMP1"],   16                 \n\t"      \

--  "seh             %[temp19],     %["#TEMP3"]                       \n\t"      \

--  "sra             %["#TEMP3"],   %["#TEMP3"],   16                 \n\t"      \

--  "subu            %["#TEMP2"],   %["#TEMP0"],   %[temp16]          \n\t"      \

--  "addu            %["#TEMP0"],   %["#TEMP0"],   %[temp16]          \n\t"      \

--  "mul             %[temp17],     %[temp19],     %[c2217]           \n\t"      \

--  "mul             %[temp18],     %["#TEMP3"],   %[c5352]           \n\t"      \

--  "mul             %["#TEMP1"],   %[temp19],     %[c5352]           \n\t"      \

--  "mul             %[temp16],     %["#TEMP3"],   %[c2217]           \n\t"      \

--  "sll             %["#TEMP2"],   %["#TEMP2"],   3                  \n\t"      \

--  "sll             %["#TEMP0"],   %["#TEMP0"],   3                  \n\t"      \

--  "subu            %["#TEMP3"],   %[temp17],     %[temp18]          \n\t"      \

--  "addu            %["#TEMP1"],   %[temp16],     %["#TEMP1"]        \n\t"      \

--  "addiu           %["#TEMP3"],   %["#TEMP3"],   937                \n\t"      \

--  "addiu           %["#TEMP1"],   %["#TEMP1"],   1812               \n\t"      \

--  "sra             %["#TEMP3"],   %["#TEMP3"],   9                  \n\t"      \

--  "sra             %["#TEMP1"],   %["#TEMP1"],   9                  \n\t"

-+  "lw              %[" #TEMP0 "],   0(%[args])                          \n\t"  \

-+  "lw              %[" #TEMP1 "],   4(%[args])                          \n\t"  \

-+  "lw              %[" #TEMP2 "],   "XSTR(BPS)"*" #A "(%[" #TEMP0 "])   \n\t"  \

-+  "lw              %[" #TEMP3 "],   "XSTR(BPS)"*" #A "(%[" #TEMP1 "])   \n\t"  \

-+  "preceu.ph.qbl   %[" #TEMP0 "],   %[" #TEMP2 "]                       \n\t"  \

-+  "preceu.ph.qbl   %[" #TEMP1 "],   %[" #TEMP3 "]                       \n\t"  \

-+  "preceu.ph.qbr   %[" #TEMP2 "],   %[" #TEMP2 "]                       \n\t"  \

-+  "preceu.ph.qbr   %[" #TEMP3 "],   %[" #TEMP3 "]                       \n\t"  \

-+  "subq.ph         %[" #TEMP0 "],   %[" #TEMP0 "],   %[" #TEMP1 "]      \n\t"  \

-+  "subq.ph         %[" #TEMP2 "],   %[" #TEMP2 "],   %[" #TEMP3 "]      \n\t"  \

-+  "rotr            %[" #TEMP0 "],   %[" #TEMP0 "],   16                 \n\t"  \

-+  "addq.ph         %[" #TEMP1 "],   %[" #TEMP2 "],   %[" #TEMP0 "]      \n\t"  \

-+  "subq.ph         %[" #TEMP3 "],   %[" #TEMP2 "],   %[" #TEMP0 "]      \n\t"  \

-+  "seh             %[" #TEMP0 "],   %[" #TEMP1 "]                       \n\t"  \

-+  "sra             %[temp16],     %[" #TEMP1 "],   16                   \n\t"  \

-+  "seh             %[temp19],     %[" #TEMP3 "]                         \n\t"  \

-+  "sra             %[" #TEMP3 "],   %[" #TEMP3 "],   16                 \n\t"  \

-+  "subu            %[" #TEMP2 "],   %[" #TEMP0 "],   %[temp16]          \n\t"  \

-+  "addu            %[" #TEMP0 "],   %[" #TEMP0 "],   %[temp16]          \n\t"  \

-+  "mul             %[temp17],     %[temp19],     %[c2217]               \n\t"  \

-+  "mul             %[temp18],     %[" #TEMP3 "],   %[c5352]             \n\t"  \

-+  "mul             %[" #TEMP1 "],   %[temp19],     %[c5352]             \n\t"  \

-+  "mul             %[temp16],     %[" #TEMP3 "],   %[c2217]             \n\t"  \

-+  "sll             %[" #TEMP2 "],   %[" #TEMP2 "],   3                  \n\t"  \

-+  "sll             %[" #TEMP0 "],   %[" #TEMP0 "],   3                  \n\t"  \

-+  "subu            %[" #TEMP3 "],   %[temp17],     %[temp18]            \n\t"  \

-+  "addu            %[" #TEMP1 "],   %[temp16],     %[" #TEMP1 "]        \n\t"  \

-+  "addiu           %[" #TEMP3 "],   %[" #TEMP3 "],   937                \n\t"  \

-+  "addiu           %[" #TEMP1 "],   %[" #TEMP1 "],   1812               \n\t"  \

-+  "sra             %[" #TEMP3 "],   %[" #TEMP3 "],   9                  \n\t"  \

-+  "sra             %[" #TEMP1 "],   %[" #TEMP1 "],   9                  \n\t"

- 

- // macro for one vertical pass in FTransform

- // temp0..temp15 holds tmp[0]..tmp[15]

- // A..D - offsets in bytes to store to out buffer

- // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements

- #define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12)                 \

--  "addu            %[temp16],     %["#TEMP0"],   %["#TEMP12"] \n\t"            \

--  "subu            %[temp19],     %["#TEMP0"],   %["#TEMP12"] \n\t"            \

--  "addu            %[temp17],     %["#TEMP4"],   %["#TEMP8"]  \n\t"            \

--  "subu            %[temp18],     %["#TEMP4"],   %["#TEMP8"]  \n\t"            \

--  "mul             %["#TEMP8"],   %[temp19],     %[c2217]     \n\t"            \

--  "mul             %["#TEMP12"],  %[temp18],     %[c2217]     \n\t"            \

--  "mul             %["#TEMP4"],   %[temp19],     %[c5352]     \n\t"            \

--  "mul             %[temp18],     %[temp18],     %[c5352]     \n\t"            \

--  "addiu           %[temp16],     %[temp16],     7            \n\t"            \

--  "addu            %["#TEMP0"],   %[temp16],     %[temp17]    \n\t"            \

--  "sra             %["#TEMP0"],   %["#TEMP0"],   4            \n\t"            \

--  "addu            %["#TEMP12"],  %["#TEMP12"],  %["#TEMP4"]  \n\t"            \

--  "subu            %["#TEMP4"],   %[temp16],     %[temp17]    \n\t"            \

--  "sra             %["#TEMP4"],   %["#TEMP4"],   4            \n\t"            \

--  "addiu           %["#TEMP8"],   %["#TEMP8"],   30000        \n\t"            \

--  "addiu           %["#TEMP12"],  %["#TEMP12"],  12000        \n\t"            \

--  "addiu           %["#TEMP8"],   %["#TEMP8"],   21000        \n\t"            \

--  "subu            %["#TEMP8"],   %["#TEMP8"],   %[temp18]    \n\t"            \

--  "sra             %["#TEMP12"],  %["#TEMP12"],  16           \n\t"            \

--  "sra             %["#TEMP8"],   %["#TEMP8"],   16           \n\t"            \

--  "addiu           %[temp16],     %["#TEMP12"],  1            \n\t"            \

--  "movn            %["#TEMP12"],  %[temp16],     %[temp19]    \n\t"            \

--  "sh              %["#TEMP0"],   "#A"(%[temp20])             \n\t"            \

--  "sh              %["#TEMP4"],   "#C"(%[temp20])             \n\t"            \

--  "sh              %["#TEMP8"],   "#D"(%[temp20])             \n\t"            \

--  "sh              %["#TEMP12"],  "#B"(%[temp20])             \n\t"

-+  "addu            %[temp16],     %[" #TEMP0 "],   %[" #TEMP12 "]   \n\t"      \

-+  "subu            %[temp19],     %[" #TEMP0 "],   %[" #TEMP12 "]   \n\t"      \

-+  "addu            %[temp17],     %[" #TEMP4 "],   %[" #TEMP8 "]    \n\t"      \

-+  "subu            %[temp18],     %[" #TEMP4 "],   %[" #TEMP8 "]    \n\t"      \

-+  "mul             %[" #TEMP8 "],   %[temp19],     %[c2217]         \n\t"      \

-+  "mul             %[" #TEMP12 "],  %[temp18],     %[c2217]         \n\t"      \

-+  "mul             %[" #TEMP4 "],   %[temp19],     %[c5352]         \n\t"      \

-+  "mul             %[temp18],     %[temp18],     %[c5352]           \n\t"      \

-+  "addiu           %[temp16],     %[temp16],     7                  \n\t"      \

-+  "addu            %[" #TEMP0 "],   %[temp16],     %[temp17]        \n\t"      \

-+  "sra             %[" #TEMP0 "],   %[" #TEMP0 "],   4              \n\t"      \

-+  "addu            %[" #TEMP12 "],  %[" #TEMP12 "],  %[" #TEMP4 "]  \n\t"      \

-+  "subu            %[" #TEMP4 "],   %[temp16],     %[temp17]        \n\t"      \

-+  "sra             %[" #TEMP4 "],   %[" #TEMP4 "],   4              \n\t"      \

-+  "addiu           %[" #TEMP8 "],   %[" #TEMP8 "],   30000          \n\t"      \

-+  "addiu           %[" #TEMP12 "],  %[" #TEMP12 "],  12000          \n\t"      \

-+  "addiu           %[" #TEMP8 "],   %[" #TEMP8 "],   21000          \n\t"      \

-+  "subu            %[" #TEMP8 "],   %[" #TEMP8 "],   %[temp18]      \n\t"      \

-+  "sra             %[" #TEMP12 "],  %[" #TEMP12 "],  16             \n\t"      \

-+  "sra             %[" #TEMP8 "],   %[" #TEMP8 "],   16             \n\t"      \

-+  "addiu           %[temp16],     %[" #TEMP12 "],  1                \n\t"      \

-+  "movn            %[" #TEMP12 "],  %[temp16],     %[temp19]        \n\t"      \

-+  "sh              %[" #TEMP0 "],   " #A "(%[temp20])               \n\t"      \

-+  "sh              %[" #TEMP4 "],   " #C "(%[temp20])               \n\t"      \

-+  "sh              %[" #TEMP8 "],   " #D "(%[temp20])               \n\t"      \

-+  "sh              %[" #TEMP12 "],  " #B "(%[temp20])               \n\t"

- 

- static void FTransform(const uint8_t* src, const uint8_t* ref, int16_t* out) {

-   const int c2217 = 2217;

-@@ -329,11 +329,11 @@
- // Intra predictions

- 

- #define FILL_PART(J, SIZE)                                          \

--    "usw        %[value],  0+"#J"*"XSTR(BPS)"(%[dst])    \n\t"      \

--    "usw        %[value],  4+"#J"*"XSTR(BPS)"(%[dst])    \n\t"      \

--  ".if "#SIZE" == 16                                     \n\t"      \

--    "usw        %[value],  8+"#J"*"XSTR(BPS)"(%[dst])    \n\t"      \

--    "usw        %[value], 12+"#J"*"XSTR(BPS)"(%[dst])    \n\t"      \

-+    "usw        %[value],  0+" #J "*"XSTR(BPS)"(%[dst])  \n\t"      \

-+    "usw        %[value],  4+" #J "*"XSTR(BPS)"(%[dst])  \n\t"      \

-+  ".if " #SIZE " == 16                                   \n\t"      \

-+    "usw        %[value],  8+" #J "*"XSTR(BPS)"(%[dst])  \n\t"      \

-+    "usw        %[value], 12+" #J "*"XSTR(BPS)"(%[dst])  \n\t"      \

-   ".endif                                                \n\t"

- 

- #define FILL_8_OR_16(DST, VALUE, SIZE) do {                         \

-@@ -348,7 +348,7 @@
-     FILL_PART( 5, SIZE)                                             \

-     FILL_PART( 6, SIZE)                                             \

-     FILL_PART( 7, SIZE)                                             \

--  ".if "#SIZE" == 16                                     \n\t"      \

-+  ".if " #SIZE " == 16                                   \n\t"      \

-     FILL_PART( 8, 16)                                               \

-     FILL_PART( 9, 16)                                               \

-     FILL_PART(10, 16)                                               \

-@@ -425,7 +425,7 @@
-     CLIPPING()                                                                 \

-     "usw             %[temp0],   0(%[dst])               \n\t"                 \

-     "usw             %[temp1],   4(%[dst])               \n\t"                 \

--  ".if "#SIZE" == 16                                     \n\t"                 \

-+  ".if " #SIZE " == 16                                   \n\t"                 \

-     "ulw             %[temp0],   8(%[top])               \n\t"                 \

-     "ulw             %[temp1],   12(%[top])              \n\t"                 \

-     CLIPPING()                                                                 \

-@@ -1060,8 +1060,8 @@
- #if !defined(WORK_AROUND_GCC)

- 

- #define GET_SSE_INNER(A)                                                  \

--  "lw               %[temp0],    "#A"(%[a])                    \n\t"      \

--  "lw               %[temp1],    "#A"(%[b])                    \n\t"      \

-+  "lw               %[temp0],    " #A "(%[a])                  \n\t"      \

-+  "lw               %[temp1],    " #A "(%[b])                  \n\t"      \

-   "preceu.ph.qbr    %[temp2],    %[temp0]                      \n\t"      \

-   "preceu.ph.qbl    %[temp0],    %[temp0]                      \n\t"      \

-   "preceu.ph.qbr    %[temp3],    %[temp1]                      \n\t"      \

-@@ -1185,28 +1185,28 @@
- // N - offset in bytes (n * 2)

- // N1 - offset in bytes ((n + 1) * 2)

- #define QUANTIZE_ONE(J, K, N, N1)                                         \

--  "ulw         %[temp1],     "#J"(%[ppin])                   \n\t"        \

--  "ulw         %[temp2],     "#J"(%[ppsharpen])              \n\t"        \

--  "lhu         %[temp3],     "#K"(%[ppzthresh])              \n\t"        \

--  "lhu         %[temp6],     "#K"+4(%[ppzthresh])            \n\t"        \

-+  "ulw         %[temp1],     " #J "(%[ppin])                 \n\t"        \

-+  "ulw         %[temp2],     " #J "(%[ppsharpen])            \n\t"        \

-+  "lhu         %[temp3],     " #K "(%[ppzthresh])            \n\t"        \

-+  "lhu         %[temp6],     " #K "+4(%[ppzthresh])          \n\t"        \

-   "absq_s.ph   %[temp4],     %[temp1]                        \n\t"        \

-   "ins         %[temp3],     %[temp6],         16,       16  \n\t"        \

-   "addu.ph     %[coeff],     %[temp4],         %[temp2]      \n\t"        \

-   "shra.ph     %[sign],      %[temp1],         15            \n\t"        \

-   "li          %[level],     0x10001                         \n\t"        \

-   "cmp.lt.ph   %[temp3],     %[coeff]                        \n\t"        \

--  "lhu         %[temp1],     "#J"(%[ppiq])                   \n\t"        \

-+  "lhu         %[temp1],     " #J "(%[ppiq])                 \n\t"        \

-   "pick.ph     %[temp5],     %[level],         $0            \n\t"        \

--  "lw          %[temp2],     "#K"(%[ppbias])                 \n\t"        \

-+  "lw          %[temp2],     " #K "(%[ppbias])               \n\t"        \

-   "beqz        %[temp5],     0f                              \n\t"        \

--  "lhu         %[temp3],     "#J"(%[ppq])                    \n\t"        \

-+  "lhu         %[temp3],     " #J "(%[ppq])                  \n\t"        \

-   "beq         %[temp5],     %[level],         1f            \n\t"        \

-   "andi        %[temp5],     %[temp5],         0x1           \n\t"        \

-   "andi        %[temp4],     %[coeff],         0xffff        \n\t"        \

-   "beqz        %[temp5],     2f                              \n\t"        \

-   "mul         %[level],     %[temp4],         %[temp1]      \n\t"        \

--  "sh          $0,           "#J"+2(%[ppin])                 \n\t"        \

--  "sh          $0,           "#N1"(%[pout])                  \n\t"        \

-+  "sh          $0,           " #J "+2(%[ppin])               \n\t"        \

-+  "sh          $0,           " #N1 "(%[pout])                \n\t"        \

-   "addu        %[level],     %[level],         %[temp2]      \n\t"        \

-   "sra         %[level],     %[level],         17            \n\t"        \

-   "slt         %[temp4],     %[max_level],     %[level]      \n\t"        \

-@@ -1216,15 +1216,15 @@
-   "subu        %[level],     %[level],         %[temp6]      \n\t"        \

-   "mul         %[temp5],     %[level],         %[temp3]      \n\t"        \

-   "or          %[ret],       %[ret],           %[level]      \n\t"        \

--  "sh          %[level],     "#N"(%[pout])                   \n\t"        \

--  "sh          %[temp5],     "#J"(%[ppin])                   \n\t"        \

-+  "sh          %[level],     " #N "(%[pout])                 \n\t"        \

-+  "sh          %[temp5],     " #J "(%[ppin])                 \n\t"        \

-   "j           3f                                            \n\t"        \

- "2:                                                          \n\t"        \

--  "lhu         %[temp1],     "#J"+2(%[ppiq])                 \n\t"        \

-+  "lhu         %[temp1],     " #J "+2(%[ppiq])               \n\t"        \

-   "srl         %[temp5],     %[coeff],         16            \n\t"        \

-   "mul         %[level],     %[temp5],         %[temp1]      \n\t"        \

--  "lw          %[temp2],     "#K"+4(%[ppbias])               \n\t"        \

--  "lhu         %[temp3],     "#J"+2(%[ppq])                  \n\t"        \

-+  "lw          %[temp2],     " #K "+4(%[ppbias])             \n\t"        \

-+  "lhu         %[temp3],     " #J "+2(%[ppq])                \n\t"        \

-   "addu        %[level],     %[level],         %[temp2]      \n\t"        \

-   "sra         %[level],     %[level],         17            \n\t"        \

-   "srl         %[temp6],     %[sign],          16            \n\t"        \

-@@ -1233,20 +1233,20 @@
-   "xor         %[level],     %[level],         %[temp6]      \n\t"        \

-   "subu        %[level],     %[level],         %[temp6]      \n\t"        \

-   "mul         %[temp5],     %[level],         %[temp3]      \n\t"        \

--  "sh          $0,           "#J"(%[ppin])                   \n\t"        \

--  "sh          $0,           "#N"(%[pout])                   \n\t"        \

-+  "sh          $0,           " #J "(%[ppin])                 \n\t"        \

-+  "sh          $0,           " #N "(%[pout])                 \n\t"        \

-   "or          %[ret],       %[ret],           %[level]      \n\t"        \

--  "sh          %[temp5],     "#J"+2(%[ppin])                 \n\t"        \

--  "sh          %[level],     "#N1"(%[pout])                  \n\t"        \

-+  "sh          %[temp5],     " #J "+2(%[ppin])               \n\t"        \

-+  "sh          %[level],     " #N1 "(%[pout])                \n\t"        \

-   "j           3f                                            \n\t"        \

- "1:                                                          \n\t"        \

--  "lhu         %[temp1],     "#J"(%[ppiq])                   \n\t"        \

--  "lw          %[temp2],     "#K"(%[ppbias])                 \n\t"        \

--  "ulw         %[temp3],     "#J"(%[ppq])                    \n\t"        \

-+  "lhu         %[temp1],     " #J "(%[ppiq])                 \n\t"        \

-+  "lw          %[temp2],     " #K "(%[ppbias])               \n\t"        \

-+  "ulw         %[temp3],     " #J "(%[ppq])                  \n\t"        \

-   "andi        %[temp5],     %[coeff],         0xffff        \n\t"        \

-   "srl         %[temp0],     %[coeff],         16            \n\t"        \

--  "lhu         %[temp6],     "#J"+2(%[ppiq])                 \n\t"        \

--  "lw          %[coeff],     "#K"+4(%[ppbias])               \n\t"        \

-+  "lhu         %[temp6],     " #J "+2(%[ppiq])               \n\t"        \

-+  "lw          %[coeff],     " #K "+4(%[ppbias])             \n\t"        \

-   "mul         %[level],     %[temp5],         %[temp1]      \n\t"        \

-   "mul         %[temp4],     %[temp0],         %[temp6]      \n\t"        \

-   "addu        %[level],     %[level],         %[temp2]      \n\t"        \

-@@ -1259,15 +1259,15 @@
-   "subu.ph     %[level],     %[level],         %[sign]       \n\t"        \

-   "mul.ph      %[temp3],     %[level],         %[temp3]      \n\t"        \

-   "or          %[ret],       %[ret],           %[level]      \n\t"        \

--  "sh          %[level],     "#N"(%[pout])                   \n\t"        \

-+  "sh          %[level],     " #N "(%[pout])                 \n\t"        \

-   "srl         %[level],     %[level],         16            \n\t"        \

--  "sh          %[level],     "#N1"(%[pout])                  \n\t"        \

--  "usw         %[temp3],     "#J"(%[ppin])                   \n\t"        \

-+  "sh          %[level],     " #N1 "(%[pout])                \n\t"        \

-+  "usw         %[temp3],     " #J "(%[ppin])                 \n\t"        \

-   "j           3f                                            \n\t"        \

- "0:                                                          \n\t"        \

--  "sh          $0,           "#N"(%[pout])                   \n\t"        \

--  "sh          $0,           "#N1"(%[pout])                  \n\t"        \

--  "usw         $0,           "#J"(%[ppin])                   \n\t"        \

-+  "sh          $0,           " #N "(%[pout])                 \n\t"        \

-+  "sh          $0,           " #N1 "(%[pout])                \n\t"        \

-+  "usw         $0,           " #J "(%[ppin])                 \n\t"        \

- "3:                                                          \n\t"

- 

- static int QuantizeBlock(int16_t in[16], int16_t out[16],

-@@ -1326,37 +1326,37 @@
- // A, B, C, D - offset in bytes to load from in buffer

- // TEMP0, TEMP1 - registers for corresponding tmp elements

- #define HORIZONTAL_PASS_WHT(A, B, C, D, TEMP0, TEMP1)                          \

--  "lh              %["#TEMP0"],  "#A"(%[in])                \n\t"              \

--  "lh              %["#TEMP1"],  "#B"(%[in])                \n\t"              \

--  "lh              %[temp8],     "#C"(%[in])                \n\t"              \

--  "lh              %[temp9],     "#D"(%[in])                \n\t"              \

--  "ins             %["#TEMP1"],  %["#TEMP0"],  16,  16      \n\t"              \

-+  "lh              %[" #TEMP0 "],  " #A "(%[in])            \n\t"              \

-+  "lh              %[" #TEMP1 "],  " #B "(%[in])            \n\t"              \

-+  "lh              %[temp8],     " #C "(%[in])              \n\t"              \

-+  "lh              %[temp9],     " #D "(%[in])              \n\t"              \

-+  "ins             %[" #TEMP1 "],  %[" #TEMP0 "],  16,  16  \n\t"              \

-   "ins             %[temp9],     %[temp8],     16,  16      \n\t"              \

--  "subq.ph         %[temp8],     %["#TEMP1"],  %[temp9]     \n\t"              \

--  "addq.ph         %[temp9],     %["#TEMP1"],  %[temp9]     \n\t"              \

--  "precrq.ph.w     %["#TEMP0"],  %[temp8],     %[temp9]     \n\t"              \

-+  "subq.ph         %[temp8],     %[" #TEMP1 "],  %[temp9]   \n\t"              \

-+  "addq.ph         %[temp9],     %[" #TEMP1 "],  %[temp9]   \n\t"              \

-+  "precrq.ph.w     %[" #TEMP0 "],  %[temp8],     %[temp9]   \n\t"              \

-   "append          %[temp8],     %[temp9],     16           \n\t"              \

--  "subq.ph         %["#TEMP1"],  %["#TEMP0"],  %[temp8]     \n\t"              \

--  "addq.ph         %["#TEMP0"],  %["#TEMP0"],  %[temp8]     \n\t"              \

--  "rotr            %["#TEMP1"],  %["#TEMP1"],  16           \n\t"

-+  "subq.ph         %[" #TEMP1 "],  %[" #TEMP0 "],  %[temp8] \n\t"              \

-+  "addq.ph         %[" #TEMP0 "],  %[" #TEMP0 "],  %[temp8] \n\t"              \

-+  "rotr            %[" #TEMP1 "],  %[" #TEMP1 "],  16       \n\t"

- 

- // macro for one vertical pass in FTransformWHT

- // temp0..temp7 holds tmp[0]..tmp[15]

- // A, B, C, D - offsets in bytes to store to out buffer

- // TEMP0, TEMP2, TEMP4 and TEMP6 - registers for corresponding tmp elements

- #define VERTICAL_PASS_WHT(A, B, C, D, TEMP0, TEMP2, TEMP4, TEMP6)              \

--  "addq.ph         %[temp8],     %["#TEMP0"],  %["#TEMP4"]  \n\t"              \

--  "addq.ph         %[temp9],     %["#TEMP2"],  %["#TEMP6"]  \n\t"              \

--  "subq.ph         %["#TEMP2"],  %["#TEMP2"],  %["#TEMP6"]  \n\t"              \

--  "subq.ph         %["#TEMP6"],  %["#TEMP0"],  %["#TEMP4"]  \n\t"              \

--  "addqh.ph        %["#TEMP0"],  %[temp8],     %[temp9]     \n\t"              \

--  "subqh.ph        %["#TEMP4"],  %["#TEMP6"],  %["#TEMP2"]  \n\t"              \

--  "addqh.ph        %["#TEMP2"],  %["#TEMP2"],  %["#TEMP6"]  \n\t"              \

--  "subqh.ph        %["#TEMP6"],  %[temp8],     %[temp9]     \n\t"              \

--  "usw             %["#TEMP0"],  "#A"(%[out])               \n\t"              \

--  "usw             %["#TEMP2"],  "#B"(%[out])               \n\t"              \

--  "usw             %["#TEMP4"],  "#C"(%[out])               \n\t"              \

--  "usw             %["#TEMP6"],  "#D"(%[out])               \n\t"

-+  "addq.ph         %[temp8],     %[" #TEMP0 "],  %[" #TEMP4 "]    \n\t"        \

-+  "addq.ph         %[temp9],     %[" #TEMP2 "],  %[" #TEMP6 "]    \n\t"        \

-+  "subq.ph         %[" #TEMP2 "],  %[" #TEMP2 "],  %[" #TEMP6 "]  \n\t"        \

-+  "subq.ph         %[" #TEMP6 "],  %[" #TEMP0 "],  %[" #TEMP4 "]  \n\t"        \

-+  "addqh.ph        %[" #TEMP0 "],  %[temp8],     %[temp9]         \n\t"        \

-+  "subqh.ph        %[" #TEMP4 "],  %[" #TEMP6 "],  %[" #TEMP2 "]  \n\t"        \

-+  "addqh.ph        %[" #TEMP2 "],  %[" #TEMP2 "],  %[" #TEMP6 "]  \n\t"        \

-+  "subqh.ph        %[" #TEMP6 "],  %[temp8],     %[temp9]         \n\t"        \

-+  "usw             %[" #TEMP0 "],  " #A "(%[out])                 \n\t"        \

-+  "usw             %[" #TEMP2 "],  " #B "(%[out])                 \n\t"        \

-+  "usw             %[" #TEMP4 "],  " #C "(%[out])                 \n\t"        \

-+  "usw             %[" #TEMP6 "],  " #D "(%[out])                 \n\t"

- 

- static void FTransformWHT(const int16_t* in, int16_t* out) {

-   int temp0, temp1, temp2, temp3, temp4;

-@@ -1385,10 +1385,10 @@
- // convert 8 coeffs at time

- // A, B, C, D - offsets in bytes to load from out buffer

- #define CONVERT_COEFFS_TO_BIN(A, B, C, D)                                      \

--  "ulw        %[temp0],  "#A"(%[out])                  \n\t"                   \

--  "ulw        %[temp1],  "#B"(%[out])                  \n\t"                   \

--  "ulw        %[temp2],  "#C"(%[out])                  \n\t"                   \

--  "ulw        %[temp3],  "#D"(%[out])                  \n\t"                   \

-+  "ulw        %[temp0],  " #A "(%[out])                \n\t"                   \

-+  "ulw        %[temp1],  " #B "(%[out])                \n\t"                   \

-+  "ulw        %[temp2],  " #C "(%[out])                \n\t"                   \

-+  "ulw        %[temp3],  " #D "(%[out])                \n\t"                   \

-   "absq_s.ph  %[temp0],  %[temp0]                      \n\t"                   \

-   "absq_s.ph  %[temp1],  %[temp1]                      \n\t"                   \

-   "absq_s.ph  %[temp2],  %[temp2]                      \n\t"                   \

-diff --git a/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c
-index 66f807d..8134af5 100644
---- a/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c
-@@ -48,7 +48,7 @@
-       "srl       %[temp0],    %[length],    0x2         \n\t"                  \

-       "beqz      %[temp0],    4f                        \n\t"                  \

-       " andi     %[temp6],    %[length],    0x3         \n\t"                  \

--    ".if "#INVERSE"                                     \n\t"                  \

-+    ".if " #INVERSE "                                   \n\t"                  \

-       "lbu       %[temp1],    -1(%[src])                \n\t"                  \

-     "1:                                                 \n\t"                  \

-       "lbu       %[temp2],    0(%[src])                 \n\t"                  \

-@@ -84,7 +84,7 @@
-       "lbu       %[temp1],    -1(%[src])                \n\t"                  \

-       "lbu       %[temp2],    0(%[src])                 \n\t"                  \

-       "addiu     %[src],      %[src],       1           \n\t"                  \

--    ".if "#INVERSE"                                     \n\t"                  \

-+    ".if " #INVERSE "                                   \n\t"                  \

-       "addu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \

-       "sb        %[temp3],    -1(%[src])                \n\t"                  \

-     ".else                                              \n\t"                  \

-@@ -131,7 +131,7 @@
-       "ulw       %[temp3],    4(%[src])                 \n\t"                  \

-       "ulw       %[temp4],    4(%[pred])                \n\t"                  \

-       "addiu     %[src],      %[src],       8           \n\t"                  \

--    ".if "#INVERSE"                                     \n\t"                  \

-+    ".if " #INVERSE "                                   \n\t"                  \

-       "addu.qb   %[temp5],    %[temp1],     %[temp2]    \n\t"                  \

-       "addu.qb   %[temp6],    %[temp3],     %[temp4]    \n\t"                  \

-     ".else                                              \n\t"                  \

-@@ -152,7 +152,7 @@
-       "lbu       %[temp2],    0(%[pred])                \n\t"                  \

-       "addiu     %[src],      %[src],       1           \n\t"                  \

-       "addiu     %[pred],     %[pred],      1           \n\t"                  \

--    ".if "#INVERSE"                                     \n\t"                  \

-+    ".if " #INVERSE "                                   \n\t"                  \

-       "addu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \

-     ".else                                              \n\t"                  \

-       "subu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \

-@@ -177,7 +177,7 @@
-     __asm__ volatile (                                                         \

-       "lbu       %[temp1],   0(%[src])               \n\t"                     \

-       "lbu       %[temp2],   0(%[pred])              \n\t"                     \

--    ".if "#INVERSE"                                  \n\t"                     \

-+    ".if " #INVERSE "                                \n\t"                     \

-       "addu      %[temp3],   %[temp1],   %[temp2]    \n\t"                     \

-     ".else                                           \n\t"                     \

-       "subu      %[temp3],   %[temp1],   %[temp2]    \n\t"                     \

-diff --git a/Source/LibWebP/src/dsp/dsp.lossless_mips32.c b/Source/LibWebP/src/dsp/dsp.lossless_mips32.c
-index 8ae5958..cdf0e26 100644
---- a/Source/LibWebP/src/dsp/dsp.lossless_mips32.c
-+++ b/Source/LibWebP/src/dsp/dsp.lossless_mips32.c
-
-@@ -278,28 +278,28 @@
- // literal_ and successive histograms could be unaligned

- // so we must use ulw and usw

- #define ADD_TO_OUT(A, B, C, D, E, P0, P1, P2)           \

--    "ulw    %[temp0], "#A"(%["#P0"])        \n\t"       \

--    "ulw    %[temp1], "#B"(%["#P0"])        \n\t"       \

--    "ulw    %[temp2], "#C"(%["#P0"])        \n\t"       \

--    "ulw    %[temp3], "#D"(%["#P0"])        \n\t"       \

--    "ulw    %[temp4], "#A"(%["#P1"])        \n\t"       \

--    "ulw    %[temp5], "#B"(%["#P1"])        \n\t"       \

--    "ulw    %[temp6], "#C"(%["#P1"])        \n\t"       \

--    "ulw    %[temp7], "#D"(%["#P1"])        \n\t"       \

-+    "ulw    %[temp0], " #A "(%[" #P0 "])    \n\t"       \

-+    "ulw    %[temp1], " #B "(%[" #P0 "])    \n\t"       \

-+    "ulw    %[temp2], " #C "(%[" #P0 "])    \n\t"       \

-+    "ulw    %[temp3], " #D "(%[" #P0 "])    \n\t"       \

-+    "ulw    %[temp4], " #A "(%[" #P1 "])    \n\t"       \

-+    "ulw    %[temp5], " #B "(%[" #P1 "])    \n\t"       \

-+    "ulw    %[temp6], " #C "(%[" #P1 "])    \n\t"       \

-+    "ulw    %[temp7], " #D "(%[" #P1 "])    \n\t"       \

-     "addu   %[temp4], %[temp4],   %[temp0]  \n\t"       \

-     "addu   %[temp5], %[temp5],   %[temp1]  \n\t"       \

-     "addu   %[temp6], %[temp6],   %[temp2]  \n\t"       \

-     "addu   %[temp7], %[temp7],   %[temp3]  \n\t"       \

--    "addiu  %["#P0"],  %["#P0"],  16        \n\t"       \

--  ".if "#E" == 1                            \n\t"       \

--    "addiu  %["#P1"],  %["#P1"],  16        \n\t"       \

-+    "addiu  %[" #P0 "],  %[" #P0 "],  16    \n\t"       \

-+  ".if " #E " == 1                          \n\t"       \

-+    "addiu  %[" #P1 "],  %[" #P1 "],  16    \n\t"       \

-   ".endif                                   \n\t"       \

--    "usw    %[temp4], "#A"(%["#P2"])        \n\t"       \

--    "usw    %[temp5], "#B"(%["#P2"])        \n\t"       \

--    "usw    %[temp6], "#C"(%["#P2"])        \n\t"       \

--    "usw    %[temp7], "#D"(%["#P2"])        \n\t"       \

--    "addiu  %["#P2"], %["#P2"],   16        \n\t"       \

--    "bne    %["#P0"], %[LoopEnd], 1b        \n\t"       \

-+    "usw    %[temp4], " #A "(%[" #P2 "])    \n\t"       \

-+    "usw    %[temp5], " #B "(%[" #P2 "])    \n\t"       \

-+    "usw    %[temp6], " #C "(%[" #P2 "])    \n\t"       \

-+    "usw    %[temp7], " #D "(%[" #P2 "])    \n\t"       \

-+    "addiu  %[" #P2 "], %[" #P2 "],   16    \n\t"       \

-+    "bne    %[" #P0 "], %[LoopEnd], 1b      \n\t"       \

-     ".set   pop                             \n\t"       \

- 

- #define ASM_END_COMMON_0                                \

-diff --git a/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c
-index ad55f2c..90aed7f 100644
---- a/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c
-@@ -29,14 +29,14 @@
-     for (x = 0; x < (width >> 2); ++x) {                                       \

-       int tmp1, tmp2, tmp3, tmp4;                                              \

-       __asm__ volatile (                                                       \

--      ".ifc        "#TYPE",  uint8_t                    \n\t"                  \

-+      ".ifc        " #TYPE ",  uint8_t                  \n\t"                  \

-         "lbu       %[tmp1],  0(%[src])                  \n\t"                  \

-         "lbu       %[tmp2],  1(%[src])                  \n\t"                  \

-         "lbu       %[tmp3],  2(%[src])                  \n\t"                  \

-         "lbu       %[tmp4],  3(%[src])                  \n\t"                  \

-         "addiu     %[src],   %[src],      4             \n\t"                  \

-       ".endif                                           \n\t"                  \

--      ".ifc        "#TYPE",  uint32_t                   \n\t"                  \

-+      ".ifc        " #TYPE ",  uint32_t                 \n\t"                  \

-         "lw        %[tmp1],  0(%[src])                  \n\t"                  \

-         "lw        %[tmp2],  4(%[src])                  \n\t"                  \

-         "lw        %[tmp3],  8(%[src])                  \n\t"                  \

-@@ -55,7 +55,7 @@
-         "lwx       %[tmp2],  %[tmp2](%[color_map])      \n\t"                  \

-         "lwx       %[tmp3],  %[tmp3](%[color_map])      \n\t"                  \

-         "lwx       %[tmp4],  %[tmp4](%[color_map])      \n\t"                  \

--      ".ifc        "#TYPE",  uint8_t                    \n\t"                  \

-+      ".ifc        " #TYPE ",  uint8_t                  \n\t"                  \

-         "ext       %[tmp1],  %[tmp1],     8,        8   \n\t"                  \

-         "ext       %[tmp2],  %[tmp2],     8,        8   \n\t"                  \

-         "ext       %[tmp3],  %[tmp3],     8,        8   \n\t"                  \

-@@ -66,7 +66,7 @@
-         "sb        %[tmp4],  3(%[dst])                  \n\t"                  \

-         "addiu     %[dst],   %[dst],      4             \n\t"                  \

-       ".endif                                           \n\t"                  \

--      ".ifc        "#TYPE",  uint32_t                   \n\t"                  \

-+      ".ifc        " #TYPE ",  uint32_t                 \n\t"                  \

-         "sw        %[tmp1],  0(%[dst])                  \n\t"                  \

-         "sw        %[tmp2],  4(%[dst])                  \n\t"                  \

-         "sw        %[tmp3],  8(%[dst])                  \n\t"                  \

-diff --git a/Source/LibWebP/src/dsp/mips_macro.h b/Source/LibWebP/src/dsp/mips_macro.h
-index 4cfb23c..e09d2c4 100644
---- a/Source/LibWebP/src/dsp/mips_macro.h
-+++ b/Source/LibWebP/src/dsp/mips_macro.h
-@@ -25,25 +25,25 @@
- // I - input (macro doesn't change it)

- #define ADD_SUB_HALVES(O0, O1,                                                 \

-                        I0, I1)                                                 \

--  "addq.ph          %["#O0"],   %["#I0"],  %["#I1"]           \n\t"            \

--  "subq.ph          %["#O1"],   %["#I0"],  %["#I1"]           \n\t"

-+  "addq.ph          %[" #O0 "],   %[" #I0 "],  %[" #I1 "]           \n\t"      \

-+  "subq.ph          %[" #O1 "],   %[" #I0 "],  %[" #I1 "]           \n\t"

- 

- // O - output

- // I - input (macro doesn't change it)

- // I[0/1] - offset in bytes

- #define LOAD_IN_X2(O0, O1,                                                     \

-                    I0, I1)                                                     \

--  "lh               %["#O0"],   "#I0"(%[in])                  \n\t"            \

--  "lh               %["#O1"],   "#I1"(%[in])                  \n\t"

-+  "lh               %[" #O0 "],   " #I0 "(%[in])                  \n\t"        \

-+  "lh               %[" #O1 "],   " #I1 "(%[in])                  \n\t"

- 

- // I0 - location

- // I1..I9 - offsets in bytes

- #define LOAD_WITH_OFFSET_X4(O0, O1, O2, O3,                                    \

-                             I0, I1, I2, I3, I4, I5, I6, I7, I8, I9)            \

--  "ulw    %["#O0"],    "#I1"+"XSTR(I9)"*"#I5"(%["#I0"])       \n\t"            \

--  "ulw    %["#O1"],    "#I2"+"XSTR(I9)"*"#I6"(%["#I0"])       \n\t"            \

--  "ulw    %["#O2"],    "#I3"+"XSTR(I9)"*"#I7"(%["#I0"])       \n\t"            \

--  "ulw    %["#O3"],    "#I4"+"XSTR(I9)"*"#I8"(%["#I0"])       \n\t"

-+  "ulw    %[" #O0 "],    " #I1 "+"XSTR(I9)"*" #I5 "(%[" #I0 "])       \n\t"    \

-+  "ulw    %[" #O1 "],    " #I2 "+"XSTR(I9)"*" #I6 "(%[" #I0 "])       \n\t"    \

-+  "ulw    %[" #O2 "],    " #I3 "+"XSTR(I9)"*" #I7 "(%[" #I0 "])       \n\t"    \

-+  "ulw    %[" #O3 "],    " #I4 "+"XSTR(I9)"*" #I8 "(%[" #I0 "])       \n\t"

- 

- // O - output

- // IO - input/output

-@@ -51,42 +51,42 @@
- #define MUL_SHIFT_SUM(O0, O1, O2, O3, O4, O5, O6, O7,                          \

-                       IO0, IO1, IO2, IO3,                                      \

-                       I0, I1, I2, I3, I4, I5, I6, I7)                          \

--  "mul              %["#O0"],   %["#I0"],   %[kC2]            \n\t"            \

--  "mul              %["#O1"],   %["#I0"],   %[kC1]            \n\t"            \

--  "mul              %["#O2"],   %["#I1"],   %[kC2]            \n\t"            \

--  "mul              %["#O3"],   %["#I1"],   %[kC1]            \n\t"            \

--  "mul              %["#O4"],   %["#I2"],   %[kC2]            \n\t"            \

--  "mul              %["#O5"],   %["#I2"],   %[kC1]            \n\t"            \

--  "mul              %["#O6"],   %["#I3"],   %[kC2]            \n\t"            \

--  "mul              %["#O7"],   %["#I3"],   %[kC1]            \n\t"            \

--  "sra              %["#O0"],   %["#O0"],   16                \n\t"            \

--  "sra              %["#O1"],   %["#O1"],   16                \n\t"            \

--  "sra              %["#O2"],   %["#O2"],   16                \n\t"            \

--  "sra              %["#O3"],   %["#O3"],   16                \n\t"            \

--  "sra              %["#O4"],   %["#O4"],   16                \n\t"            \

--  "sra              %["#O5"],   %["#O5"],   16                \n\t"            \

--  "sra              %["#O6"],   %["#O6"],   16                \n\t"            \

--  "sra              %["#O7"],   %["#O7"],   16                \n\t"            \

--  "addu             %["#IO0"],  %["#IO0"],  %["#I4"]          \n\t"            \

--  "addu             %["#IO1"],  %["#IO1"],  %["#I5"]          \n\t"            \

--  "subu             %["#IO2"],  %["#IO2"],  %["#I6"]          \n\t"            \

--  "subu             %["#IO3"],  %["#IO3"],  %["#I7"]          \n\t"

-+  "mul              %[" #O0 "],   %[" #I0 "],   %[kC2]        \n\t"            \

-+  "mul              %[" #O1 "],   %[" #I0 "],   %[kC1]        \n\t"            \

-+  "mul              %[" #O2 "],   %[" #I1 "],   %[kC2]        \n\t"            \

-+  "mul              %[" #O3 "],   %[" #I1 "],   %[kC1]        \n\t"            \

-+  "mul              %[" #O4 "],   %[" #I2 "],   %[kC2]        \n\t"            \

-+  "mul              %[" #O5 "],   %[" #I2 "],   %[kC1]        \n\t"            \

-+  "mul              %[" #O6 "],   %[" #I3 "],   %[kC2]        \n\t"            \

-+  "mul              %[" #O7 "],   %[" #I3 "],   %[kC1]        \n\t"            \

-+  "sra              %[" #O0 "],   %[" #O0 "],   16            \n\t"            \

-+  "sra              %[" #O1 "],   %[" #O1 "],   16            \n\t"            \

-+  "sra              %[" #O2 "],   %[" #O2 "],   16            \n\t"            \

-+  "sra              %[" #O3 "],   %[" #O3 "],   16            \n\t"            \

-+  "sra              %[" #O4 "],   %[" #O4 "],   16            \n\t"            \

-+  "sra              %[" #O5 "],   %[" #O5 "],   16            \n\t"            \

-+  "sra              %[" #O6 "],   %[" #O6 "],   16            \n\t"            \

-+  "sra              %[" #O7 "],   %[" #O7 "],   16            \n\t"            \

-+  "addu             %[" #IO0 "],  %[" #IO0 "],  %[" #I4 "]    \n\t"            \

-+  "addu             %[" #IO1 "],  %[" #IO1 "],  %[" #I5 "]    \n\t"            \

-+  "subu             %[" #IO2 "],  %[" #IO2 "],  %[" #I6 "]    \n\t"            \

-+  "subu             %[" #IO3 "],  %[" #IO3 "],  %[" #I7 "]    \n\t"

- 

- // O - output

- // I - input (macro doesn't change it)

- #define INSERT_HALF_X2(O0, O1,                                                 \

-                        I0, I1)                                                 \

--  "ins              %["#O0"],   %["#I0"], 16,    16           \n\t"            \

--  "ins              %["#O1"],   %["#I1"], 16,    16           \n\t"

-+  "ins              %[" #O0 "],   %[" #I0 "], 16,    16           \n\t"        \

-+  "ins              %[" #O1 "],   %[" #I1 "], 16,    16           \n\t"

- 

- // O - output

- // I - input (macro doesn't change it)

- #define SRA_16(O0, O1, O2, O3,                                                 \

-                I0, I1, I2, I3)                                                 \

--  "sra              %["#O0"],  %["#I0"],  16                  \n\t"            \

--  "sra              %["#O1"],  %["#I1"],  16                  \n\t"            \

--  "sra              %["#O2"],  %["#I2"],  16                  \n\t"            \

--  "sra              %["#O3"],  %["#I3"],  16                  \n\t"

-+  "sra              %[" #O0 "],  %[" #I0 "],  16                  \n\t"        \

-+  "sra              %[" #O1 "],  %[" #I1 "],  16                  \n\t"        \

-+  "sra              %[" #O2 "],  %[" #I2 "],  16                  \n\t"        \

-+  "sra              %[" #O3 "],  %[" #I3 "],  16                  \n\t"

- 

- // temp0[31..16 | 15..0] = temp8[31..16 | 15..0] + temp12[31..16 | 15..0]

- // temp1[31..16 | 15..0] = temp8[31..16 | 15..0] - temp12[31..16 | 15..0]

-@@ -96,22 +96,22 @@
- // I - input (macro doesn't change it)

- #define SHIFT_R_SUM_X2(O0, O1, O2, O3, O4, O5, O6, O7,                         \

-                        I0, I1, I2, I3, I4, I5, I6, I7)                         \

--  "addq.ph          %["#O0"],   %["#I0"],   %["#I4"]          \n\t"            \

--  "subq.ph          %["#O1"],   %["#I0"],   %["#I4"]          \n\t"            \

--  "addq.ph          %["#O2"],   %["#I1"],   %["#I5"]          \n\t"            \

--  "subq.ph          %["#O3"],   %["#I1"],   %["#I5"]          \n\t"            \

--  "addq.ph          %["#O4"],   %["#I2"],   %["#I6"]          \n\t"            \

--  "subq.ph          %["#O5"],   %["#I2"],   %["#I6"]          \n\t"            \

--  "addq.ph          %["#O6"],   %["#I3"],   %["#I7"]          \n\t"            \

--  "subq.ph          %["#O7"],   %["#I3"],   %["#I7"]          \n\t"            \

--  "shra.ph          %["#O0"],   %["#O0"],   3                 \n\t"            \

--  "shra.ph          %["#O1"],   %["#O1"],   3                 \n\t"            \

--  "shra.ph          %["#O2"],   %["#O2"],   3                 \n\t"            \

--  "shra.ph          %["#O3"],   %["#O3"],   3                 \n\t"            \

--  "shra.ph          %["#O4"],   %["#O4"],   3                 \n\t"            \

--  "shra.ph          %["#O5"],   %["#O5"],   3                 \n\t"            \

--  "shra.ph          %["#O6"],   %["#O6"],   3                 \n\t"            \

--  "shra.ph          %["#O7"],   %["#O7"],   3                 \n\t"

-+  "addq.ph          %[" #O0 "],   %[" #I0 "],   %[" #I4 "]    \n\t"            \

-+  "subq.ph          %[" #O1 "],   %[" #I0 "],   %[" #I4 "]    \n\t"            \

-+  "addq.ph          %[" #O2 "],   %[" #I1 "],   %[" #I5 "]    \n\t"            \

-+  "subq.ph          %[" #O3 "],   %[" #I1 "],   %[" #I5 "]    \n\t"            \

-+  "addq.ph          %[" #O4 "],   %[" #I2 "],   %[" #I6 "]    \n\t"            \

-+  "subq.ph          %[" #O5 "],   %[" #I2 "],   %[" #I6 "]    \n\t"            \

-+  "addq.ph          %[" #O6 "],   %[" #I3 "],   %[" #I7 "]    \n\t"            \

-+  "subq.ph          %[" #O7 "],   %[" #I3 "],   %[" #I7 "]    \n\t"            \

-+  "shra.ph          %[" #O0 "],   %[" #O0 "],   3             \n\t"            \

-+  "shra.ph          %[" #O1 "],   %[" #O1 "],   3             \n\t"            \

-+  "shra.ph          %[" #O2 "],   %[" #O2 "],   3             \n\t"            \

-+  "shra.ph          %[" #O3 "],   %[" #O3 "],   3             \n\t"            \

-+  "shra.ph          %[" #O4 "],   %[" #O4 "],   3             \n\t"            \

-+  "shra.ph          %[" #O5 "],   %[" #O5 "],   3             \n\t"            \

-+  "shra.ph          %[" #O6 "],   %[" #O6 "],   3             \n\t"            \

-+  "shra.ph          %[" #O7 "],   %[" #O7 "],   3             \n\t"

- 

- // precrq.ph.w temp0, temp8, temp2

- //   temp0 = temp8[31..16] | temp2[31..16]

-@@ -123,14 +123,14 @@
- #define PACK_2_HALVES_TO_WORD(O0, O1, O2, O3,                                  \

-                               IO0, IO1, IO2, IO3,                              \

-                               I0, I1, I2, I3)                                  \

--  "precrq.ph.w      %["#O0"],    %["#I0"],  %["#IO0"]         \n\t"            \

--  "precrq.ph.w      %["#O1"],    %["#I1"],  %["#IO1"]         \n\t"            \

--  "ins              %["#IO0"],   %["#I0"],  16,    16         \n\t"            \

--  "ins              %["#IO1"],   %["#I1"],  16,    16         \n\t"            \

--  "precrq.ph.w      %["#O2"],    %["#I2"],  %["#IO2"]         \n\t"            \

--  "precrq.ph.w      %["#O3"],    %["#I3"],  %["#IO3"]         \n\t"            \

--  "ins              %["#IO2"],   %["#I2"],  16,    16         \n\t"            \

--  "ins              %["#IO3"],   %["#I3"],  16,    16         \n\t"

-+  "precrq.ph.w      %[" #O0 "],    %[" #I0 "],  %[" #IO0 "]       \n\t"        \

-+  "precrq.ph.w      %[" #O1 "],    %[" #I1 "],  %[" #IO1 "]       \n\t"        \

-+  "ins              %[" #IO0 "],   %[" #I0 "],  16,    16         \n\t"        \

-+  "ins              %[" #IO1 "],   %[" #I1 "],  16,    16         \n\t"        \

-+  "precrq.ph.w      %[" #O2 "],    %[" #I2 "],  %[" #IO2 "]       \n\t"        \

-+  "precrq.ph.w      %[" #O3 "],    %[" #I3 "],  %[" #IO3 "]       \n\t"        \

-+  "ins              %[" #IO2 "],   %[" #I2 "],  16,    16         \n\t"        \

-+  "ins              %[" #IO3 "],   %[" #I3 "],  16,    16         \n\t"

- 

- // preceu.ph.qbr temp0, temp8

- //   temp0 = 0 | 0 | temp8[23..16] | temp8[7..0]

-@@ -140,14 +140,14 @@
- // I - input (macro doesn't change it)

- #define CONVERT_2_BYTES_TO_HALF(O0, O1, O2, O3, O4, O5, O6, O7,                \

-                                 I0, I1, I2, I3)                                \

--  "preceu.ph.qbr    %["#O0"],   %["#I0"]                      \n\t"            \

--  "preceu.ph.qbl    %["#O1"],   %["#I0"]                      \n\t"            \

--  "preceu.ph.qbr    %["#O2"],   %["#I1"]                      \n\t"            \

--  "preceu.ph.qbl    %["#O3"],   %["#I1"]                      \n\t"            \

--  "preceu.ph.qbr    %["#O4"],   %["#I2"]                      \n\t"            \

--  "preceu.ph.qbl    %["#O5"],   %["#I2"]                      \n\t"            \

--  "preceu.ph.qbr    %["#O6"],   %["#I3"]                      \n\t"            \

--  "preceu.ph.qbl    %["#O7"],   %["#I3"]                      \n\t"

-+  "preceu.ph.qbr    %[" #O0 "],   %[" #I0 "]                      \n\t"        \

-+  "preceu.ph.qbl    %[" #O1 "],   %[" #I0 "]                      \n\t"        \

-+  "preceu.ph.qbr    %[" #O2 "],   %[" #I1 "]                      \n\t"        \

-+  "preceu.ph.qbl    %[" #O3 "],   %[" #I1 "]                      \n\t"        \

-+  "preceu.ph.qbr    %[" #O4 "],   %[" #I2 "]                      \n\t"        \

-+  "preceu.ph.qbl    %[" #O5 "],   %[" #I2 "]                      \n\t"        \

-+  "preceu.ph.qbr    %[" #O6 "],   %[" #I3 "]                      \n\t"        \

-+  "preceu.ph.qbl    %[" #O7 "],   %[" #I3 "]                      \n\t"

- 

- // temp0[31..16 | 15..0] = temp0[31..16 | 15..0] + temp8[31..16 | 15..0]

- // temp0[31..16 | 15..0] = temp0[31..16 <<(s) 7 | 15..0 <<(s) 7]

-@@ -160,30 +160,30 @@
- #define STORE_SAT_SUM_X2(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7,               \

-                          I0, I1, I2, I3, I4, I5, I6, I7,                       \

-                          I8, I9, I10, I11, I12, I13)                           \

--  "addq.ph          %["#IO0"],  %["#IO0"],  %["#I0"]          \n\t"            \

--  "addq.ph          %["#IO1"],  %["#IO1"],  %["#I1"]          \n\t"            \

--  "addq.ph          %["#IO2"],  %["#IO2"],  %["#I2"]          \n\t"            \

--  "addq.ph          %["#IO3"],  %["#IO3"],  %["#I3"]          \n\t"            \

--  "addq.ph          %["#IO4"],  %["#IO4"],  %["#I4"]          \n\t"            \

--  "addq.ph          %["#IO5"],  %["#IO5"],  %["#I5"]          \n\t"            \

--  "addq.ph          %["#IO6"],  %["#IO6"],  %["#I6"]          \n\t"            \

--  "addq.ph          %["#IO7"],  %["#IO7"],  %["#I7"]          \n\t"            \

--  "shll_s.ph        %["#IO0"],  %["#IO0"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO1"],  %["#IO1"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO2"],  %["#IO2"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO3"],  %["#IO3"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO4"],  %["#IO4"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO5"],  %["#IO5"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO6"],  %["#IO6"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO7"],  %["#IO7"],  7                 \n\t"            \

--  "precrqu_s.qb.ph  %["#IO0"],  %["#IO1"],  %["#IO0"]         \n\t"            \

--  "precrqu_s.qb.ph  %["#IO2"],  %["#IO3"],  %["#IO2"]         \n\t"            \

--  "precrqu_s.qb.ph  %["#IO4"],  %["#IO5"],  %["#IO4"]         \n\t"            \

--  "precrqu_s.qb.ph  %["#IO6"],  %["#IO7"],  %["#IO6"]         \n\t"            \

--  "usw              %["#IO0"],  "XSTR(I13)"*"#I9"(%["#I8"])   \n\t"            \

--  "usw              %["#IO2"],  "XSTR(I13)"*"#I10"(%["#I8"])  \n\t"            \

--  "usw              %["#IO4"],  "XSTR(I13)"*"#I11"(%["#I8"])  \n\t"            \

--  "usw              %["#IO6"],  "XSTR(I13)"*"#I12"(%["#I8"])  \n\t"

-+  "addq.ph          %[" #IO0 "],  %[" #IO0 "],  %[" #I0 "]          \n\t"      \

-+  "addq.ph          %[" #IO1 "],  %[" #IO1 "],  %[" #I1 "]          \n\t"      \

-+  "addq.ph          %[" #IO2 "],  %[" #IO2 "],  %[" #I2 "]          \n\t"      \

-+  "addq.ph          %[" #IO3 "],  %[" #IO3 "],  %[" #I3 "]          \n\t"      \

-+  "addq.ph          %[" #IO4 "],  %[" #IO4 "],  %[" #I4 "]          \n\t"      \

-+  "addq.ph          %[" #IO5 "],  %[" #IO5 "],  %[" #I5 "]          \n\t"      \

-+  "addq.ph          %[" #IO6 "],  %[" #IO6 "],  %[" #I6 "]          \n\t"      \

-+  "addq.ph          %[" #IO7 "],  %[" #IO7 "],  %[" #I7 "]          \n\t"      \

-+  "shll_s.ph        %[" #IO0 "],  %[" #IO0 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO1 "],  %[" #IO1 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO2 "],  %[" #IO2 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO3 "],  %[" #IO3 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO4 "],  %[" #IO4 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO5 "],  %[" #IO5 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO6 "],  %[" #IO6 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO7 "],  %[" #IO7 "],  7                   \n\t"      \

-+  "precrqu_s.qb.ph  %[" #IO0 "],  %[" #IO1 "],  %[" #IO0 "]         \n\t"      \

-+  "precrqu_s.qb.ph  %[" #IO2 "],  %[" #IO3 "],  %[" #IO2 "]         \n\t"      \

-+  "precrqu_s.qb.ph  %[" #IO4 "],  %[" #IO5 "],  %[" #IO4 "]         \n\t"      \

-+  "precrqu_s.qb.ph  %[" #IO6 "],  %[" #IO7 "],  %[" #IO6 "]         \n\t"      \

-+  "usw              %[" #IO0 "],  "XSTR(I13)"*" #I9 "(%[" #I8 "])   \n\t"      \

-+  "usw              %[" #IO2 "],  "XSTR(I13)"*" #I10 "(%[" #I8 "])  \n\t"      \

-+  "usw              %[" #IO4 "],  "XSTR(I13)"*" #I11 "(%[" #I8 "])  \n\t"      \

-+  "usw              %[" #IO6 "],  "XSTR(I13)"*" #I12 "(%[" #I8 "])  \n\t"

- 

- #define OUTPUT_EARLY_CLOBBER_REGS_10()                                         \

-   : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),             \

-diff --git a/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c
-index 9c9665f..46f207b 100644
---- a/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c
-@@ -34,15 +34,15 @@
-     G = G - t2 + kGCst;                                                        \

-     B = B + kBCst;                                                             \

-     __asm__ volatile (                                                         \

--      "shll_s.w         %["#R"],      %["#R"],        9              \n\t"     \

--      "shll_s.w         %["#G"],      %["#G"],        9              \n\t"     \

--      "shll_s.w         %["#B"],      %["#B"],        9              \n\t"     \

--      "precrqu_s.qb.ph  %["#R"],      %["#R"],        $zero          \n\t"     \

--      "precrqu_s.qb.ph  %["#G"],      %["#G"],        $zero          \n\t"     \

--      "precrqu_s.qb.ph  %["#B"],      %["#B"],        $zero          \n\t"     \

--      "srl              %["#R"],      %["#R"],        24             \n\t"     \

--      "srl              %["#G"],      %["#G"],        24             \n\t"     \

--      "srl              %["#B"],      %["#B"],        24             \n\t"     \

-+      "shll_s.w         %[" #R "],      %[" #R "],        9          \n\t"     \

-+      "shll_s.w         %[" #G "],      %[" #G "],        9          \n\t"     \

-+      "shll_s.w         %[" #B "],      %[" #B "],        9          \n\t"     \

-+      "precrqu_s.qb.ph  %[" #R "],      %[" #R "],        $zero      \n\t"     \

-+      "precrqu_s.qb.ph  %[" #G "],      %[" #G "],        $zero      \n\t"     \

-+      "precrqu_s.qb.ph  %[" #B "],      %[" #B "],        $zero      \n\t"     \

-+      "srl              %[" #R "],      %[" #R "],        24         \n\t"     \

-+      "srl              %[" #G "],      %[" #G "],        24         \n\t"     \

-+      "srl              %[" #B "],      %[" #B "],        24         \n\t"     \

-       : [R]"+r"(R), [G]"+r"(G), [B]"+r"(B)                                     \

-       :                                                                        \

-     );                                                                         \

-diff --git a/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c
-index 43f02cc..45a2200 100644
---- a/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c
-@@ -39,12 +39,12 @@
-   "addu             %[temp5],   %[temp0],       %[temp1]        \n\t"          \

-   "subu             %[temp6],   %[temp0],       %[temp2]        \n\t"          \

-   "addu             %[temp7],   %[temp0],       %[temp4]        \n\t"          \

--".if "#K"                                                       \n\t"          \

-+".if " #K "                                                     \n\t"          \

-   "lbu              %[temp0],   1(%[y])                         \n\t"          \

- ".endif                                                         \n\t"          \

-   "shll_s.w         %[temp5],   %[temp5],       9               \n\t"          \

-   "shll_s.w         %[temp6],   %[temp6],       9               \n\t"          \

--".if "#K"                                                       \n\t"          \

-+".if " #K "                                                     \n\t"          \

-   "mul              %[temp0],   %[t_con_5],     %[temp0]        \n\t"          \

- ".endif                                                         \n\t"          \

-   "shll_s.w         %[temp7],   %[temp7],       9               \n\t"          \

-@@ -54,9 +54,9 @@
-   "srl              %[temp5],   %[temp5],       24              \n\t"          \

-   "srl              %[temp6],   %[temp6],       24              \n\t"          \

-   "srl              %[temp7],   %[temp7],       24              \n\t"          \

--  "sb               %[temp5],   "#R"(%[dst])                    \n\t"          \

--  "sb               %[temp6],   "#G"(%[dst])                    \n\t"          \

--  "sb               %[temp7],   "#B"(%[dst])                    \n\t"          \

-+  "sb               %[temp5],   " #R "(%[dst])                  \n\t"          \

-+  "sb               %[temp6],   " #G "(%[dst])                  \n\t"          \

-+  "sb               %[temp7],   " #B "(%[dst])                  \n\t"          \

- 

- #define ASM_CLOBBER_LIST()                                                     \

-   : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),             \

diff --git a/gnu/packages/patches/freeimage-unbundle.patch b/gnu/packages/patches/freeimage-unbundle.patch
index ca907d3276..4d9b8e25c9 100644
--- a/gnu/packages/patches/freeimage-unbundle.patch
+++ b/gnu/packages/patches/freeimage-unbundle.patch
@@ -1,4 +1,4 @@
-https://src.fedoraproject.org/cgit/rpms/freeimage.git/tree/FreeImage-3.17.0_unbundle.patch
+https://src.fedoraproject.org/cgit/rpms/freeimage.git/tree/FreeImage_unbundle.patch
 
 diff -rupN FreeImage/genfipsrclist.sh FreeImage-new/genfipsrclist.sh
 --- FreeImage/genfipsrclist.sh	2015-02-20 10:52:16.000000000 +0100
@@ -25,10 +25,10 @@ diff -rupN FreeImage/gensrclist.sh FreeImage-new/gensrclist.sh
  #!/bin/sh
  
 -DIRLIST=". Source Source/Metadata Source/FreeImageToolkit Source/LibJPEG Source/LibPNG Source/LibTIFF4 Source/ZLib Source/LibOpenJPEG Source/OpenEXR Source/OpenEXR/Half Source/OpenEXR/Iex Source/OpenEXR/IlmImf Source/OpenEXR/IlmThread Source/OpenEXR/Imath Source/OpenEXR/IexMath Source/LibRawLite Source/LibRawLite/dcraw Source/LibRawLite/internal Source/LibRawLite/libraw Source/LibRawLite/src Source/LibWebP Source/LibJXR Source/LibJXR/common/include Source/LibJXR/image/sys Source/LibJXR/jxrgluelib"
-+DIRLIST=". Source Source/Metadata Source/FreeImageToolkit Source/LibJXR Source/LibJXR/common/include Source/LibJXR/image/sys Source/LibJXR/jxrgluelib"
++DIRLIST=". Source Source/Metadata Source/FreeImageToolkit"
  
  echo "VER_MAJOR = 3" > Makefile.srcs
- echo "VER_MINOR = 17.0" >> Makefile.srcs
+ echo "VER_MINOR = 18.0" >> Makefile.srcs
 diff -rupN FreeImage/Makefile.fip FreeImage-new/Makefile.fip
 --- FreeImage/Makefile.fip	2015-03-08 18:03:56.000000000 +0100
 +++ FreeImage-new/Makefile.fip	2015-09-05 02:14:09.212684028 +0200
@@ -90,8 +90,8 @@ diff -rupN FreeImage/Makefile.gnu FreeImage-new/Makefile.gnu
 -# LibJXR
 -CXXFLAGS += -D__ANSI__
 -CXXFLAGS += $(INCLUDE)
-+override CFLAGS += $(INCLUDE) -D__ANSI__ $(shell pkg-config --cflags OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib)
-+override LDFLAGS += -ljpeg $(shell pkg-config --libs OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib)
++override CFLAGS += $(INCLUDE) -D__ANSI__ -I/usr/include/jxrlib $(shell pkg-config --cflags OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib)
++override LDFLAGS += -ljpeg -ljpegxr -ljxrglue $(shell pkg-config --libs OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib)
  
  ifeq ($(shell sh -c 'uname -m 2>/dev/null || echo not'),x86_64)
 -	CFLAGS += -fPIC
@@ -215,6 +215,18 @@ diff -rupN FreeImage/Source/FreeImage/PluginJPEG.cpp FreeImage-new/Source/FreeIm
  }
  
  #include "FreeImage.h"
+diff -rupN FreeImage/Source/FreeImage/PluginJXR.cpp FreeImage-new/Source/FreeImage/PluginJXR.cpp
+--- FreeImage/Source/FreeImage/PluginJXR.cpp	2015-03-03 23:07:08.000000000 +0100
++++ FreeImage-new/Source/FreeImage/PluginJXR.cpp	2018-07-31 23:37:58.561953201 +0200
+@@ -23,7 +23,7 @@
+ #include "Utilities.h"
+ #include "../Metadata/FreeImageTag.h"
+ 
+-#include "../LibJXR/jxrgluelib/JXRGlue.h"
++#include <JXRGlue.h>
+ 
+ // ==========================================================
+ // Plugin Interface
 diff -rupN FreeImage/Source/FreeImage/PluginPNG.cpp FreeImage-new/Source/FreeImage/PluginPNG.cpp
 --- FreeImage/Source/FreeImage/PluginPNG.cpp	2015-03-10 20:16:12.000000000 +0100
 +++ FreeImage-new/Source/FreeImage/PluginPNG.cpp	2015-09-05 02:13:52.044353363 +0200
@@ -241,38 +253,39 @@ diff -rupN FreeImage/Source/FreeImage/PluginRAW.cpp FreeImage-new/Source/FreeIma
  
  #include "FreeImage.h"
  #include "Utilities.h"
+
 diff -rupN FreeImage/Source/FreeImage/PluginTIFF.cpp FreeImage-new/Source/FreeImage/PluginTIFF.cpp
 --- FreeImage/Source/FreeImage/PluginTIFF.cpp	2015-03-02 02:07:08.000000000 +0100
 +++ FreeImage-new/Source/FreeImage/PluginTIFF.cpp	2015-09-05 02:13:52.044353363 +0200
 @@ -37,9 +37,9 @@
- 
- #include "FreeImage.h"
- #include "Utilities.h"
--#include "../LibTIFF4/tiffiop.h"
-+#include <tiffio.h>
- #include "../Metadata/FreeImageTag.h"
--#include "../OpenEXR/Half/half.h"
-+#include <OpenEXR/half.h>
- 
- #include "FreeImageIO.h"
- #include "PSDParser.h"
-@@ -194,16 +194,6 @@ TIFFFdOpen(thandle_t handle, const char
- 	return tif;
- }
- 
--/**
--Open a TIFF file for reading or writing
--@param name
--@param mode
--*/
--TIFF*
--TIFFOpen(const char* name, const char* mode) {
--	return 0;
--}
--
- // ----------------------------------------------------------
- //   TIFF library FreeImage-specific routines.
- // ----------------------------------------------------------
+ 

+ #include "FreeImage.h"

+ #include "Utilities.h"

+-#include "../LibTIFF4/tiffiop.h"

++#include <tiffio.h>

+ #include "../Metadata/FreeImageTag.h"

+-#include "../OpenEXR/Half/half.h"

++#include <OpenEXR/half.h>

+ 

+ #include "FreeImageIO.h"

+ #include "PSDParser.h"

+@@ -194,16 +194,6 @@ TIFFFdOpen(thandle_t handle, const char *name, const char *mode) {
+ 	return tif;

+ }

+ 

+-/**

+-Open a TIFF file for reading or writing

+-@param name

+-@param mode

+-*/

+-TIFF*

+-TIFFOpen(const char* name, const char* mode) {

+-	return 0;

+-}

+-

+ // ----------------------------------------------------------

+ //   TIFF library FreeImage-specific routines.

+ // ----------------------------------------------------------

 diff -rupN FreeImage/Source/FreeImage/PluginWebP.cpp FreeImage-new/Source/FreeImage/PluginWebP.cpp
 --- FreeImage/Source/FreeImage/PluginWebP.cpp	2015-03-02 02:07:08.000000000 +0100
 +++ FreeImage-new/Source/FreeImage/PluginWebP.cpp	2015-09-05 02:13:52.044353363 +0200
@@ -282,15 +295,81 @@ diff -rupN FreeImage/Source/FreeImage/PluginWebP.cpp FreeImage-new/Source/FreeIm
  
 -#include "../LibWebP/src/webp/decode.h"
 -#include "../LibWebP/src/webp/encode.h"
--#include "../LibWebP/src/enc/vp8enci.h"
 -#include "../LibWebP/src/webp/mux.h"
 +#include <webp/decode.h>
 +#include <webp/encode.h>
-+// #include "../LibWebP/src/enc/vp8enci.h"
 +#include <webp/mux.h>
  
  // ==========================================================
  // Plugin Interface
+ diff -rupN FreeImage/Source/FreeImage/PSDParser.cpp FreeImage-new/Source/FreeImage/PSDParser.cpp
+--- FreeImage/Source/FreeImage/PSDParser.cpp	2016-02-11 03:18:02.000000000 +0100
++++ FreeImage-new/Source/FreeImage/PSDParser.cpp	2018-08-01 00:17:18.323822675 +0200
+@@ -133,8 +133,8 @@ public:
+ template <>
+ class PSDGetValue<8> {
+ public:
+-	static inline UINT64 get(const BYTE * iprBuffer) {
+-		UINT64 v = ((const UINT64*)iprBuffer)[0];
++	static inline uint64_t get(const BYTE * iprBuffer) {
++		uint64_t v = ((const uint64_t*)iprBuffer)[0];
+ #ifndef FREEIMAGE_BIGENDIAN
+ 		SwapInt64(&v);
+ #endif
+@@ -147,7 +147,7 @@ public:
+ 
+ // --------------------------------------------------------------------------
+ 
+-static UINT64
++static uint64_t
+ psdReadSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header) {
+ 	if(header._Version == 1) {
+ 		BYTE Length[4];
+@@ -199,11 +199,11 @@ public:
+ template <>
+ class PSDSetValue<8> {
+ public:
+-	static inline void set(const BYTE * iprBuffer, UINT64 v) {
++	static inline void set(const BYTE * iprBuffer, uint64_t v) {
+ #ifndef FREEIMAGE_BIGENDIAN
+ 		SwapInt64(&v);
+ #endif
+-		((UINT64*)iprBuffer)[0] = v;
++		((uint64_t*)iprBuffer)[0] = v;
+ 	}
+ };
+ 
+@@ -213,7 +213,7 @@ public:
+ // --------------------------------------------------------------------------
+ 
+ static inline bool
+-psdWriteSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header, UINT64 v) {
++psdWriteSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header, uint64_t v) {
+ 	if(header._Version == 1) {
+ 		BYTE Length[4];
+ 		psdSetLongValue(Length, sizeof(Length), (DWORD)v);
+@@ -1063,10 +1063,10 @@ unsigned psdParser::GetChannelOffset(FIB
+ bool psdParser::ReadLayerAndMaskInfoSection(FreeImageIO *io, fi_handle handle)	{
+ 	bool bSuccess = true;
+ 
+-	UINT64 nTotalBytes = psdReadSize(io, handle, _headerInfo);
++	uint64_t nTotalBytes = psdReadSize(io, handle, _headerInfo);
+ 
+ 	// Hack to handle large PSB files without using fseeko().
+-	if (sizeof(long) < sizeof(UINT64)) {
++	if (sizeof(long) < sizeof(uint64_t)) {
+ 		const long offset = 0x10000000;
+ 		while (nTotalBytes > offset) {
+ 			if (io->seek_proc(handle, offset, SEEK_CUR) != 0) {
+@@ -1672,7 +1672,7 @@ bool psdParser::WriteLayerAndMaskInfoSec
+ 	// Short section with no layers.
+ 	BYTE IntValue[4];
+ 
+-	UINT64 size;
++	uint64_t size;
+ 	if(_headerInfo._Version == 1) {
+ 		size = 8;
+ 	} else {
 diff -rupN FreeImage/Source/FreeImage/ZLibInterface.cpp FreeImage-new/Source/FreeImage/ZLibInterface.cpp
 --- FreeImage/Source/FreeImage/ZLibInterface.cpp	2015-03-02 02:07:10.000000000 +0100
 +++ FreeImage-new/Source/FreeImage/ZLibInterface.cpp	2015-09-05 02:13:52.044353363 +0200
@@ -536,3 +615,21 @@ diff -rupN FreeImage/Source/Metadata/XTIFF.cpp FreeImage-new/Source/Metadata/XTI
  
  		if(skip_write_field(tif, tag_id)) {
  			// skip tags that are already handled by the LibTIFF writing process
+diff -rupN FreeImage/Source/Utilities.h FreeImage-new/Source/Utilities.h
+--- FreeImage/Source/Utilities.h	2016-04-11 15:15:32.000000000 +0200
++++ FreeImage-new/Source/Utilities.h	2018-08-01 00:16:29.826825358 +0200
+@@ -446,12 +446,12 @@ SwapLong(DWORD *lp) {
+ }
+  
+ inline void
+-SwapInt64(UINT64 *arg) {
++SwapInt64(uint64_t *arg) {
+ #if defined(_MSC_VER) && _MSC_VER >= 1310
+ 	*arg = _byteswap_uint64(*arg);
+ #else
+ 	union Swap {
+-		UINT64 sv;
++		uint64_t sv;
+ 		DWORD ul[2];
+ 	} tmp, result;
+ 	tmp.sv = *arg;
diff --git a/gnu/packages/patches/gcc-7-cross-mingw.patch b/gnu/packages/patches/gcc-7-cross-mingw.patch
new file mode 100644
index 0000000000..eec6f88953
--- /dev/null
+++ b/gnu/packages/patches/gcc-7-cross-mingw.patch
@@ -0,0 +1,24 @@
+This fixes
+
+../../../../gcc-7.4.0/libstdc++-v3/libsupc++/new_opa.cc: In function ‘void* __gnu_cxx::aligned_alloc(std::size_t, std::size_t)’:
+../../../../gcc-7.4.0/libstdc++-v3/libsupc++/new_opa.cc:78:10: error: ‘memalign’ was not declared in this scope
+   return memalign (al, sz);
+          ^~~~~~~~
+../../../../gcc-7.4.0/libstdc++-v3/libsupc++/new_opa.cc:78:10: note: suggested alternative: ‘max_align_t’
+   return memalign (al, sz);
+          ^~~~~~~~
+          max_align_t
+
+diff --git a/libstdc++-v3/libsupc++/new_opa.cc b/libstdc++-v3/libsupc++/new_opa.cc
+index 94e79cadb0e..084900e0daf 100644
+--- a/libstdc++-v3/libsupc++/new_opa.cc
++++ b/libstdc++-v3/libsupc++/new_opa.cc
+@@ -39,6 +39,8 @@ extern "C" void *memalign(std::size_t boundary, std::size_t size);
+ # endif
+ #endif
+ 
++#define memalign _aligned_malloc
++
+ using std::new_handler;
+ using std::bad_alloc;
+ 
diff --git a/gnu/packages/patches/gcc-boot-2.95.3.patch b/gnu/packages/patches/gcc-boot-2.95.3.patch
new file mode 100644
index 0000000000..fd167ae052
--- /dev/null
+++ b/gnu/packages/patches/gcc-boot-2.95.3.patch
@@ -0,0 +1,137 @@
+This patch enables building gcc-2.95.3 using TCC and Mes C Library.
+
+  * Disable building DOC
+  * Avoid running `fixproto'.
+  * Force running `fixinc'.
+  * Replace Makefile trickery of creating an libgcc1.a archive, then
+    extracting the .o files later to create a new libgcc2.a archive.
+    Instead, keep temporary .o files.
+
+Upstream status: Not presented upstream.
+
+diff -purN -x foo.c -x BOOT -x BOOT-2 -x BOOT-strict -x .git -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC ../gcc-2.95.3/gcc/Makefile.in gcc-2.95.3/gcc/Makefile.in
+--- ../gcc-2.95.3/gcc/Makefile.in	2001-01-25 15:02:58.000000000 +0100
++++ gcc-2.95.3/gcc/Makefile.in	2018-06-23 11:46:03.525159181 +0200
+@@ -221,7 +221,7 @@ RANLIB_TEST_FOR_TARGET = \
+ SYSTEM_HEADER_DIR = /usr/include
+ 
+ # Control whether to run fixproto.
+-STMP_FIXPROTO = stmp-fixproto
++# STMP_FIXPROTO = stmp-fixproto
+ 
+ # Test to see whether <limits.h> exists in the system header files.
+ LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
+@@ -958,6 +958,7 @@ libgcc1.cross:
+ # fragments.
+ libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
+ 	-rm -f tmplibgcc1.a
++	mkdir -p libgcc1-o
+ # Actually build it in tmplibgcc1.a, then rename at end,
+ # so that libgcc1.a itself remains nonexistent if compilation is aborted.
+ # -e causes any failing command to make this rule fail.
+@@ -974,6 +975,7 @@ libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1F
+ 	  if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	  mv libgcc1$(objext) $${name}$(objext); \
+ 	  $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
++	  mv $${name}$(objext) libgcc1-o; \
+ 	  rm -f $${name}$(objext); \
+ 	done
+ # Some shells crash when a loop has no items.
+@@ -994,6 +996,7 @@ libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1F
+ 	    if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	    $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \
+ 	    if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
++	    mv $${name}$(objext) libgcc1-o; \
+ 	    rm -f $${name}.s $${name}$(objext); \
+ 	  else true; \
+ 	  fi; \
+@@ -1024,6 +1027,7 @@ libgcc1-asm.a: libgcc2.ready config.stat
+ 	  if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	  mv libgcc1$(objext) $${name}$(objext); \
+ 	  $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) tmplibgcc1.a $${name}$(objext); \
++	  mv $${name}$(objext) libgcc1-o; \
+ 	  rm -f $${name}$(objext); \
+ 	done
+ 	-rm -f libgcc1.S
+@@ -1062,6 +1066,7 @@ libgcc2.a: libgcc2.c libgcc2.ready $(CON
+ # Actually build it in tmplibgcc2.a, then rename at end,
+ # so that libgcc2.a itself remains nonexistent if compilation is aborted.
+ 	-rm -f tmplibgcc2.a
++	mkdir -p libgcc2-o
+ # -e causes any failing command to make this rule fail.
+ # -e doesn't work in certain shells, so we test $$? as well.
+ # lynx has a broken ar, it always complains when the initial library is
+@@ -1139,6 +1144,7 @@ libgcc2.a: libgcc2.c libgcc2.ready $(CON
+ 	    $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
+ 	    if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	    $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) tmplibgcc2.a $${oname}$(objext); \
++	    mv $${oname}$(objext) libgcc2-o;\
+ 	    rm -f $${name}.s $${oname}$(objext); \
+ 	  fi; \
+ 	done
+@@ -1156,7 +1162,7 @@ libgcc.a: $(LIBGCC1) $(LIBGCC2)
+ 	-rm -rf tmplibgcc.a libgcc.a tmpcopy
+ 	mkdir tmpcopy
+ 	-if [ x$(LIBGCC1) != x ];			\
+-	then (cd tmpcopy; $(AR_FOR_TARGET) x ../$(LIBGCC1));	\
++	then cp -v libgcc1-o/*.o tmpcopy;		\
+ 	else true;					\
+ 	fi
+ # Some versions of ar (specifically the one in RISC/os 5.x), create an
+@@ -1164,7 +1170,7 @@ libgcc.a: $(LIBGCC1) $(LIBGCC2)
+ # the second ar command tries to overwrite this file.  To avoid the error
+ # message from ar, we make sure all files are writable.
+ 	-(cd tmpcopy; chmod +w * > /dev/null 2>&1)
+-	(cd tmpcopy; $(AR_FOR_TARGET) x ../$(LIBGCC2))
++	cp -v libgcc2-o/*.o tmpcopy
+ 	(cd tmpcopy; $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) ../tmplibgcc.a *$(objext))
+ 	rm -rf tmpcopy
+ 	-if $(RANLIB_TEST_FOR_TARGET) ; then \
+@@ -2093,14 +2099,18 @@ gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS)
+ # s-* so that mostlyclean does not force the include directory to
+ # be rebuilt.
+ 
++# STMP_FIXINC = @STMP_FIXINC@
++STMP_FIXINC = stmp-fixinc
++
+ # Build the include directory including float.h (which no longer depends upon
+ # enquire).
+-stmp-int-hdrs: stmp-fixinc $(USER_H) xlimits.h
++stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) xlimits.h
+ # Copy in the headers provided with gcc.
+ # The sed command gets just the last file name component;
+ # this is necessary because VPATH could add a dirname.
+ # Using basename would be simpler, but some systems don't have it.
+ # The touch command is here to workaround an AIX/Linux NFS bug.
++	-if [ -d include ] ; then true; else mkdir include; chmod a+rx include; fi
+ 	for file in .. $(USER_H); do \
+ 	  if [ X$$file != X.. ]; then \
+ 	    realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
+@@ -2265,16 +2275,17 @@ stmp-fixproto: fixhdr.ready fixproto stm
+ #
+ # Remake the info files.
+ 
+-doc: info
+-info: cpp.info gcc.info lang.info
+-
+-cpp.info: $(srcdir)/cpp.texi
+-	$(MAKEINFO) $(MAKEINFOFLAGS) -I$(srcdir) -o cpp.info $(srcdir)/cpp.texi
+-
+-gcc.info: $(srcdir)/gcc.texi $(srcdir)/extend.texi $(srcdir)/install.texi \
+-	  $(srcdir)/invoke.texi $(srcdir)/md.texi $(srcdir)/rtl.texi \
+-	  $(srcdir)/tm.texi $(srcdir)/gcov.texi
+-	$(MAKEINFO) $(MAKEINFOFLAGS) -I$(srcdir) -o gcc.info $(srcdir)/gcc.texi
++doc:
++# doc: info
++# info: cpp.info gcc.info lang.info
++
++# cpp.info: $(srcdir)/cpp.texi
++# 	$(MAKEINFO) $(MAKEINFOFLAGS) -I$(srcdir) -o cpp.info $(srcdir)/cpp.texi
++
++# gcc.info: $(srcdir)/gcc.texi $(srcdir)/extend.texi $(srcdir)/install.texi \
++# 	  $(srcdir)/invoke.texi $(srcdir)/md.texi $(srcdir)/rtl.texi \
++# 	  $(srcdir)/tm.texi $(srcdir)/gcov.texi
++# 	$(MAKEINFO) $(MAKEINFOFLAGS) -I$(srcdir) -o gcc.info $(srcdir)/gcc.texi
+ 
+ dvi: gcc.dvi cpp.dvi lang.dvi
+ 
diff --git a/gnu/packages/patches/gcc-boot-4.7.4.patch b/gnu/packages/patches/gcc-boot-4.7.4.patch
new file mode 100644
index 0000000000..3e51e31fdf
--- /dev/null
+++ b/gnu/packages/patches/gcc-boot-4.7.4.patch
@@ -0,0 +1,68 @@
+This patch enables building gcc-4.7.4 using gcc-2.95.3 and glibc-2.2.5
+
+  * Tweak Makefile to allow overriding NATIVE_SYSTEM_HEADER_DIR using #:makeflags
+  * Add missing limits.h include.
+  * Add SSIZE_MAX define.  The SSIZE_MAX define has been added to Mes
+    upstream and can be removed with the next Mes release.
+  * Remove -fbuilding-libgcc flag, it assumes features being present from a
+    newer gcc or glibc.
+  * [MES_BOOTSTRAP_GCC]: Disable threads harder.
+
+Upstream status: not presented upstream.
+
+diff --git a/gcc/Makefile.in b/gcc/Makefile.in
+index f3cc49fdb18..bc5718fc9a6 100644
+--- a/gcc/Makefile.in
++++ b/gcc/Makefile.in
+@@ -458,7 +458,7 @@ LINKER_PLUGIN_API_H = $(srcdir)/../include/plugin-api.h
+ LTO_SYMTAB_H = $(srcdir)/../include/lto-symtab.h
+ 
+ # Default native SYSTEM_HEADER_DIR, to be overridden by targets.
+-NATIVE_SYSTEM_HEADER_DIR = @NATIVE_SYSTEM_HEADER_DIR@
++# NATIVE_SYSTEM_HEADER_DIR = @NATIVE_SYSTEM_HEADER_DIR@
+ # Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
+ CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
+ 
+diff --git a/gcc/config/host-linux.c b/gcc/config/host-linux.c
+index 94b7a0b89a7..ab2baab55ca 100644
+--- a/gcc/config/host-linux.c
++++ b/gcc/config/host-linux.c
+@@ -23,6 +23,12 @@
+ #include "hosthooks.h"
+ #include "hosthooks-def.h"
+ 
++// ../.././gcc/config/host-linux.c:213: `SSIZE_MAX' undeclared (first
++// use in this function)
++#include <limits.h>
++#ifndef	SSIZE_MAX
++# define SSIZE_MAX	LONG_MAX
++#endif
+ 
+ /* Linux has a feature called exec-shield-randomize that perturbs the
+    address of non-fixed mapped segments by a (relatively) small amount.
+diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
+index c301ff03cae..f86318c3bd5 100644
+--- a/libgcc/Makefile.in
++++ b/libgcc/Makefile.in
+@@ -225,7 +225,7 @@ endif
+ LIBGCC2_DEBUG_CFLAGS = -g
+ LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
+ 		 $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \
+-		 -fbuilding-libgcc -fno-stack-protector \
++		 -fno-stack-protector \
+ 		 $(INHIBIT_LIBC_CFLAGS)
+ 
+ # Additional options to use when compiling libgcc2.a.
+diff --git a/libgcc/generic-morestack-thread.c b/libgcc/generic-morestack-thread.c
+index bbe6dd12b5a..1d1d48223d7 100644
+--- a/libgcc/generic-morestack-thread.c
++++ b/libgcc/generic-morestack-thread.c
+@@ -35,7 +35,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    will want to define inhibit_libc while building a compiler which
+    can build glibc.  */
+ 
+-#ifndef inhibit_libc
++#if 0 //!defined (inhibit_libc) && !MES_BOOTSTRAP_GCC
+ 
+ #include <errno.h>
+ #include <pthread.h>
diff --git a/gnu/packages/patches/gdm-CVE-2018-14424.patch b/gnu/packages/patches/gdm-CVE-2018-14424.patch
deleted file mode 100644
index 88a71f4151..0000000000
--- a/gnu/packages/patches/gdm-CVE-2018-14424.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-Fix CVE-2018-14424:
-
-https://gitlab.gnome.org/GNOME/gdm/issues/401
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-14424
-
-Patch copied from upstream source repository:
-
-https://gitlab.gnome.org/GNOME/gdm/commit/1ac1697b3b019f50729a6e992065959586e170da
-
-From 1ac1697b3b019f50729a6e992065959586e170da Mon Sep 17 00:00:00 2001
-From: Chris Coulson <chris.coulson@canonical.com>
-Date: Thu, 19 Jul 2018 18:26:05 +0100
-Subject: [PATCH] display-store: Pass the display object rather than the id in
- the removed signal
-
-By the time GdmDisplayStore emits the "display-removed" signal, the display
-is no longer in the store and gdm_display_store_lookup will not work in
-signal handlers.
-
-Change the "display-removed" parameter from the display id to the GdmDisplay
-object, so that signal handers can perform any cleanup they need to do
-
-CVE-2018-14424
-
-Closes: https://gitlab.gnome.org/GNOME/gdm/issues/401
----
- daemon/gdm-display-store.c         | 11 +++--------
- daemon/gdm-display-store.h         |  2 +-
- daemon/gdm-local-display-factory.c | 13 +++----------
- daemon/gdm-manager.c               | 19 +++++++++----------
- daemon/gdm-manager.h               |  3 ++-
- 5 files changed, 18 insertions(+), 30 deletions(-)
-
-diff --git a/daemon/gdm-display-store.c b/daemon/gdm-display-store.c
-index af76f519..fd24334e 100644
---- a/daemon/gdm-display-store.c
-+++ b/daemon/gdm-display-store.c
-@@ -76,15 +76,10 @@ stored_display_new (GdmDisplayStore *store,
- static void
- stored_display_free (StoredDisplay *stored_display)
- {
--        char *id;
--
--        gdm_display_get_id (stored_display->display, &id, NULL);
--
-         g_signal_emit (G_OBJECT (stored_display->store),
-                        signals[DISPLAY_REMOVED],
-                        0,
--                       id);
--        g_free (id);
-+                       stored_display->display);
- 
-         g_debug ("GdmDisplayStore: Unreffing display: %p",
-                  stored_display->display);
-@@ -281,9 +276,9 @@ gdm_display_store_class_init (GdmDisplayStoreClass *klass)
-                               G_STRUCT_OFFSET (GdmDisplayStoreClass, display_removed),
-                               NULL,
-                               NULL,
--                              g_cclosure_marshal_VOID__STRING,
-+                              g_cclosure_marshal_VOID__OBJECT,
-                               G_TYPE_NONE,
--                              1, G_TYPE_STRING);
-+                              1, G_TYPE_OBJECT);
- 
-         g_type_class_add_private (klass, sizeof (GdmDisplayStorePrivate));
- }
-diff --git a/daemon/gdm-display-store.h b/daemon/gdm-display-store.h
-index 28359933..0aff8ee2 100644
---- a/daemon/gdm-display-store.h
-+++ b/daemon/gdm-display-store.h
-@@ -49,7 +49,7 @@ typedef struct
-         void          (* display_added)    (GdmDisplayStore *display_store,
-                                             const char      *id);
-         void          (* display_removed)  (GdmDisplayStore *display_store,
--                                            const char      *id);
-+                                            GdmDisplay      *display);
- } GdmDisplayStoreClass;
- 
- typedef enum
-diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
-index 5f1ae89e..39f3e30a 100644
---- a/daemon/gdm-local-display-factory.c
-+++ b/daemon/gdm-local-display-factory.c
-@@ -805,18 +805,11 @@ on_display_added (GdmDisplayStore        *display_store,
- 
- static void
- on_display_removed (GdmDisplayStore        *display_store,
--                    const char             *id,
-+                    GdmDisplay             *display,
-                     GdmLocalDisplayFactory *factory)
- {
--        GdmDisplay *display;
--
--        display = gdm_display_store_lookup (display_store, id);
--
--        if (display != NULL) {
--                g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), factory);
--                g_object_weak_unref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory);
--
--        }
-+        g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), factory);
-+        g_object_weak_unref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory);
- }
- 
- static gboolean
-diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
-index f17bd1a5..f6684a8b 100644
---- a/daemon/gdm-manager.c
-+++ b/daemon/gdm-manager.c
-@@ -1541,19 +1541,18 @@ on_display_status_changed (GdmDisplay *display,
- 
- static void
- on_display_removed (GdmDisplayStore *display_store,
--                    const char      *id,
-+                    GdmDisplay      *display,
-                     GdmManager      *manager)
- {
--        GdmDisplay *display;
-+        char    *id;
- 
--        display = gdm_display_store_lookup (display_store, id);
--        if (display != NULL) {
--                g_dbus_object_manager_server_unexport (manager->priv->object_manager, id);
-+        gdm_display_get_id (display, &id, NULL);
-+        g_dbus_object_manager_server_unexport (manager->priv->object_manager, id);
-+        g_free (id);
- 
--                g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), manager);
-+        g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), manager);
- 
--                g_signal_emit (manager, signals[DISPLAY_REMOVED], 0, id);
--        }
-+        g_signal_emit (manager, signals[DISPLAY_REMOVED], 0, display);
- }
- 
- static void
-@@ -2535,9 +2534,9 @@ gdm_manager_class_init (GdmManagerClass *klass)
-                               G_STRUCT_OFFSET (GdmManagerClass, display_removed),
-                               NULL,
-                               NULL,
--                              g_cclosure_marshal_VOID__STRING,
-+                              g_cclosure_marshal_VOID__OBJECT,
-                               G_TYPE_NONE,
--                              1, G_TYPE_STRING);
-+                              1, G_TYPE_OBJECT);
- 
-         g_object_class_install_property (object_class,
-                                          PROP_XDMCP_ENABLED,
-diff --git a/daemon/gdm-manager.h b/daemon/gdm-manager.h
-index 41c68a7a..c8fb3f22 100644
---- a/daemon/gdm-manager.h
-+++ b/daemon/gdm-manager.h
-@@ -24,6 +24,7 @@
- 
- #include <glib-object.h>
- 
-+#include "gdm-display.h"
- #include "gdm-manager-glue.h"
- 
- G_BEGIN_DECLS
-@@ -50,7 +51,7 @@ typedef struct
-         void          (* display_added)    (GdmManager      *manager,
-                                             const char      *id);
-         void          (* display_removed)  (GdmManager      *manager,
--                                            const char      *id);
-+                                            GdmDisplay      *display);
- } GdmManagerClass;
- 
- typedef enum
--- 
-2.17.1
-
diff --git a/gnu/packages/patches/glib-networking-connection.patch b/gnu/packages/patches/glib-networking-connection.patch
deleted file mode 100644
index f64b090ae5..0000000000
--- a/gnu/packages/patches/glib-networking-connection.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-https://gitlab.gnome.org/GNOME/glib-networking/issues/4
-https://gitlab.gnome.org/GNOME/glib-networking/commit/55daf3e5fd4bc9e4ebad1a9eab93f852dcbf527e.patch
-This ultimately rejected work-around should be removed with the next
-release, as the bug has supposedly been fixed for real.
-
-
-From 55daf3e5fd4bc9e4ebad1a9eab93f852dcbf527e Mon Sep 17 00:00:00 2001
-From: Michael Catanzaro <mcatanzaro@igalia.com>
-Date: Thu, 19 Jul 2018 11:16:35 -0500
-Subject: [PATCH] Fix intermittent failures in missing client private key test
-
-Because our APIs do nice things like encapsulating the TLS connection
-establishment, we have our test server writing to the client after
-establishing the TCP connection, because the TLS connection is
-established. It's fine in theory, but results in some weirdness like the
-server seeing its write having completed successfully before TLS
-connection establishment. Normally that's what happens and this test
-passes (server sees no error), but sometimes the server sees that the
-client has already failed and the test fails.
-
-This is unfortunate, and tricky to fix properly, so let's just remove
-the bad check. The point of the test is to ensure that the TLS
-connection is not established, and the client-side check is going to
-have to be sufficient, because rewriting the test to wait for the TLS
-connection to be established on the server side is quite tricky: my
-naive attempt resulted in both sides waiting forever on the other.
-
-P.S. At no point in this test does the server ever examine the client
-certificate. That's not quite what I expected when I added the test, but
-it's fine.
-
-Fixes #4
----
- tls/tests/connection.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/tls/tests/connection.c b/tls/tests/connection.c
-index 94645c3..390275d 100644
---- a/tls/tests/connection.c
-+++ b/tls/tests/connection.c
-@@ -1125,7 +1125,6 @@ test_client_auth_fail_missing_client_private_key (TestConnection *test,
-   g_main_loop_run (test->loop);
- 
-   g_assert_error (test->read_error, G_TLS_ERROR, G_TLS_ERROR_CERTIFICATE_REQUIRED);
--  g_assert_no_error (test->server_error);
- }
- 
- static void
--- 
-2.18.1
-
diff --git a/gnu/packages/patches/glibc-2.27-supported-locales.patch b/gnu/packages/patches/glibc-2.27-supported-locales.patch
new file mode 100644
index 0000000000..2888052bb8
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.27-supported-locales.patch
@@ -0,0 +1,33 @@
+This patch is taken from debian's glibc package (generate-supported.mk).
+It install the localedata/SUPPORTED file of the glibc. This file lists
+all the supported locales of the glibc.
+
+diff --git a/localedata/Makefile.old b/localedata/Makefile
+index 34877c0..a61d9b9 100644
+--- a/localedata/Makefile.old
++++ b/localedata/Makefile
+@@ -91,7 +91,8 @@ endif
+ # Files to install.
+ install-others := $(addprefix $(inst_i18ndir)/, \
+ 			      $(addsuffix .gz, $(charmaps)) \
+-			      $(locales))
++			      $(locales)) \
++                   $(inst_i18ndir)/SUPPORTED
+ 
+ tests: $(objdir)/iconvdata/gconv-modules
+ 
+@@ -195,6 +196,14 @@ endif
+ 
+ include SUPPORTED
+ 
++$(inst_i18ndir)/SUPPORTED: SUPPORTED $(+force)
++	for locale in $(SUPPORTED-LOCALES); do \
++		[ $$locale = true ] && continue; \
++		echo $$locale | sed 's,/, ,' >> LOCALES; \
++	done
++	$(make-target-directory)
++	$(INSTALL_DATA) LOCALES $@
++
+ INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
+ 
+ # Sometimes the whole collection of locale files should be installed.
diff --git a/gnu/packages/patches/glibc-2.28-supported-locales.patch b/gnu/packages/patches/glibc-2.28-supported-locales.patch
new file mode 100644
index 0000000000..2888052bb8
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.28-supported-locales.patch
@@ -0,0 +1,33 @@
+This patch is taken from debian's glibc package (generate-supported.mk).
+It install the localedata/SUPPORTED file of the glibc. This file lists
+all the supported locales of the glibc.
+
+diff --git a/localedata/Makefile.old b/localedata/Makefile
+index 34877c0..a61d9b9 100644
+--- a/localedata/Makefile.old
++++ b/localedata/Makefile
+@@ -91,7 +91,8 @@ endif
+ # Files to install.
+ install-others := $(addprefix $(inst_i18ndir)/, \
+ 			      $(addsuffix .gz, $(charmaps)) \
+-			      $(locales))
++			      $(locales)) \
++                   $(inst_i18ndir)/SUPPORTED
+ 
+ tests: $(objdir)/iconvdata/gconv-modules
+ 
+@@ -195,6 +196,14 @@ endif
+ 
+ include SUPPORTED
+ 
++$(inst_i18ndir)/SUPPORTED: SUPPORTED $(+force)
++	for locale in $(SUPPORTED-LOCALES); do \
++		[ $$locale = true ] && continue; \
++		echo $$locale | sed 's,/, ,' >> LOCALES; \
++	done
++	$(make-target-directory)
++	$(INSTALL_DATA) LOCALES $@
++
+ INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
+ 
+ # Sometimes the whole collection of locale files should be installed.
diff --git a/gnu/packages/patches/glibc-2.29-git-updates.patch b/gnu/packages/patches/glibc-2.29-git-updates.patch
new file mode 100644
index 0000000000..5750e9cac1
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.29-git-updates.patch
@@ -0,0 +1,742 @@
+This file tracks updates from the "release/2.29/master" branch:
+https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/release/2.29/master
+
+Abridged commits are appended to this file.
+
+From ec894251ef11723d10df04fcfd7bd2030c6e43ff Mon Sep 17 00:00:00 2001
+From: Carlos O'Donell <carlos@redhat.com>
+Date: Mon, 21 Jan 2019 22:50:12 -0500
+Subject: [PATCH] nptl: Fix pthread_rwlock_try*lock stalls (Bug 23844)
+diff --git a/nptl/pthread_rwlock_tryrdlock.c b/nptl/pthread_rwlock_tryrdlock.c
+index 368862ff07..2f94f17f36 100644
+--- a/nptl/pthread_rwlock_tryrdlock.c
++++ b/nptl/pthread_rwlock_tryrdlock.c
+@@ -94,15 +94,22 @@ __pthread_rwlock_tryrdlock (pthread_rwlock_t *rwlock)
+       /* Same as in __pthread_rwlock_rdlock_full:
+ 	 We started the read phase, so we are also responsible for
+ 	 updating the write-phase futex.  Relaxed MO is sufficient.
+-	 Note that there can be no other reader that we have to wake
+-	 because all other readers will see the read phase started by us
+-	 (or they will try to start it themselves); if a writer started
+-	 the read phase, we cannot have started it.  Furthermore, we
+-	 cannot discard a PTHREAD_RWLOCK_FUTEX_USED flag because we will
+-	 overwrite the value set by the most recent writer (or the readers
+-	 before it in case of explicit hand-over) and we know that there
+-	 are no waiting readers.  */
+-      atomic_store_relaxed (&rwlock->__data.__wrphase_futex, 0);
++	 We have to do the same steps as a writer would when handing over the
++	 read phase to use because other readers cannot distinguish between
++	 us and the writer.
++	 Note that __pthread_rwlock_tryrdlock callers will not have to be
++	 woken up because they will either see the read phase started by us
++	 or they will try to start it themselves; however, callers of
++	 __pthread_rwlock_rdlock_full just increase the reader count and then
++	 check what state the lock is in, so they cannot distinguish between
++	 us and a writer that acquired and released the lock in the
++	 meantime.  */
++      if ((atomic_exchange_relaxed (&rwlock->__data.__wrphase_futex, 0)
++	  & PTHREAD_RWLOCK_FUTEX_USED) != 0)
++	{
++	  int private = __pthread_rwlock_get_private (rwlock);
++	  futex_wake (&rwlock->__data.__wrphase_futex, INT_MAX, private);
++	}
+     }
+ 
+   return 0;
+diff --git a/nptl/pthread_rwlock_trywrlock.c b/nptl/pthread_rwlock_trywrlock.c
+index fd37a71ce4..fae475cc70 100644
+--- a/nptl/pthread_rwlock_trywrlock.c
++++ b/nptl/pthread_rwlock_trywrlock.c
+@@ -46,8 +46,15 @@ __pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock)
+ 	  &rwlock->__data.__readers, &r,
+ 	  r | PTHREAD_RWLOCK_WRPHASE | PTHREAD_RWLOCK_WRLOCKED))
+ 	{
++	  /* We have become the primary writer and we cannot have shared
++	     the PTHREAD_RWLOCK_FUTEX_USED flag with someone else, so we
++	     can simply enable blocking (see full wrlock code).  */
+ 	  atomic_store_relaxed (&rwlock->__data.__writers_futex, 1);
+-	  atomic_store_relaxed (&rwlock->__data.__wrphase_futex, 1);
++	  /* If we started a write phase, we need to enable readers to
++	     wait.  If we did not, we must not change it because other threads
++	     may have set the PTHREAD_RWLOCK_FUTEX_USED in the meantime.  */
++	  if ((r & PTHREAD_RWLOCK_WRPHASE) == 0)
++	    atomic_store_relaxed (&rwlock->__data.__wrphase_futex, 1);
+ 	  atomic_store_relaxed (&rwlock->__data.__cur_writer,
+ 	      THREAD_GETMEM (THREAD_SELF, tid));
+ 	  return 0;
+diff --git a/support/Makefile b/support/Makefile
+index 432cf2fe6c..c15b93647c 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -129,6 +129,7 @@ libsupport-routines = \
+   xpthread_mutexattr_settype \
+   xpthread_once \
+   xpthread_rwlock_init \
++  xpthread_rwlock_destroy \
+   xpthread_rwlock_rdlock \
+   xpthread_rwlock_unlock \
+   xpthread_rwlock_wrlock \
+diff --git a/support/xpthread_rwlock_destroy.c b/support/xpthread_rwlock_destroy.c
+new file mode 100644
+index 0000000000..6d6e953569
+--- /dev/null
++++ b/support/xpthread_rwlock_destroy.c
+@@ -0,0 +1,26 @@
++/* pthread_rwlock_destroy with error checking.
++   Copyright (C) 2019 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <support/xthread.h>
++
++void
++xpthread_rwlock_destroy (pthread_rwlock_t *rwlock)
++{
++  xpthread_check_return ("pthread_rwlock_destroy",
++                         pthread_rwlock_destroy (rwlock));
++}
+diff --git a/support/xthread.h b/support/xthread.h
+index 47c23235f3..9fe1f68b3b 100644
+--- a/support/xthread.h
++++ b/support/xthread.h
+@@ -84,6 +84,7 @@ void xpthread_rwlockattr_setkind_np (pthread_rwlockattr_t *attr, int pref);
+ void xpthread_rwlock_wrlock (pthread_rwlock_t *rwlock);
+ void xpthread_rwlock_rdlock (pthread_rwlock_t *rwlock);
+ void xpthread_rwlock_unlock (pthread_rwlock_t *rwlock);
++void xpthread_rwlock_destroy (pthread_rwlock_t *rwlock);
+ 
+ __END_DECLS
+ 
+From 44113a8ba24af23d7bbb174f9087a6b83a76289a Mon Sep 17 00:00:00 2001
+From: Stefan Liebler <stli@linux.ibm.com>
+Date: Thu, 7 Feb 2019 15:18:36 +0100
+Subject: [PATCH] Add compiler barriers around modifications of the robust
+ mutex list for pthread_mutex_trylock. [BZ #24180]
+diff --git a/nptl/pthread_mutex_trylock.c b/nptl/pthread_mutex_trylock.c
+index 8fe43b8f0f..bf2869eca2 100644
+--- a/nptl/pthread_mutex_trylock.c
++++ b/nptl/pthread_mutex_trylock.c
+@@ -94,6 +94,9 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+     case PTHREAD_MUTEX_ROBUST_ADAPTIVE_NP:
+       THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending,
+ 		     &mutex->__data.__list.__next);
++      /* We need to set op_pending before starting the operation.  Also
++	 see comments at ENQUEUE_MUTEX.  */
++      __asm ("" ::: "memory");
+ 
+       oldval = mutex->__data.__lock;
+       do
+@@ -119,7 +122,12 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 	      /* But it is inconsistent unless marked otherwise.  */
+ 	      mutex->__data.__owner = PTHREAD_MUTEX_INCONSISTENT;
+ 
++	      /* We must not enqueue the mutex before we have acquired it.
++		 Also see comments at ENQUEUE_MUTEX.  */
++	      __asm ("" ::: "memory");
+ 	      ENQUEUE_MUTEX (mutex);
++	      /* We need to clear op_pending after we enqueue the mutex.  */
++	      __asm ("" ::: "memory");
+ 	      THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 
+ 	      /* Note that we deliberately exist here.  If we fall
+@@ -135,6 +143,8 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 	      int kind = PTHREAD_MUTEX_TYPE (mutex);
+ 	      if (kind == PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP)
+ 		{
++		  /* We do not need to ensure ordering wrt another memory
++		     access.  Also see comments at ENQUEUE_MUTEX. */
+ 		  THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending,
+ 				 NULL);
+ 		  return EDEADLK;
+@@ -142,6 +152,8 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 
+ 	      if (kind == PTHREAD_MUTEX_ROBUST_RECURSIVE_NP)
+ 		{
++		  /* We do not need to ensure ordering wrt another memory
++		     access.  */
+ 		  THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending,
+ 				 NULL);
+ 
+@@ -160,6 +172,9 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 							id, 0);
+ 	  if (oldval != 0 && (oldval & FUTEX_OWNER_DIED) == 0)
+ 	    {
++	      /* We haven't acquired the lock as it is already acquired by
++		 another owner.  We do not need to ensure ordering wrt another
++		 memory access.  */
+ 	      THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 
+ 	      return EBUSY;
+@@ -173,13 +188,20 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 	      if (oldval == id)
+ 		lll_unlock (mutex->__data.__lock,
+ 			    PTHREAD_ROBUST_MUTEX_PSHARED (mutex));
++	      /* FIXME This violates the mutex destruction requirements.  See
++		 __pthread_mutex_unlock_full.  */
+ 	      THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 	      return ENOTRECOVERABLE;
+ 	    }
+ 	}
+       while ((oldval & FUTEX_OWNER_DIED) != 0);
+ 
++      /* We must not enqueue the mutex before we have acquired it.
++	 Also see comments at ENQUEUE_MUTEX.  */
++      __asm ("" ::: "memory");
+       ENQUEUE_MUTEX (mutex);
++      /* We need to clear op_pending after we enqueue the mutex.  */
++      __asm ("" ::: "memory");
+       THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 
+       mutex->__data.__owner = id;
+@@ -211,10 +233,15 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 	}
+ 
+ 	if (robust)
+-	  /* Note: robust PI futexes are signaled by setting bit 0.  */
+-	  THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending,
+-			 (void *) (((uintptr_t) &mutex->__data.__list.__next)
+-				   | 1));
++	  {
++	    /* Note: robust PI futexes are signaled by setting bit 0.  */
++	    THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending,
++			   (void *) (((uintptr_t) &mutex->__data.__list.__next)
++				     | 1));
++	    /* We need to set op_pending before starting the operation.  Also
++	       see comments at ENQUEUE_MUTEX.  */
++	    __asm ("" ::: "memory");
++	  }
+ 
+ 	oldval = mutex->__data.__lock;
+ 
+@@ -223,12 +250,16 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 	  {
+ 	    if (kind == PTHREAD_MUTEX_ERRORCHECK_NP)
+ 	      {
++		/* We do not need to ensure ordering wrt another memory
++		   access.  */
+ 		THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 		return EDEADLK;
+ 	      }
+ 
+ 	    if (kind == PTHREAD_MUTEX_RECURSIVE_NP)
+ 	      {
++		/* We do not need to ensure ordering wrt another memory
++		   access.  */
+ 		THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 
+ 		/* Just bump the counter.  */
+@@ -250,6 +281,9 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 	  {
+ 	    if ((oldval & FUTEX_OWNER_DIED) == 0)
+ 	      {
++		/* We haven't acquired the lock as it is already acquired by
++		   another owner.  We do not need to ensure ordering wrt another
++		   memory access.  */
+ 		THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 
+ 		return EBUSY;
+@@ -270,6 +304,9 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 	    if (INTERNAL_SYSCALL_ERROR_P (e, __err)
+ 		&& INTERNAL_SYSCALL_ERRNO (e, __err) == EWOULDBLOCK)
+ 	      {
++		/* The kernel has not yet finished the mutex owner death.
++		   We do not need to ensure ordering wrt another memory
++		   access.  */
+ 		THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 
+ 		return EBUSY;
+@@ -287,7 +324,12 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 	    /* But it is inconsistent unless marked otherwise.  */
+ 	    mutex->__data.__owner = PTHREAD_MUTEX_INCONSISTENT;
+ 
++	    /* We must not enqueue the mutex before we have acquired it.
++	       Also see comments at ENQUEUE_MUTEX.  */
++	    __asm ("" ::: "memory");
+ 	    ENQUEUE_MUTEX (mutex);
++	    /* We need to clear op_pending after we enqueue the mutex.  */
++	    __asm ("" ::: "memory");
+ 	    THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 
+ 	    /* Note that we deliberately exit here.  If we fall
+@@ -310,13 +352,20 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+ 						  PTHREAD_ROBUST_MUTEX_PSHARED (mutex)),
+ 			      0, 0);
+ 
++	    /* To the kernel, this will be visible after the kernel has
++	       acquired the mutex in the syscall.  */
+ 	    THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 	    return ENOTRECOVERABLE;
+ 	  }
+ 
+ 	if (robust)
+ 	  {
++	    /* We must not enqueue the mutex before we have acquired it.
++	       Also see comments at ENQUEUE_MUTEX.  */
++	    __asm ("" ::: "memory");
+ 	    ENQUEUE_MUTEX_PI (mutex);
++	    /* We need to clear op_pending after we enqueue the mutex.  */
++	    __asm ("" ::: "memory");
+ 	    THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
+ 	  }
+ 
+From c096b008d2671028c21ac8cf01f18a2083e73c44 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Fri, 8 Feb 2019 12:54:41 +0100
+Subject: [PATCH] nptl: Avoid fork handler lock for async-signal-safe fork [BZ
+ #24161]
+--- a/nptl/register-atfork.c
++++ b/nptl/register-atfork.c
+@@ -107,13 +107,14 @@ __unregister_atfork (void *dso_handle)
+ }
+ 
+ void
+-__run_fork_handlers (enum __run_fork_handler_type who)
++__run_fork_handlers (enum __run_fork_handler_type who, _Bool do_locking)
+ {
+   struct fork_handler *runp;
+ 
+   if (who == atfork_run_prepare)
+     {
+-      lll_lock (atfork_lock, LLL_PRIVATE);
++      if (do_locking)
++	lll_lock (atfork_lock, LLL_PRIVATE);
+       size_t sl = fork_handler_list_size (&fork_handlers);
+       for (size_t i = sl; i > 0; i--)
+ 	{
+@@ -133,7 +134,8 @@ __run_fork_handlers (enum __run_fork_handler_type who)
+ 	  else if (who == atfork_run_parent && runp->parent_handler)
+ 	    runp->parent_handler ();
+ 	}
+-      lll_unlock (atfork_lock, LLL_PRIVATE);
++      if (do_locking)
++	lll_unlock (atfork_lock, LLL_PRIVATE);
+     }
+ }
+ 
+diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c
+index bd68f18b45..14b69a6f89 100644
+--- a/sysdeps/nptl/fork.c
++++ b/sysdeps/nptl/fork.c
+@@ -55,7 +55,7 @@ __libc_fork (void)
+      but our current fork implementation is not.  */
+   bool multiple_threads = THREAD_GETMEM (THREAD_SELF, header.multiple_threads);
+ 
+-  __run_fork_handlers (atfork_run_prepare);
++  __run_fork_handlers (atfork_run_prepare, multiple_threads);
+ 
+   /* If we are not running multiple threads, we do not have to
+      preserve lock state.  If fork runs from a signal handler, only
+@@ -134,7 +134,7 @@ __libc_fork (void)
+       __rtld_lock_initialize (GL(dl_load_lock));
+ 
+       /* Run the handlers registered for the child.  */
+-      __run_fork_handlers (atfork_run_child);
++      __run_fork_handlers (atfork_run_child, multiple_threads);
+     }
+   else
+     {
+@@ -149,7 +149,7 @@ __libc_fork (void)
+ 	}
+ 
+       /* Run the handlers registered for the parent.  */
+-      __run_fork_handlers (atfork_run_parent);
++      __run_fork_handlers (atfork_run_parent, multiple_threads);
+     }
+ 
+   return pid;
+diff --git a/sysdeps/nptl/fork.h b/sysdeps/nptl/fork.h
+index a1c3b26b68..99ed76034b 100644
+--- a/sysdeps/nptl/fork.h
++++ b/sysdeps/nptl/fork.h
+@@ -52,10 +52,12 @@ enum __run_fork_handler_type
+    - atfork_run_child: run all the CHILD_HANDLER and unlocks the internal
+ 		       lock.
+    - atfork_run_parent: run all the PARENT_HANDLER and unlocks the internal
+-			lock.  */
+-extern void __run_fork_handlers (enum __run_fork_handler_type who)
+-  attribute_hidden;
++			lock.
++
++   Perform locking only if DO_LOCKING.  */
++extern void __run_fork_handlers (enum __run_fork_handler_type who,
++				 _Bool do_locking) attribute_hidden;
+ 
+ /* C library side function to register new fork handlers.  */
+ extern int __register_atfork (void (*__prepare) (void),
+
+From 067fc32968b601493f4b247a3ac00caeea3f3d61 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Fri, 15 Feb 2019 21:27:01 +0100
+Subject: [PATCH] nptl: Fix invalid Systemtap probe in pthread_join [BZ #24211]
+diff --git a/nptl/pthread_join_common.c b/nptl/pthread_join_common.c
+index ecb78ffba5..366feb376b 100644
+--- a/nptl/pthread_join_common.c
++++ b/nptl/pthread_join_common.c
+@@ -86,6 +86,7 @@ __pthread_timedjoin_ex (pthread_t threadid, void **thread_return,
+       pthread_cleanup_pop (0);
+     }
+ 
++  void *pd_result = pd->result;
+   if (__glibc_likely (result == 0))
+     {
+       /* We mark the thread as terminated and as joined.  */
+@@ -93,7 +94,7 @@ __pthread_timedjoin_ex (pthread_t threadid, void **thread_return,
+ 
+       /* Store the return value if the caller is interested.  */
+       if (thread_return != NULL)
+-	*thread_return = pd->result;
++	*thread_return = pd_result;
+ 
+       /* Free the TCB.  */
+       __free_tcb (pd);
+@@ -101,7 +102,7 @@ __pthread_timedjoin_ex (pthread_t threadid, void **thread_return,
+   else
+     pd->joinid = NULL;
+ 
+-  LIBC_PROBE (pthread_join_ret, 3, threadid, result, pd->result);
++  LIBC_PROBE (pthread_join_ret, 3, threadid, result, pd_result);
+ 
+   return result;
+ }
+
+From bc6f839fb4066be83272c735e662850af2595777 Mon Sep 17 00:00:00 2001
+From: Stefan Liebler <stli@linux.ibm.com>
+Date: Wed, 13 Mar 2019 10:45:35 +0100
+Subject: [PATCH] Fix output of LD_SHOW_AUXV=1.
+diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
+index 5f6c679a3f..5d19b100b2 100644
+--- a/elf/dl-sysdep.c
++++ b/elf/dl-sysdep.c
+@@ -328,14 +328,9 @@ _dl_show_auxv (void)
+       assert (AT_NULL == 0);
+       assert (AT_IGNORE == 1);
+ 
+-      if (av->a_type == AT_HWCAP || av->a_type == AT_HWCAP2
+-	  || AT_L1I_CACHEGEOMETRY || AT_L1D_CACHEGEOMETRY
+-	  || AT_L2_CACHEGEOMETRY || AT_L3_CACHEGEOMETRY)
+-	{
+-	  /* These are handled in a special way per platform.  */
+-	  if (_dl_procinfo (av->a_type, av->a_un.a_val) == 0)
+-	    continue;
+-	}
++      /* Some entries are handled in a special way per platform.  */
++      if (_dl_procinfo (av->a_type, av->a_un.a_val) == 0)
++	continue;
+ 
+       if (idx < sizeof (auxvars) / sizeof (auxvars[0])
+ 	  && auxvars[idx].form != unknown)
+diff --git a/sysdeps/powerpc/dl-procinfo.h b/sysdeps/powerpc/dl-procinfo.h
+index f542f7318f..dfc3b33a72 100644
+--- a/sysdeps/powerpc/dl-procinfo.h
++++ b/sysdeps/powerpc/dl-procinfo.h
+@@ -225,7 +225,7 @@ _dl_procinfo (unsigned int type, unsigned long int word)
+ 	break;
+       }
+     default:
+-      /* This should not happen.  */
++      /* Fallback to generic output mechanism.  */
+       return -1;
+     }
+    _dl_printf ("\n");
+diff --git a/sysdeps/sparc/dl-procinfo.h b/sysdeps/sparc/dl-procinfo.h
+index 282b8c5117..64ee267fc7 100644
+--- a/sysdeps/sparc/dl-procinfo.h
++++ b/sysdeps/sparc/dl-procinfo.h
+@@ -31,8 +31,8 @@ _dl_procinfo (unsigned int type, unsigned long int word)
+ {
+   int i;
+ 
+-  /* Fallback to unknown output mechanism.  */
+-  if (type == AT_HWCAP2)
++  /* Fallback to generic output mechanism.  */
++  if (type != AT_HWCAP)
+     return -1;
+ 
+   _dl_printf ("AT_HWCAP:   ");
+diff --git a/sysdeps/unix/sysv/linux/arm/dl-procinfo.h b/sysdeps/unix/sysv/linux/arm/dl-procinfo.h
+index 66c00297b7..05c62c8687 100644
+--- a/sysdeps/unix/sysv/linux/arm/dl-procinfo.h
++++ b/sysdeps/unix/sysv/linux/arm/dl-procinfo.h
+@@ -67,7 +67,7 @@ _dl_procinfo (unsigned int type, unsigned long int word)
+ 	break;
+       }
+     default:
+-      /* This should not happen.  */
++      /* Fallback to generic output mechanism.  */
+       return -1;
+     }
+   _dl_printf ("\n");
+diff --git a/sysdeps/unix/sysv/linux/i386/dl-procinfo.h b/sysdeps/unix/sysv/linux/i386/dl-procinfo.h
+index 22b43431bc..0585cdaa9c 100644
+--- a/sysdeps/unix/sysv/linux/i386/dl-procinfo.h
++++ b/sysdeps/unix/sysv/linux/i386/dl-procinfo.h
+@@ -30,8 +30,8 @@ _dl_procinfo (unsigned int type, unsigned long int word)
+      in the kernel sources.  */
+   int i;
+ 
+-  /* Fallback to unknown output mechanism.  */
+-  if (type == AT_HWCAP2)
++  /* Fallback to generic output mechanism.  */
++  if (type != AT_HWCAP)
+     return -1;
+ 
+   _dl_printf ("AT_HWCAP:   ");
+diff --git a/sysdeps/unix/sysv/linux/s390/dl-procinfo.h b/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
+index 19329a335b..d67fde368f 100644
+--- a/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
++++ b/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
+@@ -32,8 +32,8 @@ _dl_procinfo (unsigned int type, unsigned long int word)
+      in the kernel sources.  */
+   int i;
+ 
+-  /* Fallback to unknown output mechanism.  */
+-  if (type == AT_HWCAP2)
++  /* Fallback to generic output mechanism.  */
++  if (type != AT_HWCAP)
+     return -1;
+ 
+   _dl_printf ("AT_HWCAP:   ");
+
+From e28ad442e73b00ae2047d89c8cc7f9b2a0de5436 Mon Sep 17 00:00:00 2001
+From: TAMUKI Shoichi <tamuki@linet.gr.jp>
+Date: Sat, 2 Mar 2019 21:00:28 +0900
+Subject: [PATCH] ja_JP: Change the offset for Taisho gan-nen from 2 to 1 [BZ
+ #24162]
+diff --git a/localedata/locales/ja_JP b/localedata/locales/ja_JP
+index 1fd2fee44b..9bfbb2bb9b 100644
+--- a/localedata/locales/ja_JP
++++ b/localedata/locales/ja_JP
+@@ -14951,7 +14951,7 @@ era	"+:2:1990//01//01:+*:<U5E73><U6210>:%EC%Ey<U5E74>";/
+ 	"+:2:1927//01//01:1989//01//07:<U662D><U548C>:%EC%Ey<U5E74>";/
+ 	"+:1:1926//12//25:1926//12//31:<U662D><U548C>:%EC<U5143><U5E74>";/
+ 	"+:2:1913//01//01:1926//12//24:<U5927><U6B63>:%EC%Ey<U5E74>";/
+-	"+:2:1912//07//30:1912//12//31:<U5927><U6B63>:%EC<U5143><U5E74>";/
++	"+:1:1912//07//30:1912//12//31:<U5927><U6B63>:%EC<U5143><U5E74>";/
+ 	"+:6:1873//01//01:1912//07//29:<U660E><U6CBB>:%EC%Ey<U5E74>";/
+ 	"+:1:0001//01//01:1872//12//31:<U897F><U66A6>:%EC%Ey<U5E74>";/
+ 	"+:1:-0001//12//31:-*:<U7D00><U5143><U524D>:%EC%Ey<U5E74>"
+
+From 0941350c20a52447e53c5169354408e3db591f73 Mon Sep 17 00:00:00 2001
+From: TAMUKI Shoichi <tamuki@linet.gr.jp>
+Date: Tue, 2 Apr 2019 16:46:55 +0900
+Subject: [PATCH] ja_JP locale: Add entry for the new Japanese era [BZ #22964]
+diff --git a/localedata/locales/ja_JP b/localedata/locales/ja_JP
+index 9bfbb2bb9b..c64aaaff55 100644
+--- a/localedata/locales/ja_JP
++++ b/localedata/locales/ja_JP
+@@ -14946,7 +14946,9 @@ am_pm	"<U5348><U524D>";"<U5348><U5F8C>"
+ 
+ t_fmt_ampm "%p%I<U6642>%M<U5206>%S<U79D2>"
+ 
+-era	"+:2:1990//01//01:+*:<U5E73><U6210>:%EC%Ey<U5E74>";/
++era	"+:2:2020//01//01:+*:<U4EE4><U548C>:%EC%Ey<U5E74>";/
++	"+:1:2019//05//01:2019//12//31:<U4EE4><U548C>:%EC<U5143><U5E74>";/
++	"+:2:1990//01//01:2019//04//30:<U5E73><U6210>:%EC%Ey<U5E74>";/
+ 	"+:1:1989//01//08:1989//12//31:<U5E73><U6210>:%EC<U5143><U5E74>";/
+ 	"+:2:1927//01//01:1989//01//07:<U662D><U548C>:%EC%Ey<U5E74>";/
+ 	"+:1:1926//12//25:1926//12//31:<U662D><U548C>:%EC<U5143><U5E74>";/
+
+From 52b7cd6e9a701bb203023d56e84551943dc6a4c0 Mon Sep 17 00:00:00 2001
+From: Adam Maris <amaris@redhat.com>
+Date: Thu, 14 Mar 2019 16:51:16 -0400
+Subject: [PATCH] malloc: Check for large bin list corruption when inserting
+ unsorted chunk
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index feaf7ee0bf..ce771375b6 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -3876,10 +3876,14 @@ _int_malloc (mstate av, size_t bytes)
+                         {
+                           victim->fd_nextsize = fwd;
+                           victim->bk_nextsize = fwd->bk_nextsize;
++                          if (__glibc_unlikely (fwd->bk_nextsize->fd_nextsize != fwd))
++                            malloc_printerr ("malloc(): largebin double linked list corrupted (nextsize)");
+                           fwd->bk_nextsize = victim;
+                           victim->bk_nextsize->fd_nextsize = victim;
+                         }
+                       bck = fwd->bk;
++                      if (bck->fd != fwd)
++                        malloc_printerr ("malloc(): largebin double linked list corrupted (bk)");
+                     }
+                 }
+               else
+
+From c6177be4b92d5d7df50a785652d1912db511423e Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Wed, 15 May 2019 17:09:05 +0200
+Subject: [PATCH] Fix crash in _IO_wfile_sync (bug 20568)
+diff --git a/libio/wfileops.c b/libio/wfileops.c
+index 78f20486e5..bab2ba4892 100644
+--- a/libio/wfileops.c
++++ b/libio/wfileops.c
+@@ -508,11 +508,12 @@ _IO_wfile_sync (FILE *fp)
+ 	     generate the wide characters up to the current reading
+ 	     position.  */
+ 	  int nread;
+-
++	  size_t wnread = (fp->_wide_data->_IO_read_ptr
++			   - fp->_wide_data->_IO_read_base);
+ 	  fp->_wide_data->_IO_state = fp->_wide_data->_IO_last_state;
+ 	  nread = (*cv->__codecvt_do_length) (cv, &fp->_wide_data->_IO_state,
+ 					      fp->_IO_read_base,
+-					      fp->_IO_read_end, delta);
++					      fp->_IO_read_end, wnread);
+ 	  fp->_IO_read_ptr = fp->_IO_read_base + nread;
+ 	  delta = -(fp->_IO_read_end - fp->_IO_read_base - nread);
+ 	}
+
+From e3f828b8bd6e21922da8be8dee35edef09382d8d Mon Sep 17 00:00:00 2001
+From: Mark Wielaard <mark@klomp.org>
+Date: Wed, 15 May 2019 17:14:01 +0200
+Subject: [PATCH] dlfcn: Guard __dlerror_main_freeres with __libc_once_get
+ (once) [BZ#24476]
+diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
+index 27376582d0..ca42c126c1 100644
+--- a/dlfcn/dlerror.c
++++ b/dlfcn/dlerror.c
+@@ -72,9 +72,16 @@ __dlerror (void)
+   __libc_once (once, init);
+ 
+   /* Get error string.  */
+-  result = (struct dl_action_result *) __libc_getspecific (key);
+-  if (result == NULL)
+-    result = &last_result;
++  if (static_buf != NULL)
++    result = static_buf;
++  else
++    {
++      /* init () has been run and we don't use the static buffer.
++	 So we have a valid key.  */
++      result = (struct dl_action_result *) __libc_getspecific (key);
++      if (result == NULL)
++	result = &last_result;
++    }
+ 
+   /* Test whether we already returned the string.  */
+   if (result->returned != 0)
+@@ -230,13 +237,19 @@ free_key_mem (void *mem)
+ void
+ __dlerror_main_freeres (void)
+ {
+-  void *mem;
+   /* Free the global memory if used.  */
+   check_free (&last_result);
+-  /* Free the TSD memory if used.  */
+-  mem = __libc_getspecific (key);
+-  if (mem != NULL)
+-    free_key_mem (mem);
++
++  if (__libc_once_get (once) && static_buf == NULL)
++    {
++      /* init () has been run and we don't use the static buffer.
++	 So we have a valid key.  */
++      void *mem;
++      /* Free the TSD memory if used.  */
++      mem = __libc_getspecific (key);
++      if (mem != NULL)
++	free_key_mem (mem);
++    }
+ }
+ 
+ struct dlfcn_hook *_dlfcn_hook __attribute__((nocommon));
+
+From 95d66fecaabbc92ab53027e808f0fc1929c9f21a Mon Sep 17 00:00:00 2001
+From: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri, 10 May 2019 16:38:21 +0100
+Subject: [PATCH] Fix tcache count maximum (BZ #24531)
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index ce771375b6..0abd653be2 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -2919,6 +2919,8 @@ typedef struct tcache_perthread_struct
+   tcache_entry *entries[TCACHE_MAX_BINS];
+ } tcache_perthread_struct;
+ 
++#define MAX_TCACHE_COUNT 127	/* Maximum value of counts[] entries.  */
++
+ static __thread bool tcache_shutting_down = false;
+ static __thread tcache_perthread_struct *tcache = NULL;
+ 
+@@ -5124,8 +5126,11 @@ static inline int
+ __always_inline
+ do_set_tcache_count (size_t value)
+ {
+-  LIBC_PROBE (memory_tunable_tcache_count, 2, value, mp_.tcache_count);
+-  mp_.tcache_count = value;
++  if (value <= MAX_TCACHE_COUNT)
++    {
++      LIBC_PROBE (memory_tunable_tcache_count, 2, value, mp_.tcache_count);
++      mp_.tcache_count = value;
++    }
+   return 1;
+ }
+ 
+From 34fb5f61d3c3f4b8fc616ea259fa19168b58ecd4 Mon Sep 17 00:00:00 2001
+From: "Dmitry V. Levin" <ldv@altlinux.org>
+Date: Wed, 13 Feb 2019 01:20:51 +0000
+Subject: [PATCH] libio: do not attempt to free wide buffers of legacy streams
+ [BZ #24228]
+diff --git a/libio/genops.c b/libio/genops.c
+index 2a0d9b81df..11a15549e8 100644
+--- a/libio/genops.c
++++ b/libio/genops.c
+@@ -789,9 +789,16 @@ _IO_unbuffer_all (void)
+ 
+   for (fp = (FILE *) _IO_list_all; fp; fp = fp->_chain)
+     {
++      int legacy = 0;
++
++#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
++      if (__glibc_unlikely (_IO_vtable_offset (fp) != 0))
++	legacy = 1;
++#endif
++
+       if (! (fp->_flags & _IO_UNBUFFERED)
+ 	  /* Iff stream is un-orientated, it wasn't used. */
+-	  && fp->_mode != 0)
++	  && (legacy || fp->_mode != 0))
+ 	{
+ #ifdef _IO_MTSAFE_IO
+ 	  int cnt;
+@@ -805,7 +812,7 @@ _IO_unbuffer_all (void)
+ 	      __sched_yield ();
+ #endif
+ 
+-	  if (! dealloc_buffers && !(fp->_flags & _IO_USER_BUF))
++	  if (! legacy && ! dealloc_buffers && !(fp->_flags & _IO_USER_BUF))
+ 	    {
+ 	      fp->_flags |= _IO_USER_BUF;
+ 
+@@ -816,7 +823,7 @@ _IO_unbuffer_all (void)
+ 
+ 	  _IO_SETBUF (fp, NULL, 0);
+ 
+-	  if (fp->_mode > 0)
++	  if (! legacy && fp->_mode > 0)
+ 	    _IO_wsetb (fp, NULL, NULL, 0);
+ 
+ #ifdef _IO_MTSAFE_IO
+@@ -827,7 +834,8 @@ _IO_unbuffer_all (void)
+ 
+       /* Make sure that never again the wide char functions can be
+ 	 used.  */
+-      fp->_mode = -1;
++      if (! legacy)
++	fp->_mode = -1;
+     }
+ 
+ #ifdef _IO_MTSAFE_IO
+
diff --git a/gnu/packages/patches/glibc-CVE-2019-7309.patch b/gnu/packages/patches/glibc-CVE-2019-7309.patch
new file mode 100644
index 0000000000..f9f623830a
--- /dev/null
+++ b/gnu/packages/patches/glibc-CVE-2019-7309.patch
@@ -0,0 +1,76 @@
+Fix <https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-7309>.
+
+Taken from this upstream commit, sans ChangeLog updates and tests:
+<https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=3f635fb43389b54f682fc9ed2acc0b2aaf4a923d>.
+
+diff --git a/sysdeps/x86_64/memcmp.S b/sysdeps/x86_64/memcmp.S
+index 1fc487caa5..1322bb3b92 100644
+--- a/sysdeps/x86_64/memcmp.S
++++ b/sysdeps/x86_64/memcmp.S
+@@ -21,14 +21,18 @@
+ 
+ 	.text
+ ENTRY (memcmp)
+-	test	%rdx, %rdx
++#ifdef __ILP32__
++	/* Clear the upper 32 bits.  */
++	movl	%edx, %edx
++#endif
++	test	%RDX_LP, %RDX_LP
+ 	jz	L(finz)
+ 	cmpq	$1, %rdx
+-	jle	L(finr1b)
++	jbe	L(finr1b)
+ 	subq	%rdi, %rsi
+ 	movq	%rdx, %r10
+ 	cmpq	$32, %r10
+-	jge	L(gt32)
++	jae	L(gt32)
+ 	/* Handle small chunks and last block of less than 32 bytes.  */
+ L(small):
+ 	testq	$1, %r10
+@@ -156,7 +160,7 @@ L(A32):
+ 	movq	%r11, %r10
+ 	andq	$-32, %r10
+ 	cmpq	%r10, %rdi
+-        jge	L(mt16)
++        jae	L(mt16)
+ 	/* Pre-unroll to be ready for unrolled 64B loop.  */
+ 	testq	$32, %rdi
+ 	jz	L(A64)
+@@ -178,7 +182,7 @@ L(A64):
+ 	movq	%r11, %r10
+ 	andq	$-64, %r10
+ 	cmpq	%r10, %rdi
+-        jge	L(mt32)
++        jae	L(mt32)
+ 
+ L(A64main):
+ 	movdqu    (%rdi,%rsi), %xmm0
+@@ -216,7 +220,7 @@ L(mt32):
+ 	movq	%r11, %r10
+ 	andq	$-32, %r10
+ 	cmpq	%r10, %rdi
+-        jge	L(mt16)
++        jae	L(mt16)
+ 
+ L(A32main):
+ 	movdqu    (%rdi,%rsi), %xmm0
+@@ -254,7 +258,7 @@ L(ATR):
+ 	movq	%r11, %r10
+ 	andq	$-32, %r10
+ 	cmpq	%r10, %rdi
+-        jge	L(mt16)
++        jae	L(mt16)
+ 	testq	$16, %rdi
+ 	jz	L(ATR32)
+ 
+@@ -325,7 +329,7 @@ L(ATR64main):
+ 	movq	%r11, %r10
+ 	andq	$-32, %r10
+ 	cmpq	%r10, %rdi
+-        jge	L(mt16)
++        jae	L(mt16)
+ 
+ L(ATR32res):
+ 	movdqa    (%rdi,%rsi), %xmm0
diff --git a/gnu/packages/patches/glibc-CVE-2019-9169.patch b/gnu/packages/patches/glibc-CVE-2019-9169.patch
new file mode 100644
index 0000000000..029b4ddbd7
--- /dev/null
+++ b/gnu/packages/patches/glibc-CVE-2019-9169.patch
@@ -0,0 +1,22 @@
+Fix <https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9169>.
+
+Taken from this upstream commit, sans ChangeLog updates:
+https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=583dd860d5b833037175247230a328f0050dbfe9
+
+diff --git a/posix/regexec.c b/posix/regexec.c
+index 91d5a797b8..084b1222d9 100644
+--- a/posix/regexec.c
++++ b/posix/regexec.c
+@@ -1293,8 +1293,10 @@ proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs,
+ 	      else if (naccepted)
+ 		{
+ 		  char *buf = (char *) re_string_get_buffer (&mctx->input);
+-		  if (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx,
+-			      naccepted) != 0)
++		  if (mctx->input.valid_len - *pidx < naccepted
++		      || (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx,
++				  naccepted)
++			  != 0))
+ 		    return -1;
+ 		}
+ 	    }
diff --git a/gnu/packages/patches/glibc-boot-2.16.0.patch b/gnu/packages/patches/glibc-boot-2.16.0.patch
new file mode 100644
index 0000000000..5cb29bc271
--- /dev/null
+++ b/gnu/packages/patches/glibc-boot-2.16.0.patch
@@ -0,0 +1,352 @@
+This patch enables building glibc-2.2.5 using TCC and GNU Make 4.x and Mes C Library.
+
+  * Makefile: Do not link with (non-existent) libgc_eh.
+  * Makefile: Add SHELL variable, ready for substitution, export it.
+  * Makefile: Do not build or assume librpc_compat_pic.
+  * Makefile: Do not build libmesusage.
+  * gen-as-const: Always add preamble.
+  * [BOOTSTRAP_GLIBC]: Really disable rpc.
+
+Upstream status: Not presented upstream.
+
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/elf/Makefile glibc-2.16.0/elf/Makefile
+--- /home/janneke/src/glibc-2.16.0/elf/Makefile	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/elf/Makefile	2018-09-02 12:54:44.616962543 +0200
+@@ -17,6 +17,8 @@
+ 
+ # Makefile for elf subdirectory of GNU C Library.
+ 
++SHELL := /bin/sh
++
+ subdir		:= elf
+ 
+ headers		= elf.h bits/elfclass.h link.h bits/link.h
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/include/libc-symbols.h glibc-2.16.0/include/libc-symbols.h
+--- /home/janneke/src/glibc-2.16.0/include/libc-symbols.h	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/include/libc-symbols.h	2018-09-02 22:41:00.798467803 +0200
+@@ -558,9 +558,9 @@ for linking")
+ # define libc_hidden_weak(name) hidden_weak (name)
+ # ifdef LINK_OBSOLETE_RPC
+    /* libc_hidden_nolink_sunrpc should only get used in sunrpc code.  */
+-#  define libc_hidden_nolink_sunrpc(name, version) hidden_def (name)
++#  define libc_hidden_nolink_sunrpc(name, version)
+ # else
+-#  define libc_hidden_nolink_sunrpc(name, version) hidden_nolink (name, libc, version)
++#  define libc_hidden_nolink_sunrpc(name, version)
+ # endif
+ # define libc_hidden_ver(local, name) hidden_ver (local, name)
+ # define libc_hidden_data_def(name) hidden_data_def (name)
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/Makeconfig glibc-2.16.0/Makeconfig
+--- /home/janneke/src/glibc-2.16.0/Makeconfig	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/Makeconfig	2018-09-03 00:00:25.290357414 +0200
+@@ -23,6 +23,9 @@ ifneq (,)
+ This makefile requires GNU Make.
+ endif
+ 
++SHELL := /bin/sh
++export SHELL
++
+ all: # Make this the default goal
+ 
+ ifneq "$(origin +included-Makeconfig)" "file"
+@@ -521,9 +524,9 @@ ifneq ($(have-cc-with-libunwind),yes)
+ else
+   libunwind = -lunwind
+ endif
+-libgcc_eh := -Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed
++libgcc_eh := #-Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed
+ gnulib := -lgcc $(libgcc_eh)
+-static-gnulib := -lgcc -lgcc_eh $(libunwind)
++static-gnulib := -lgcc $(libunwind)
+ libc.so-gnulib := -lgcc
+ endif
+ +preinit = $(addprefix $(csu-objpfx),crti.o)
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/Makefile glibc-2.16.0/Makefile
+--- /home/janneke/src/glibc-2.16.0/Makefile	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/Makefile	2018-09-02 23:01:10.485803965 +0200
+@@ -22,6 +22,9 @@ ifneq (,)
+ This makefile requires GNU Make.
+ endif
+ 
++SHELL := /bin/sh
++export SHELL
++
+ include Makeconfig
+ 
+ 
+@@ -135,13 +138,10 @@ $(common-objpfx)linkobj/libc.so: $(elfob
+ 				 $(shlib-lds)
+ 	$(build-shlib)
+ 
+-$(common-objpfx)linkobj/libc_pic.a: $(common-objpfx)libc_pic.a \
+-				    $(common-objpfx)sunrpc/librpc_compat_pic.a
++$(common-objpfx)linkobj/libc_pic.a: $(common-objpfx)libc_pic.a
+ 	$(..)./scripts/mkinstalldirs $(common-objpfx)linkobj
+ 	(cd $(common-objpfx)linkobj; \
+ 	 $(AR) x ../libc_pic.a; \
+-	 rm $$($(AR) t ../sunrpc/librpc_compat_pic.a | sed 's/^compat-//'); \
+-	 $(AR) x ../sunrpc/librpc_compat_pic.a; \
+ 	 $(AR) cr libc_pic.a *.os; \
+ 	 rm *.os)
+ endif
+@@ -151,7 +151,7 @@ endif
+ # the current libc build for testing.
+ $(common-objpfx)testrun.sh: $(common-objpfx)config.make \
+ 			    $(..)Makeconfig $(..)Makefile
+-	(echo '#!/bin/sh'; \
++	(echo '#! $(SHELL)'; \
+ 	 echo 'builddir=`dirname "$$0"`'; \
+ 	 echo 'GCONV_PATH="$${builddir}/iconvdata" \'; \
+ 	 echo 'exec $(subst $(common-objdir),"$${builddir}",\
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/Makefile.in glibc-2.16.0/Makefile.in
+--- /home/janneke/src/glibc-2.16.0/Makefile.in	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/Makefile.in	2018-09-02 13:03:01.892962551 +0200
+@@ -9,3 +9,6 @@ all .DEFAULT:
+ install:
+ 	LANGUAGE=C LC_ALL=C; export LANGUAGE LC_ALL; \
+ 	$(MAKE) -r PARALLELMFLAGS="$(PARALLELMFLAGS)" -C $(srcdir) objdir=`pwd` $@
++
++export SHELL
++export BASH
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/malloc/Makefile glibc-2.16.0/malloc/Makefile
+--- /home/janneke/src/glibc-2.16.0/malloc/Makefile	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/malloc/Makefile	2018-09-02 17:11:33.461547394 +0200
+@@ -35,7 +35,7 @@ install-lib := libmcheck.a
+ non-lib.a := libmcheck.a
+ 
+ # Additional library.
+-extra-libs = libmemusage
++extra-libs = #libmemusage
+ extra-libs-others = $(extra-libs)
+ 
+ libmemusage-routines = memusage
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/nscd/cache.c glibc-2.16.0/nscd/cache.c
+--- /home/janneke/src/glibc-2.16.0/nscd/cache.c	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/nscd/cache.c	2018-09-02 23:38:31.757616750 +0200
+@@ -74,7 +74,11 @@ struct datahead *
+ cache_search (request_type type, const void *key, size_t len,
+ 	      struct database_dyn *table, uid_t owner)
+ {
++#if !BOOTSTRAP_GLIBC
+   unsigned long int hash = __nis_hash (key, len) % table->head->module;
++#else
++  unsigned long int hash = 0;
++#endif
+ 
+   unsigned long int nsearched = 0;
+   struct datahead *result = NULL;
+@@ -153,7 +153,11 @@ cache_add (int type, const void *key, si
+ 	       first ? _(" (first)") : "");
+     }
+ 
++#if !BOOTSTRAP_GLIBC
+   unsigned long int hash = __nis_hash (key, len) % table->head->module;
++#else
++  unsigned long int hash = 0;
++#endif
+   struct hashentry *newp;
+ 
+   newp = mempool_alloc (table, sizeof (struct hashentry), 0);
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/nscd/Makefile glibc-2.16.0/nscd/Makefile
+--- /home/janneke/src/glibc-2.16.0/nscd/Makefile	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/nscd/Makefile	2018-09-02 23:49:29.948031787 +0200
+@@ -126,9 +126,7 @@ include $(patsubst %,$(..)cppflags-itera
+ $(objpfx)nscd: $(nscd-modules:%=$(objpfx)%.o)
+ 
+ ifeq ($(build-shared),yes)
+-$(objpfx)nscd: $(common-objpfx)rt/librt.so $(shared-thread-library) \
+-	       $(common-objpfx)nis/libnsl.so
++$(objpfx)nscd: $(common-objpfx)rt/librt.so $(shared-thread-library)
+ else
+-$(objpfx)nscd: $(common-objpfx)rt/librt.a $(static-thread-library) \
+-	       $(common-objpfx)nis/libnsl.a
++$(objpfx)nscd: $(common-objpfx)rt/librt.a $(static-thread-library)
+ endif
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/nscd/nscd_helper.c glibc-2.16.0/nscd/nscd_helper.c
+--- /home/janneke/src/glibc-2.16.0/nscd/nscd_helper.c	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/nscd/nscd_helper.c	2018-09-02 23:38:04.941189464 +0200
+@@ -474,7 +474,7 @@ struct datahead *
+ __nscd_cache_search (request_type type, const char *key, size_t keylen,
+ 		     const struct mapped_database *mapped, size_t datalen)
+ {
+-  unsigned long int hash = __nis_hash (key, keylen) % mapped->head->module;
++  unsigned long int hash = 0;
+   size_t datasize = mapped->datasize;
+ 
+   ref_t trail = mapped->head->array[hash];
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/nss/getent.c glibc-2.16.0/nss/getent.c
+--- /home/janneke/src/glibc-2.16.0/nss/function.def	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/nss/function.def	2018-09-18 13:54:49.582060539 +0200
+@@ -63,10 +63,12 @@
+ DEFINE_GET (files, pwnam)
+ DEFINE_GET (files, pwuid)
+ 
++#if !BOOTSTRAP_GLIBC
+ /* rpc */
+ DEFINE_ENT (files, rpc)
+ DEFINE_GETBY (files, rpc, name)
+ DEFINE_GETBY (files, rpc, number)
++#endif
+ 
+ /* services */
+ DEFINE_ENT (files, serv)
+diff -u ~/src/glibc-2.16.0/nss/getent.c glibc-2.16.0/nss/getent.c
+--- /home/janneke/src/glibc-2.16.0/nss/getent.c	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/nss/getent.c	2018-09-18 13:57:41.856849140 +0200
+@@ -700,6 +700,7 @@
+   return result;
+ }
+ 
++#if !BOOTSTRAP_GLIBC
+ /* Now is all for rpc */
+ static inline void
+ print_rpc (struct rpcent *rpc)
+@@ -745,6 +746,7 @@
+ 
+   return result;
+ }
++#endif //rpc
+ 
+ /* for services */
+ static void
+@@ -880,7 +882,9 @@
+ D(networks)
+ D(passwd)
+ D(protocols)
++#if !BOOTSTRAP_GLIBC
+ D(rpc)
++#endif
+ D(services)
+ D(shadow)
+ #undef D
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/resolv/netdb.h glibc-2.16.0/resolv/netdb.h
+--- /home/janneke/src/glibc-2.16.0/resolv/netdb.h	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/resolv/netdb.h	2018-09-08 08:49:30.537811219 +0200
+@@ -26,11 +26,13 @@
+ 
+ #include <netinet/in.h>
+ #include <stdint.h>
++#if 0 //!BOOTSTRAP_GLIBC
+ #ifdef __USE_MISC
+ /* This is necessary to make this include file properly replace the
+    Sun version.  */
+ # include <rpc/netdb.h>
+ #endif
++#endif
+ 
+ #ifdef __USE_GNU
+ # define __need_sigevent_t
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/Rules glibc-2.16.0/Rules
+--- /home/janneke/src/glibc-2.16.0/Rules	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/Rules	2018-09-02 10:52:06.927362861 +0200
+@@ -24,6 +24,9 @@ ifneq (,)
+ This makefile requires GNU Make.
+ endif
+ 
++export SHELL
++export BASH
++
+ all: # Don't let the default goal come from Makeconfig.
+ 
+ include $(firstword $(..) ../)Makeconfig
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/scripts/gen-as-const.awk glibc-2.16.0/scripts/gen-as-const.awk
+--- /home/janneke/src/glibc-2.16.0/scripts/gen-as-const.awk	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/scripts/gen-as-const.awk	2018-09-01 18:08:37.266516330 +0200
+@@ -14,6 +14,12 @@ BEGIN { started = 0 }
+ 
+ NF >= 1 && !started {
+   if (test) {
++    print "\n#include <stddef.h>";
++    print "\n#include <stdint.h>";
++#    print "\ntypedef unsigned long size_t;";
++    print "\n#ifndef offsetof";
++    print "\n#define offsetof(type, field) ((size_t)&((type *)0)->field)";
++    print "\n#endif";
+     print "\n#include <inttypes.h>";
+     print "\n#include <stdio.h>";
+     print "\n#include <bits/wordsize.h>";
+@@ -33,8 +39,15 @@ NF >= 1 && !started {
+       " source, #name, U (asconst_##name), #expr, (c_t) (expr));" \
+       " } else ++good;\n";
+   }
+-  else
++  else {
++    print "\n#include <stddef.h>";
++    print "\n#include <stdint.h>";
++#    print "\ntypedef unsigned long size_t;";
++    print "\n#ifndef offsetof";
++    print "\n#define offsetof(type, field) ((size_t)&((type *)0)->field)";
++    print "\n#endif";
+     print "void dummy(void) {";
++  }
+   started = 1;
+ }
+ 
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/sunrpc/auth_none.c glibc-2.16.0/sunrpc/auth_none.c
+--- /home/janneke/src/glibc-2.16.0/sunrpc/auth_none.c	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/sunrpc/auth_none.c	2018-09-02 22:09:21.629007932 +0200
+@@ -95,7 +95,9 @@ authnone_create (void)
+   __libc_once (authnone_private_guard, authnone_create_once);
+   return &authnone_private.no_client;
+ }
++#if !BOOTSTRAP_GLIBC
+ libc_hidden_nolink_sunrpc (authnone_create, GLIBC_2_0)
++#endif
+ 
+ static bool_t
+ authnone_marshal (AUTH *client, XDR *xdrs)
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/sunrpc/authuxprot.c glibc-2.16.0/sunrpc/authuxprot.c
+--- /home/janneke/src/glibc-2.16.0/sunrpc/authuxprot.c	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/sunrpc/authuxprot.c	2018-09-02 22:15:51.927158451 +0200
+@@ -63,4 +63,6 @@ xdr_authunix_parms (XDR * xdrs, struct a
+     }
+   return FALSE;
+ }
++#if !BOOTSTRAP_GLIBC
+ libc_hidden_nolink_sunrpc (xdr_authunix_parms, GLIBC_2_0)
++#endif
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/sunrpc/bindrsvprt.c glibc-2.16.0/sunrpc/bindrsvprt.c
+--- /home/janneke/src/glibc-2.16.0/sunrpc/bindrsvprt.c	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/sunrpc/bindrsvprt.c	2018-09-02 22:24:32.687187675 +0200
+@@ -96,4 +96,7 @@ bindresvport (int sd, struct sockaddr_in
+ 
+   return res;
+ }
++#if !BOOTSTRAP_GLIBC
+ libc_hidden_def (bindresvport)
++#endif
++
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/sunrpc/clnt_raw.c glibc-2.16.0/sunrpc/clnt_raw.c
+--- /home/janneke/src/glibc-2.16.0/sunrpc/clnt_raw.c	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/sunrpc/clnt_raw.c	2018-09-02 22:33:21.151343826 +0200
+@@ -40,6 +40,7 @@
+ #include <rpc/svc.h>
+ #include <rpc/xdr.h>
+ #include <libintl.h>
++#include <stddef.h>
+ 
+ #define MCALL_MSG_SIZE 24
+ 
+@@ -129,7 +130,9 @@ clntraw_create (u_long prog, u_long vers
+   client->cl_auth = authnone_create ();
+   return client;
+ }
++#if !BOOTSTRAP_GLIBC
+ libc_hidden_nolink_sunrpc (clntraw_create, GLIBC_2_0)
++#endif
+ 
+ static enum clnt_stat
+ clntraw_call (h, proc, xargs, argsp, xresults, resultsp, timeout)
+diff '--exclude=*.orig' -purN /home/janneke/src/glibc-2.16.0/sunrpc/clnt_simp.c glibc-2.16.0/sunrpc/clnt_simp.c
+--- /home/janneke/src/glibc-2.16.0/sunrpc/clnt_simp.c	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/sunrpc/clnt_simp.c	2018-09-02 22:34:14.884175251 +0200
+@@ -139,7 +139,9 @@ callrpc (const char *host, u_long prognu
+     crp->valid = 0;
+   return (int) clnt_stat;
+ }
++#if !BOOTSTRAP_GLIBC
+ libc_hidden_nolink_sunrpc (callrpc, GLIBC_2_0)
++#endif
+ 
+ #ifdef _RPC_THREAD_SAFE_
+ void
diff --git a/gnu/packages/patches/glibc-boot-2.2.5.patch b/gnu/packages/patches/glibc-boot-2.2.5.patch
new file mode 100644
index 0000000000..26bc92a6bb
--- /dev/null
+++ b/gnu/packages/patches/glibc-boot-2.2.5.patch
@@ -0,0 +1,251 @@
+This patch enables building glibc-2.2.5 using TCC and GNU Make 4.x and Mes C Library.
+
+  * Makefile: Do not assemble from stdin, use file indirection.
+  * Makefile: Add new target: install-lib-all.
+  * Makefile: Avoid building stub DOC.
+  * [_LIBC_REENTRANT]: Add missing guarding.
+  * [MES_BOOTSTRAP]: Disable some GCC extensions.
+  * [MES_BOOTSTRAP]: Add missing GCC div/mod defines.
+
+Upstream status: Not presented upstream.
+
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/config.h.in glibc-2.2.5/config.h.in
+--- ../glibc-2.2.5/config.h.in	2001-11-16 02:02:56.000000000 +0100
++++ glibc-2.2.5/config.h.in	2018-06-17 21:30:02.313029074 +0200
+@@ -1,3 +1,10 @@
++#if MES_BOOTSTRAP && BOOTSTRAP_GLIBC
++#undef __umoddi3
++#define __umoddi3(a,b) ((a)%(b))
++#undef __udivdi3
++#define __udivdi3(a,b) ((a)/(b))
++#endif
++
+ #if !defined ASSEMBLER && !defined _ISOMAC && !defined __OPTIMIZE__
+ # error "glibc cannot be compiled without optimization"
+ #endif
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/configure glibc-2.2.5/configure
+--- ../glibc-2.2.5/configure	2002-01-08 23:16:44.000000000 +0100
++++ glibc-2.2.5/configure	2018-06-07 20:47:26.608895319 +0200
+@@ -1530,7 +1530,7 @@ echo "configure:1530: checking version o
+   ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+   case $ac_prog_version in
+     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+-    3.79* | 3.[89]*)
++    3.79* | 3.[89]* | 4.*)
+        ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+     *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ 
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/Makeconfig glibc-2.2.5/Makeconfig
+--- ../glibc-2.2.5/Makeconfig	2001-09-12 20:49:45.000000000 +0200
++++ glibc-2.2.5/Makeconfig	2018-06-20 16:33:35.472167202 +0200
+@@ -400,7 +400,7 @@ ifndef +link
+ 						     $(start-installed-name))\
+ 			   $(+preinit) $(link-extra-libs) \
+ 			   $(common-objpfx)libc% $(+postinit),$^) \
+-	      $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
++	      $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit) -lc -lgcc2
+ endif
+ # Command for statically linking programs with the C library.
+ ifndef +link-static
+@@ -412,7 +412,7 @@ ifndef +link-static
+ 						     $(start-installed-name))\
+ 			   $(+preinit) $(link-extra-libs-static) \
+ 			   $(common-objpfx)libc% $(+postinit),$^) \
+-	      $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
++	      $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit) -lc -lgcc2
+ endif
+ # Command for statically linking bounded-pointer programs with the C library.
+ ifndef +link-bounded
+@@ -424,7 +424,7 @@ ifndef +link-bounded
+ 						     $(start-installed-name))\
+ 			   $(+preinit) $(link-extra-libs-bounded) \
+ 			   $(common-objpfx)libc% $(+postinit),$^) \
+-	      $(link-extra-libs-bounded) $(link-libc-bounded) $(+postctor) $(+postinit)
++	      $(link-extra-libs-bounded) $(link-libc-bounded) $(+postctor) $(+postinit) -lc -lgcc2
+ endif
+ ifndef config-LDFLAGS
+ ifeq (yesyes,$(build-shared)$(elf))
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/Makerules glibc-2.2.5/Makerules
+--- ../glibc-2.2.5/Makerules	2001-11-16 02:02:19.000000000 +0100
++++ glibc-2.2.5/Makerules	2018-06-10 15:03:42.390329860 +0200
+@@ -748,6 +748,18 @@ endef
+ installed-libcs := $(foreach o,$(filter-out .os,$(object-suffixes-for-libc)),\
+ 			     $(inst_libdir)/$(patsubst %,$(libtype$o),\
+ 						     $(libprefix)$(libc-name)))
++
++ifeq (yes,$(build-shared))
++install-lib-all: $(inst_libdir)/libc.a \
++                $(inst_slibdir)/libc.so$(libc.so-version) \
++		$(inst_slibdir)/libc-$(version).so \
++		$(inst_libdir)/libc.so \
++	install-lib
++else
++install-lib-all: $(inst_libdir)/libc.a \
++	install-lib
++endif
++
+ install: $(installed-libcs)
+ $(installed-libcs): $(inst_libdir)/lib$(libprefix)%: lib $(+force)
+ 	$(make-target-directory)
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/misc/syslog.c glibc-2.2.5/misc/syslog.c
+--- ../glibc-2.2.5/misc/syslog.c	2001-08-31 01:13:49.000000000 +0200
++++ glibc-2.2.5/misc/syslog.c	2018-06-09 09:01:20.008918690 +0200
+@@ -216,9 +216,11 @@ vsyslog(pri, fmt, ap)
+ 
+ 	/* Prepare for multiple users.  We have to take care: open and
+ 	   write are cancellation points.  */
++#if _LIBC_REENTRANT
+ 	__libc_cleanup_region_start (1, (void (*) (void *)) cancel_handler,
+ 				     &oldaction_ptr);
+ 	__libc_lock_lock (syslog_lock);
++#endif
+ 
+ 	/* Prepare for a broken connection.  */
+  	memset (&action, 0, sizeof (action));
+@@ -268,9 +270,11 @@ vsyslog(pri, fmt, ap)
+ 	if (sigpipe == 0)
+ 		__sigaction (SIGPIPE, &oldaction, (struct sigaction *) NULL);
+ 
++#if _LIBC_REENTRANT
+ 	/* End of critical section.  */
+ 	__libc_cleanup_region_end (0);
+ 	__libc_lock_unlock (syslog_lock);
++#endif
+ 
+ 	free (buf);
+ }
+@@ -326,16 +330,20 @@ openlog_internal(const char *ident, int
+ void
+ openlog (const char *ident, int logstat, int logfac)
+ {
++#if _LIBC_REENTRANT
+   /* Protect against multiple users.  */
+   __libc_cleanup_region_start (1,
+ 			       (void (*) __P ((void *))) __libc_mutex_unlock,
+ 			       &syslog_lock);
+   __libc_lock_lock (syslog_lock);
++#endif
+ 
+   openlog_internal (ident, logstat, logfac);
+ 
++#if _LIBC_REENTRANT
+   /* Free the lock.  */
+   __libc_cleanup_region_end (1);
++#endif
+ }
+ 
+ static void
+@@ -358,18 +366,22 @@ closelog_internal()
+ void
+ closelog ()
+ {
++#if _LIBC_REENTRANT
+   /* Protect against multiple users.  */
+   __libc_cleanup_region_start (1,
+ 			       (void (*) __P ((void *))) __libc_mutex_unlock,
+ 			       &syslog_lock);
+   __libc_lock_lock (syslog_lock);
++#endif
+ 
+   closelog_internal ();
+   LogTag = NULL;
+   LogType = SOCK_DGRAM; /* this is the default */
+ 
++#if _LIBC_REENTRANT
+   /* Free the lock.  */
+   __libc_cleanup_region_end (1);
++#endif
+ }
+ 
+ #ifdef _LIBC_REENTRANT
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/Rules glibc-2.2.5/Rules
+--- ../glibc-2.2.5/Rules	2001-08-30 00:44:35.000000000 +0200
++++ glibc-2.2.5/Rules	2018-06-09 08:15:54.880683675 +0200
+@@ -218,7 +218,7 @@ endif
+ 	fopen_max=`sed -n 's/^#define OPEN_MAX //1p' $(@:st=hT)`; 	\
+ 	filename_max=`sed -n 's/^#define PATH_MAX //1p' $(@:st=hT)`;	\
+ 	iov_max=`sed -n 's/^#define UIO_MAXIOV //p' $(@:st=hT)`;	\
+-	fopen_max=$${fopen_max:-16};					\
++	fopen_max=$${fu_fopen_max:-16};					\
+ 	filename_max=$${filename_max:-1024};				\
+ 	if [ -z $$iov_max ]; then					\
+ 	  define_iov_max="# undef IOV_MAX";				\
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/stdio-common/perror.c glibc-2.2.5/stdio-common/perror.c
+--- ../glibc-2.2.5/stdio-common/perror.c	2001-09-01 07:33:01.000000000 +0200
++++ glibc-2.2.5/stdio-common/perror.c	2018-06-09 10:42:25.909899529 +0200
+@@ -48,6 +48,9 @@ perror_internal (FILE *fp, const char *s
+ }
+ 
+ 
++#if MES_BOOTSTRAP
++#define fileno_unlocked(x) 1
++#endif
+ /* Print a line on stderr consisting of the text in S, a colon, a space,
+    a message describing the meaning of the contents of `errno' and a newline.
+    If S is NULL or "", the colon and space are omitted.  */
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/sysdeps/i386/fpu/ftestexcept.c glibc-2.2.5/sysdeps/i386/fpu/ftestexcept.c
+--- ../glibc-2.2.5/sysdeps/i386/fpu/ftestexcept.c	2001-07-06 06:55:53.000000000 +0200
++++ glibc-2.2.5/sysdeps/i386/fpu/ftestexcept.c	2018-06-09 09:45:13.363031424 +0200
+@@ -25,8 +25,10 @@ fetestexcept (int excepts)
+ {
+   int temp;
+ 
++#if !MES_BOOTSTRAP
+   /* Get current exceptions.  */
+   __asm__ ("fnstsw %0" : "=a" (temp));
++#endif
+ 
+   return temp & excepts & FE_ALL_EXCEPT;
+ }
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/sysdeps/unix/make-syscalls.sh glibc-2.2.5/sysdeps/unix/make-syscalls.sh
+--- ../glibc-2.2.5/sysdeps/unix/make-syscalls.sh	2001-09-13 00:19:30.000000000 +0200
++++ glibc-2.2.5/sysdeps/unix/make-syscalls.sh	2018-06-20 15:16:01.813004453 +0200
+@@ -173,7 +173,7 @@ shared-only-routines += $file
+   done
+ 
+   # And finally, pipe this all into the compiler.
+-  echo '	) | $(COMPILE.S) -x assembler-with-cpp -o $@ -'
++  echo '	) > stdin.c; $(COMPILE.S) -x assembler-with-cpp -o $@ stdin.c'
+ 
+   case $weak in
+   *@*)
+@@ -284,7 +284,7 @@ shared-only-routines += $file
+     echo "\
+ 	 echo ''; \\
+ 	 echo '#include <bp-thunks.h>'; \\
+-	) | \$(COMPILE.c) -x c -o \$@ -"
++	) > stdin.c; \$(COMPILE.c) -x c -o \$@ stdin.c"
+ ### Use this for debugging intermediate output:
+ ### 	) >\$(@:.ob=.c)
+ ### 	\$(subst -c,-E,\$(COMPILE.c)) -o \$(@:.ob=.ib) \$(@:.ob=.c)
+diff -purN -x .git -x fubar -x fubar.c -x Makefile -x config.status -x config.h -x BOOT -x BOOT-GCC -x texis -x '*.info*' ../glibc-2.2.5/sysdeps/unix/sysv/linux/sys/timex.h glibc-2.2.5/sysdeps/unix/sysv/linux/sys/timex.h
+--- ../glibc-2.2.5/sysdeps/unix/sysv/linux/sys/timex.h	2001-07-06 06:56:21.000000000 +0200
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/sys/timex.h	2018-06-09 20:09:07.713806647 +0200
+@@ -54,10 +54,12 @@ struct timex
+   long int errcnt;	/* calibration errors (ro) */
+   long int stbcnt;	/* stability limit exceeded (ro) */
+ 
++#if !MES_BOOTSTRAP
+   /* ??? */
+   int  :32; int  :32; int  :32; int  :32;
+   int  :32; int  :32; int  :32; int  :32;
+   int  :32; int  :32; int  :32; int  :32;
++#endif
+ };
+ 
+ /* Mode codes (timex.mode) */
+--- ../glibc-2.2.5/manual/Makefile	2001-08-28 10:05:40.000000000 +0200
++++ glibc-2.2.5/manual/Makefile	2018-06-09 10:13:03.093633660 +0200
+@@ -247,7 +247,11 @@
+ .PHONY: stubs
+ stubs: $(objpfx)stubs
+ endif
+-$(objpfx)stubs ../po/manual.pot $(objpfx)stamp%:
++po/manual.pot $(objpfx)stubs:
++	$(make-target-directory)
++	touch $@
++
++$(objpfx)stamp%:
+ 	$(make-target-directory)
+ 	touch $@
+ 
diff --git a/gnu/packages/patches/glibc-bootstrap-system-2.16.0.patch b/gnu/packages/patches/glibc-bootstrap-system-2.16.0.patch
new file mode 100644
index 0000000000..936d592f1a
--- /dev/null
+++ b/gnu/packages/patches/glibc-bootstrap-system-2.16.0.patch
@@ -0,0 +1,30 @@
+We want to allow builds in chroots that lack /bin/sh.  Thus, system(3)
+and popen(3) need to be tweaked to use the right shell.  For the bootstrap
+glibc, we just use whatever `sh' can be found in $PATH.  The final glibc
+instead uses the hard-coded absolute file name of `bash'.
+
+--- a/sysdeps/posix/system.c
++++ b/sysdeps/posix/system.c
+@@ -134,7 +134,7 @@ do_system (const char *line)
+       INIT_LOCK ();
+ 
+       /* Exec the shell.  */
+-      (void) __execve (SHELL_PATH, (char *const *) new_argv, __environ);
++      (void) __execvpe (SHELL_NAME, (char *const *) new_argv, __environ);
+       _exit (127);
+     }
+   else if (pid < (pid_t) 0)
+
+--- a/libio/iopopen.c
++++ b/libio/iopopen.c
+@@ -145,7 +145,7 @@ _IO_new_proc_open (fp, command, mode)
+ 	    _IO_close (fd);
+ 	}
+ 
+-      _IO_execl ("/bin/sh", "sh", "-c", command, (char *) 0);
++      execlp ("sh", "sh", "-c", command, (char *) 0);
+       _IO__exit (127);
+     }
+   _IO_close (child_end);
+
+
diff --git a/gnu/packages/patches/glibc-bootstrap-system.patch b/gnu/packages/patches/glibc-bootstrap-system.patch
index addeed6dbd..39eb47ef26 100644
--- a/gnu/packages/patches/glibc-bootstrap-system.patch
+++ b/gnu/packages/patches/glibc-bootstrap-system.patch
@@ -5,26 +5,24 @@ instead uses the hard-coded absolute file name of `bash'.
 
 --- a/sysdeps/posix/system.c
 +++ b/sysdeps/posix/system.c
-@@ -134,7 +134,7 @@ do_system (const char *line)
-       INIT_LOCK ();
+@@ -140,7 +140,7 @@ do_system (const char *line)
+   __posix_spawnattr_setflags (&spawn_attr,
+ 			      POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK);
  
-       /* Exec the shell.  */
--      (void) __execve (SHELL_PATH, (char *const *) new_argv, __environ);
-+      (void) __execvpe (SHELL_NAME, (char *const *) new_argv, __environ);
-       _exit (127);
-     }
-   else if (pid < (pid_t) 0)
-
+-  status = __posix_spawn (&pid, SHELL_PATH, 0, &spawn_attr,
++  status = posix_spawnp (&pid, SHELL_NAME, 0, &spawn_attr,
+ 			  (char *const[]){ (char*) SHELL_NAME,
+ 					   (char*) "-c",
+ 					   (char *) line, NULL },
 --- a/libio/iopopen.c
 +++ b/libio/iopopen.c
-@@ -145,7 +145,7 @@ _IO_new_proc_open (fp, command, mode)
- 	    __close_nocancel (fd);
- 	}
- 
--      execl ("/bin/sh", "sh", "-c", command, (char *) 0);
-+      execlp ("sh", "sh", "-c", command, (char *) 0);
-       _exit (127);
+@@ -85,7 +85,7 @@ spawn_process (posix_spawn_file_actions_t *fa, FILE *fp, const char *command,
+ 	return false;
      }
-   __close_nocancel (child_end);
-
+ 
+-  if (__posix_spawn (&((_IO_proc_file *) fp)->pid, _PATH_BSHELL, fa, 0,
++  if (posix_spawnp (&((_IO_proc_file *) fp)->pid, "sh", fa, 0,
+ 		     (char *const[]){ (char*) "sh", (char*) "-c",
+ 		     (char *) command, NULL }, __environ) != 0)
+     return false;
 
diff --git a/gnu/packages/patches/glibc-locales-2.28.patch b/gnu/packages/patches/glibc-locales-2.28.patch
new file mode 100644
index 0000000000..31ee6c1ff3
--- /dev/null
+++ b/gnu/packages/patches/glibc-locales-2.28.patch
@@ -0,0 +1,31 @@
+This patch allows us to use glibc's build system to build locales
+in a package separate from glibc.
+
+  1. Use 'localedef' from $PATH since we are not rebuilding it.
+  2. Use '--no-archive' to avoid building the big locale archive, and
+     because the already-built 'localedef' would want to write it
+     to '/run/current-system/locale', which is not possible.
+  3. Pass $(inst_complocaledir)/$$locale to install files in the right
+     place, and because otherwise, 'localedef' fails with:
+     "cannot write output files to `(null)'".
+
+--- glibc-2.27/localedata/Makefile
++++ glibc-2.27/localedata/Makefile
+@@ -199,7 +199,7 @@ INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
+ 
+ # Sometimes the whole collection of locale files should be installed.
+ LOCALEDEF=I18NPATH=. GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
+-$(rtld-prefix) $(common-objpfx)locale/localedef
++  localedef --no-archive
+ install-locales: $(INSTALL-SUPPORTED-LOCALES)
+ 
+ install-locales-dir:
+@@ -224,7 +224,7 @@ $(INSTALL-SUPPORTED-LOCALES): install-locales-dir
+ 	input=`echo $$locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; \
+ 	$(LOCALEDEF) $$flags --alias-file=../intl/locale.alias \
+ 		     -i locales/$$input -f charmaps/$$charset \
+-		     $(addprefix --prefix=,$(install_root)) $$locale \
++		     $(addprefix --prefix=,$(install_root)) $(inst_complocaledir)/$$locale \
+ 	&& echo ' done'; \
+ 
+ tst-setlocale-ENV = LC_ALL=ja_JP.EUC-JP
diff --git a/gnu/packages/patches/glibc-locales.patch b/gnu/packages/patches/glibc-locales.patch
index 31ee6c1ff3..9329a09063 100644
--- a/gnu/packages/patches/glibc-locales.patch
+++ b/gnu/packages/patches/glibc-locales.patch
@@ -9,23 +9,24 @@ in a package separate from glibc.
      place, and because otherwise, 'localedef' fails with:
      "cannot write output files to `(null)'".
 
---- glibc-2.27/localedata/Makefile
-+++ glibc-2.27/localedata/Makefile
-@@ -199,7 +199,7 @@ INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
+diff -ru glibc-2.29-old/localedata/Makefile glibc-2.29-new/localedata/Makefile
+--- glibc-2.29-old/localedata/Makefile	2019-01-31 11:45:36.000000000 -0500
++++ glibc-2.29-new/localedata/Makefile	2019-07-03 22:48:35.662015071 -0400
+@@ -385,7 +385,7 @@
  
  # Sometimes the whole collection of locale files should be installed.
  LOCALEDEF=I18NPATH=. GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
 -$(rtld-prefix) $(common-objpfx)locale/localedef
 +  localedef --no-archive
- install-locales: $(INSTALL-SUPPORTED-LOCALES)
+ install-locales: install-locale-archive
  
- install-locales-dir:
-@@ -224,7 +224,7 @@ $(INSTALL-SUPPORTED-LOCALES): install-locales-dir
+ # Create and install the locale-archive file.
+@@ -414,7 +414,7 @@
  	input=`echo $$locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; \
  	$(LOCALEDEF) $$flags --alias-file=../intl/locale.alias \
  		     -i locales/$$input -f charmaps/$$charset \
 -		     $(addprefix --prefix=,$(install_root)) $$locale \
 +		     $(addprefix --prefix=,$(install_root)) $(inst_complocaledir)/$$locale \
- 	&& echo ' done'; \
+ 	&& echo ' done';
+ endef
  
- tst-setlocale-ENV = LC_ALL=ja_JP.EUC-JP
diff --git a/gnu/packages/patches/glibc-supported-locales.patch b/gnu/packages/patches/glibc-supported-locales.patch
new file mode 100644
index 0000000000..05865dc7be
--- /dev/null
+++ b/gnu/packages/patches/glibc-supported-locales.patch
@@ -0,0 +1,33 @@
+This patch is taken from debian's glibc package (generate-supported.mk).
+It install the localedata/SUPPORTED file of the glibc. This file lists
+all the supported locales of the glibc.
+
+diff --git a/localedata/Makefile b/localedata/Makefile
+index 65079f9eb8..14818f84e0 100644
+--- a/localedata/Makefile
++++ b/localedata/Makefile
+@@ -169,7 +169,8 @@ endif
+ # Files to install.
+ install-others := $(addprefix $(inst_i18ndir)/, \
+ 			      $(addsuffix .gz, $(charmaps)) \
+-			      $(locales))
++			      $(locales)) \
++                   $(inst_i18ndir)/SUPPORTED
+ 
+ tests: $(objdir)/iconvdata/gconv-modules
+ 
+@@ -380,6 +381,14 @@ endif
+ 
+ include SUPPORTED
+ 
++$(inst_i18ndir)/SUPPORTED: SUPPORTED $(+force)
++	for locale in $(SUPPORTED-LOCALES); do \
++		[ $$locale = true ] && continue; \
++		echo $$locale | sed 's,/, ,' >> LOCALES; \
++	done
++	$(make-target-directory)
++	$(INSTALL_DATA) LOCALES $@
++
+ INSTALL-SUPPORTED-LOCALE-ARCHIVE=$(addprefix install-archive-, $(SUPPORTED-LOCALES))
+ INSTALL-SUPPORTED-LOCALE-FILES=$(addprefix install-files-, $(SUPPORTED-LOCALES))
+ 
\ No newline at end of file
diff --git a/gnu/packages/patches/glm-restore-install-target.patch b/gnu/packages/patches/glm-restore-install-target.patch
new file mode 100644
index 0000000000..a628030f6f
--- /dev/null
+++ b/gnu/packages/patches/glm-restore-install-target.patch
@@ -0,0 +1,574 @@
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Mon, 23 Sep 2019 22:01:17 +0200
+Subject: [PATCH] gnu: glm: Restore ‘install’ target.
+
+It was removed in 0.9.9.6, making installation a tedious manual process
+for no clear reason[0].  Restore it for now.
+
+[0]: https://github.com/g-truc/glm/issues/947
+
+diff -Naur glm/cmake/CMakePackageConfigHelpers.cmake glmn/cmake/CMakePackageConfigHelpers.cmake
+--- glm/cmake/CMakePackageConfigHelpers.cmake	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/CMakePackageConfigHelpers.cmake	2019-09-23 00:11:21.418152249 +0200
+@@ -0,0 +1,227 @@
++# - CONFIGURE_PACKAGE_CONFIG_FILE(), WRITE_BASIC_PACKAGE_VERSION_FILE()

++#

++#    CONFIGURE_PACKAGE_CONFIG_FILE(<input> <output> INSTALL_DESTINATION <path>

++#                                                   [PATH_VARS <var1> <var2> ... <varN>]

++#                                                   [NO_SET_AND_CHECK_MACRO]

++#                                                   [NO_CHECK_REQUIRED_COMPONENTS_MACRO])

++#

++# CONFIGURE_PACKAGE_CONFIG_FILE() should be used instead of the plain

++# CONFIGURE_FILE() command when creating the <Name>Config.cmake or <Name>-config.cmake

++# file for installing a project or library. It helps making the resulting package

++# relocatable by avoiding hardcoded paths in the installed Config.cmake file.

++#

++# In a FooConfig.cmake file there may be code like this to make the

++# install destinations know to the using project:

++#   set(FOO_INCLUDE_DIR   "@CMAKE_INSTALL_FULL_INCLUDEDIR@" )

++#   set(FOO_DATA_DIR   "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" )

++#   set(FOO_ICONS_DIR   "@CMAKE_INSTALL_PREFIX@/share/icons" )

++#   ...logic to determine installedPrefix from the own location...

++#   set(FOO_CONFIG_DIR  "${installedPrefix}/@CONFIG_INSTALL_DIR@" )

++# All 4 options shown above are not sufficient, since the first 3 hardcode

++# the absolute directory locations, and the 4th case works only if the logic

++# to determine the installedPrefix is correct, and if CONFIG_INSTALL_DIR contains

++# a relative path, which in general cannot be guaranteed.

++# This has the effect that the resulting FooConfig.cmake file would work poorly

++# under Windows and OSX, where users are used to choose the install location

++# of a binary package at install time, independent from how CMAKE_INSTALL_PREFIX

++# was set at build/cmake time.

++#

++# Using CONFIGURE_PACKAGE_CONFIG_FILE() helps. If used correctly, it makes the

++# resulting FooConfig.cmake file relocatable.

++# Usage:

++#   1. write a FooConfig.cmake.in file as you are used to

++#   2. insert a line containing only the string "@PACKAGE_INIT@"

++#   3. instead of SET(FOO_DIR "@SOME_INSTALL_DIR@"), use SET(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")

++#      (this must be after the @PACKAGE_INIT@ line)

++#   4. instead of using the normal CONFIGURE_FILE(), use CONFIGURE_PACKAGE_CONFIG_FILE()

++#

++# The <input> and <output> arguments are the input and output file, the same way

++# as in CONFIGURE_FILE().

++#

++# The <path> given to INSTALL_DESTINATION must be the destination where the FooConfig.cmake

++# file will be installed to. This can either be a relative or absolute path, both work.

++#

++# The variables <var1> to <varN> given as PATH_VARS are the variables which contain

++# install destinations. For each of them the macro will create a helper variable

++# PACKAGE_<var...>. These helper variables must be used

++# in the FooConfig.cmake.in file for setting the installed location. They are calculated

++# by CONFIGURE_PACKAGE_CONFIG_FILE() so that they are always relative to the

++# installed location of the package. This works both for relative and also for absolute locations.

++# For absolute locations it works only if the absolute location is a subdirectory

++# of CMAKE_INSTALL_PREFIX.

++#

++# By default configure_package_config_file() also generates two helper macros,

++# set_and_check() and check_required_components() into the FooConfig.cmake file.

++#

++# set_and_check() should be used instead of the normal set()

++# command for setting directories and file locations. Additionally to setting the

++# variable it also checks that the referenced file or directory actually exists

++# and fails with a FATAL_ERROR otherwise. This makes sure that the created

++# FooConfig.cmake file does not contain wrong references.

++# When using the NO_SET_AND_CHECK_MACRO, this macro is not generated into the

++# FooConfig.cmake file.

++#

++# check_required_components(<package_name>) should be called at the end of the

++# FooConfig.cmake file if the package supports components.

++# This macro checks whether all requested, non-optional components have been found,

++# and if this is not the case, sets the Foo_FOUND variable to FALSE, so that the package

++# is considered to be not found.

++# It does that by testing the Foo_<Component>_FOUND variables for all requested

++# required components.

++# When using the NO_CHECK_REQUIRED_COMPONENTS option, this macro is not generated

++# into the FooConfig.cmake file.

++#

++# For an example see below the documentation for WRITE_BASIC_PACKAGE_VERSION_FILE().

++#

++#

++#  WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )

++#

++# Writes a file for use as <package>ConfigVersion.cmake file to <filename>.

++# See the documentation of FIND_PACKAGE() for details on this.

++#    filename is the output filename, it should be in the build tree.

++#    major.minor.patch is the version number of the project to be installed

++# The COMPATIBILITY mode AnyNewerVersion means that the installed package version

++# will be considered compatible if it is newer or exactly the same as the requested version.

++# This mode should be used for packages which are fully backward compatible,

++# also across major versions.

++# If SameMajorVersion is used instead, then the behaviour differs from AnyNewerVersion

++# in that the major version number must be the same as requested, e.g. version 2.0 will

++# not be considered compatible if 1.0 is requested.

++# This mode should be used for packages which guarantee backward compatibility within the

++# same major version.

++# If ExactVersion is used, then the package is only considered compatible if the requested

++# version matches exactly its own version number (not considering the tweak version).

++# For example, version 1.2.3 of a package is only considered compatible to requested version 1.2.3.

++# This mode is for packages without compatibility guarantees.

++# If your project has more elaborated version matching rules, you will need to write your

++# own custom ConfigVersion.cmake file instead of using this macro.

++#

++# Internally, this macro executes configure_file() to create the resulting

++# version file. Depending on the COMPATIBILITY, either the file

++# BasicConfigVersion-SameMajorVersion.cmake.in or BasicConfigVersion-AnyNewerVersion.cmake.in

++# is used. Please note that these two files are internal to CMake and you should

++# not call configure_file() on them yourself, but they can be used as starting

++# point to create more sophisticted custom ConfigVersion.cmake files.

++#

++#

++# Example using both configure_package_config_file() and write_basic_package_version_file():

++# CMakeLists.txt:

++#   set(INCLUDE_INSTALL_DIR include/ ... CACHE )

++#   set(LIB_INSTALL_DIR lib/ ... CACHE )

++#   set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE )

++#   ...

++#   include(CMakePackageConfigHelpers)

++#   configure_package_config_file(FooConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake

++#                                 INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake

++#                                 PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)

++#   write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake

++#                                    VERSION 1.2.3

++#                                    COMPATIBILITY SameMajorVersion )

++#   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake

++#           DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake )

++#

++# With a FooConfig.cmake.in:

++#   set(FOO_VERSION x.y.z)

++#   ...

++#   @PACKAGE_INIT@

++#   ...

++#   set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")

++#   set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")

++#

++#   check_required_components(Foo)

++

++

++#=============================================================================

++# Copyright 2012 Alexander Neundorf <neundorf@kde.org>

++#

++# Distributed under the OSI-approved BSD License (the "License");

++# see accompanying file Copyright.txt for details.

++#

++# This software is distributed WITHOUT ANY WARRANTY; without even the

++# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

++# See the License for more information.

++#=============================================================================

++# (To distribute this file outside of CMake, substitute the full

++#  License text for the above reference.)

++

++include(CMakeParseArguments)

++

++include(WriteBasicConfigVersionFile)

++

++macro(WRITE_BASIC_PACKAGE_VERSION_FILE)

++  write_basic_config_version_file(${ARGN})

++endmacro()

++

++

++function(CONFIGURE_PACKAGE_CONFIG_FILE _inputFile _outputFile)

++  set(options NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)

++  set(oneValueArgs INSTALL_DESTINATION )

++  set(multiValueArgs PATH_VARS )

++

++  cmake_parse_arguments(CCF "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})

++

++  if(CCF_UNPARSED_ARGUMENTS)

++    message(FATAL_ERROR "Unknown keywords given to CONFIGURE_PACKAGE_CONFIG_FILE(): \"${CCF_UNPARSED_ARGUMENTS}\"")

++  endif()

++

++  if(NOT CCF_INSTALL_DESTINATION)

++    message(FATAL_ERROR "No INSTALL_DESTINATION given to CONFIGURE_PACKAGE_CONFIG_FILE()")

++  endif()

++

++  if(IS_ABSOLUTE "${CCF_INSTALL_DESTINATION}")

++    set(absInstallDir "${CCF_INSTALL_DESTINATION}")

++  else()

++    set(absInstallDir "${CMAKE_INSTALL_PREFIX}/${CCF_INSTALL_DESTINATION}")

++  endif()

++  file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${absInstallDir}" "${CMAKE_INSTALL_PREFIX}" )

++

++  foreach(var ${CCF_PATH_VARS})

++    if(NOT DEFINED ${var})

++      message(FATAL_ERROR "Variable ${var} does not exist")

++    else()

++      if(IS_ABSOLUTE "${${var}}")

++        string(REPLACE "${CMAKE_INSTALL_PREFIX}" "\${PACKAGE_PREFIX_DIR}"

++                        PACKAGE_${var} "${${var}}")

++      else()

++        set(PACKAGE_${var} "\${PACKAGE_PREFIX_DIR}/${${var}}")

++      endif()

++    endif()

++  endforeach()

++

++  set(PACKAGE_INIT "

++####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######

++get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/${PACKAGE_RELATIVE_PATH}\" ABSOLUTE)

++")

++

++  if(NOT CCF_NO_SET_AND_CHECK_MACRO)

++    set(PACKAGE_INIT "${PACKAGE_INIT}

++macro(set_and_check _var _file)

++  set(\${_var} \"\${_file}\")

++  if(NOT EXISTS \"\${_file}\")

++    message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")

++  endif()

++endmacro()

++")

++  endif()

++

++

++  if(NOT CCF_NO_CHECK_REQUIRED_COMPONENTS_MACRO)

++    set(PACKAGE_INIT "${PACKAGE_INIT}

++macro(check_required_components _NAME)

++  foreach(comp \${\${_NAME}_FIND_COMPONENTS})

++    if(NOT \${_NAME}_\${comp}_FOUND)

++      if(\${_NAME}_FIND_REQUIRED_\${comp})

++        set(\${_NAME}_FOUND FALSE)

++      endif()

++    endif()

++  endforeach(comp)

++endmacro()

++")

++  endif()

++

++  set(PACKAGE_INIT "${PACKAGE_INIT}

++####################################################################################")

++

++  configure_file("${_inputFile}" "${_outputFile}" @ONLY)

++

++endfunction()

+diff -Naur glm/cmake/glmBuildConfig.cmake.in glmn/cmake/glmBuildConfig.cmake.in
+--- glm/cmake/glmBuildConfig.cmake.in	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/glmBuildConfig.cmake.in	2019-09-23 00:12:08.090955650 +0200
+@@ -0,0 +1,6 @@
++set(GLM_VERSION "@GLM_VERSION@")

++set(GLM_INCLUDE_DIRS "@CMAKE_CURRENT_SOURCE_DIR@")

++

++if (NOT CMAKE_VERSION VERSION_LESS "3.0")

++    include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")

++endif()

+diff -Naur glm/cmake/glmConfig.cmake.in glmn/cmake/glmConfig.cmake.in
+--- glm/cmake/glmConfig.cmake.in	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/glmConfig.cmake.in	2019-09-23 00:12:14.566373412 +0200
+@@ -0,0 +1,9 @@
++set(GLM_VERSION "@GLM_VERSION@")

++

++@PACKAGE_INIT@

++

++set_and_check(GLM_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@")

++

++if (NOT CMAKE_VERSION VERSION_LESS "3.0")

++    include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")

++endif()

+diff -Naur glm/cmake/glm.pc.in glmn/cmake/glm.pc.in
+--- glm/cmake/glm.pc.in	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/glm.pc.in	2019-09-23 00:11:59.695710511 +0200
+@@ -0,0 +1,7 @@
++prefix=@CMAKE_INSTALL_PREFIX@

++includedir=${prefix}/include

++

++Name: GLM

++Description: OpenGL Mathematics

++Version: @GLM_VERSION@

++Cflags: -I${includedir}

+diff -Naur glm/cmake/GNUInstallDirs.cmake glmn/cmake/GNUInstallDirs.cmake
+--- glm/cmake/GNUInstallDirs.cmake	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/GNUInstallDirs.cmake	2019-09-23 00:11:47.363819337 +0200
+@@ -0,0 +1,188 @@
++# - Define GNU standard installation directories

++# Provides install directory variables as defined for GNU software:

++#  http://www.gnu.org/prep/standards/html_node/Directory-Variables.html

++# Inclusion of this module defines the following variables:

++#  CMAKE_INSTALL_<dir>      - destination for files of a given type

++#  CMAKE_INSTALL_FULL_<dir> - corresponding absolute path

++# where <dir> is one of:

++#  BINDIR           - user executables (bin)

++#  SBINDIR          - system admin executables (sbin)

++#  LIBEXECDIR       - program executables (libexec)

++#  SYSCONFDIR       - read-only single-machine data (etc)

++#  SHAREDSTATEDIR   - modifiable architecture-independent data (com)

++#  LOCALSTATEDIR    - modifiable single-machine data (var)

++#  LIBDIR           - object code libraries (lib or lib64 or lib/<multiarch-tuple> on Debian)

++#  INCLUDEDIR       - C header files (include)

++#  OLDINCLUDEDIR    - C header files for non-gcc (/usr/include)

++#  DATAROOTDIR      - read-only architecture-independent data root (share)

++#  DATADIR          - read-only architecture-independent data (DATAROOTDIR)

++#  INFODIR          - info documentation (DATAROOTDIR/info)

++#  LOCALEDIR        - locale-dependent data (DATAROOTDIR/locale)

++#  MANDIR           - man documentation (DATAROOTDIR/man)

++#  DOCDIR           - documentation root (DATAROOTDIR/doc/PROJECT_NAME)

++# Each CMAKE_INSTALL_<dir> value may be passed to the DESTINATION options of

++# install() commands for the corresponding file type.  If the includer does

++# not define a value the above-shown default will be used and the value will

++# appear in the cache for editing by the user.

++# Each CMAKE_INSTALL_FULL_<dir> value contains an absolute path constructed

++# from the corresponding destination by prepending (if necessary) the value

++# of CMAKE_INSTALL_PREFIX.

++

++#=============================================================================

++# Copyright 2011 Nikita Krupen'ko <krnekit@gmail.com>

++# Copyright 2011 Kitware, Inc.

++#

++# Distributed under the OSI-approved BSD License (the "License");

++# see accompanying file Copyright.txt for details.

++#

++# This software is distributed WITHOUT ANY WARRANTY; without even the

++# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

++# See the License for more information.

++#=============================================================================

++# (To distribute this file outside of CMake, substitute the full

++#  License text for the above reference.)

++

++# Installation directories

++#

++if(NOT DEFINED CMAKE_INSTALL_BINDIR)

++  set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_SBINDIR)

++  set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR)

++  set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)

++  set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR)

++  set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR)

++  set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_LIBDIR)

++  set(_LIBDIR_DEFAULT "lib")

++  # Override this default 'lib' with 'lib64' iff:

++  #  - we are on Linux system but NOT cross-compiling

++  #  - we are NOT on debian

++  #  - we are on a 64 bits system

++  # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf

++  # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if

++  # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"

++  # See http://wiki.debian.org/Multiarch

++  if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU")

++      AND NOT CMAKE_CROSSCOMPILING)

++    if (EXISTS "/etc/debian_version") # is this a debian system ?

++       if(CMAKE_LIBRARY_ARCHITECTURE)

++         set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")

++       endif()

++    else() # not debian, rely on CMAKE_SIZEOF_VOID_P:

++      if(NOT DEFINED CMAKE_SIZEOF_VOID_P)

++        message(AUTHOR_WARNING

++          "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "

++          "Please enable at least one language before including GNUInstallDirs.")

++      else()

++        if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")

++          set(_LIBDIR_DEFAULT "lib64")

++        endif()

++      endif()

++    endif()

++  endif()

++  set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR)

++  set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR)

++  set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR)

++  set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)")

++endif()

++

++#-----------------------------------------------------------------------------

++# Values whose defaults are relative to DATAROOTDIR.  Store empty values in

++# the cache and store the defaults in local variables if the cache values are

++# not set explicitly.  This auto-updates the defaults as DATAROOTDIR changes.

++

++if(NOT CMAKE_INSTALL_DATADIR)

++  set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)")

++  set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}")

++endif()

++

++if(NOT CMAKE_INSTALL_INFODIR)

++  set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)")

++  set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info")

++endif()

++

++if(NOT CMAKE_INSTALL_LOCALEDIR)

++  set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)")

++  set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")

++endif()

++

++if(NOT CMAKE_INSTALL_MANDIR)

++  set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)")

++  set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man")

++endif()

++

++if(NOT CMAKE_INSTALL_DOCDIR)

++  set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)")

++  set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}")

++endif()

++

++#-----------------------------------------------------------------------------

++

++mark_as_advanced(

++  CMAKE_INSTALL_BINDIR

++  CMAKE_INSTALL_SBINDIR

++  CMAKE_INSTALL_LIBEXECDIR

++  CMAKE_INSTALL_SYSCONFDIR

++  CMAKE_INSTALL_SHAREDSTATEDIR

++  CMAKE_INSTALL_LOCALSTATEDIR

++  CMAKE_INSTALL_LIBDIR

++  CMAKE_INSTALL_INCLUDEDIR

++  CMAKE_INSTALL_OLDINCLUDEDIR

++  CMAKE_INSTALL_DATAROOTDIR

++  CMAKE_INSTALL_DATADIR

++  CMAKE_INSTALL_INFODIR

++  CMAKE_INSTALL_LOCALEDIR

++  CMAKE_INSTALL_MANDIR

++  CMAKE_INSTALL_DOCDIR

++  )

++

++# Result directories

++#

++foreach(dir

++    BINDIR

++    SBINDIR

++    LIBEXECDIR

++    SYSCONFDIR

++    SHAREDSTATEDIR

++    LOCALSTATEDIR

++    LIBDIR

++    INCLUDEDIR

++    OLDINCLUDEDIR

++    DATAROOTDIR

++    DATADIR

++    INFODIR

++    LOCALEDIR

++    MANDIR

++    DOCDIR

++    )

++  if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}})

++    set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")

++  else()

++    set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}")

++  endif()

++endforeach()

+diff -Naur glm/CMakeLists.txt glmn/CMakeLists.txt
+--- glm/CMakeLists.txt	2019-09-07 14:10:16.000000000 +0200
++++ glmn/CMakeLists.txt	2019-09-23 00:10:29.559815104 +0200
+@@ -4,6 +4,11 @@
+ set(GLM_VERSION "0.9.9")

+ project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)

+ 

++list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

++

++include(GNUInstallDirs)

++include(CMakePackageConfigHelpers)

++

+ enable_testing()

+ 

+ option(GLM_QUIET "No CMake Message" OFF)

+@@ -237,3 +242,62 @@
+ add_subdirectory(glm)

+ add_subdirectory(test)

+ 

++set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")

++install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

++

++

++# CMake automatically adds an architecture compatibility check to make sure

++# 32 and 64 bit code is not accidentally mixed. For a header-only library this

++# is not required. The check can be disabled by temporarily unsetting

++# CMAKE_SIZEOF_VOID_P. In CMake 3.14 and later this can be achieved more cleanly

++# with write_basic_package_version_file(ARCH_INDEPENDENT).

++# TODO: Use this once a newer CMake can be required.

++set(GLM_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})

++unset(CMAKE_SIZEOF_VOID_P)

++write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake" VERSION ${GLM_VERSION} COMPATIBILITY AnyNewerVersion)

++set(CMAKE_SIZEOF_VOID_P ${GLM_SIZEOF_VOID_P})

++

++# build tree package config

++configure_file(cmake/glmBuildConfig.cmake.in glmConfig.cmake @ONLY)

++

++# install tree package config

++configure_package_config_file(

++	cmake/glmConfig.cmake.in

++	${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake

++	INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}

++	PATH_VARS CMAKE_INSTALL_INCLUDEDIR

++	NO_CHECK_REQUIRED_COMPONENTS_MACRO)

++

++install(FILES

++	"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"

++	"${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"

++	DESTINATION ${GLM_INSTALL_CONFIGDIR})

++

++add_library(glm INTERFACE)

++target_include_directories(glm INTERFACE

++	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>

++	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)

++install(TARGETS glm EXPORT glmTargets)

++

++export(EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake")

++

++install(EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${GLM_INSTALL_CONFIGDIR})

++

++# build pkg-config file

++configure_file("./cmake/glm.pc.in" "glm.pc" @ONLY)

++

++# install pkg-config file

++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")

++

++export(PACKAGE glm)

++

++if(NOT TARGET uninstall)

++	configure_file(

++		${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in

++		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake

++		IMMEDIATE @ONLY)

++

++	add_custom_target(uninstall

++		COMMAND ${CMAKE_COMMAND} -P

++		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)

++endif()

+diff -Naur glm/cmake_uninstall.cmake.in glmn/cmake_uninstall.cmake.in
+--- glm/cmake_uninstall.cmake.in	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake_uninstall.cmake.in	2019-09-23 00:12:22.495660449 +0200
+@@ -0,0 +1,26 @@
++if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

++  message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

++endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

++

++if (NOT DEFINED CMAKE_INSTALL_PREFIX)

++  set (CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")

++endif ()

++ message(${CMAKE_INSTALL_PREFIX})

++

++file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)

++string(REGEX REPLACE "\n" ";" files "${files}")

++foreach(file ${files})

++  message(STATUS "Uninstalling $ENV{DESTDIR}${file}")

++  if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")

++    exec_program(

++      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""

++      OUTPUT_VARIABLE rm_out

++      RETURN_VALUE rm_retval

++      )

++    if(NOT "${rm_retval}" STREQUAL 0)

++      message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")

++    endif(NOT "${rm_retval}" STREQUAL 0)

++  else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")

++    message(STATUS "File $ENV{DESTDIR}${file} does not exist.")

++  endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")

++endforeach(file)

diff --git a/gnu/packages/patches/gnome-control-center-udisks.patch b/gnu/packages/patches/gnome-control-center-udisks.patch
new file mode 100644
index 0000000000..823684b2e9
--- /dev/null
+++ b/gnu/packages/patches/gnome-control-center-udisks.patch
@@ -0,0 +1,221 @@
+This patch is derived from upstream commit 2520aea6 and fixes upstream issues
+285 and 302.  See https://gitlab.gnome.org/GNOME/gcr/merge_requests/387,
+https://gitlab.gnome.org/GNOME/gnome-control-center/issues/285 and
+https://gitlab.gnome.org/GNOME/gnome-control-center/issues/302.
+
+diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c
+index e2276a295b3fd9de01b30fc3369069b5d33ba5b7..ff47c1fef2493bcc7ab34f9e8716d570d8d370ed 100644
+--- a/panels/info/cc-info-overview-panel.c
++++ b/panels/info/cc-info-overview-panel.c
+@@ -36,6 +36,7 @@
+ #include <glibtop/mountlist.h>
+ #include <glibtop/mem.h>
+ #include <glibtop/sysinfo.h>
++#include <udisks/udisks.h>
+ 
+ #include <gdk/gdk.h>
+ 
+@@ -81,9 +82,7 @@ typedef struct
+ 
+   GCancellable   *cancellable;
+ 
+-  /* Free space */
+-  GList          *primary_mounts;
+-  guint64         total_bytes;
++  UDisksClient   *client;
+ 
+   GraphicsData   *graphics_data;
+ } CcInfoOverviewPanelPrivate;
+@@ -96,8 +95,6 @@ struct _CcInfoOverviewPanel
+  CcInfoOverviewPanelPrivate *priv;
+ };
+ 
+-static void get_primary_disc_info_start (CcInfoOverviewPanel *self);
+-
+ typedef struct
+ {
+   char *major;
+@@ -486,111 +483,51 @@ get_os_type (void)
+ }
+ 
+ static void
+-query_done (GFile               *file,
+-            GAsyncResult        *res,
+-            CcInfoOverviewPanel *self)
++get_primary_disc_info (CcInfoOverviewPanel *self)
+ {
+   CcInfoOverviewPanelPrivate *priv;
+-  g_autoptr(GFileInfo) info = NULL;
+-  g_autoptr(GError) error = NULL;
+-
+-  info = g_file_query_filesystem_info_finish (file, res, &error);
+-  if (info != NULL)
+-    {
+-      priv = cc_info_overview_panel_get_instance_private (self);
+-      priv->total_bytes += g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE);
+-    }
+-  else
+-    {
+-      if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-          return;
+-      else
+-        {
+-          g_autofree char *path = NULL;
+-          path = g_file_get_path (file);
+-          g_warning ("Failed to get filesystem free space for '%s': %s", path, error->message);
+-        }
+-    }
++  GDBusObjectManager *manager;
++  g_autolist(GDBusObject) objects = NULL;
++  GList *l;
++  guint64 total_size;
+ 
+-  /* And onto the next element */
+-  get_primary_disc_info_start (self);
+-}
+-
+-static void
+-get_primary_disc_info_start (CcInfoOverviewPanel *self)
+-{
+-  GUnixMountEntry *mount;
+-  g_autoptr(GFile) file = NULL;
+-  CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
++  priv = cc_info_overview_panel_get_instance_private (self);
++  total_size = 0;
+ 
+-  if (priv->primary_mounts == NULL)
++  if (!priv->client)
+     {
+-      g_autofree char *size = NULL;
+-
+-      size = g_format_size (priv->total_bytes);
+-      gtk_label_set_text (GTK_LABEL (priv->disk_label), size);
+-
++      gtk_label_set_text (GTK_LABEL (priv->disk_label), _("Unknown"));
+       return;
+     }
+ 
+-  mount = priv->primary_mounts->data;
+-  priv->primary_mounts = g_list_remove (priv->primary_mounts, mount);
+-  file = g_file_new_for_path (g_unix_mount_get_mount_path (mount));
+-  g_unix_mount_free (mount);
+-
+-  g_file_query_filesystem_info_async (file,
+-                                      G_FILE_ATTRIBUTE_FILESYSTEM_SIZE,
+-                                      0,
+-                                      priv->cancellable,
+-                                      (GAsyncReadyCallback) query_done,
+-                                      self);
+-}
+-
+-static void
+-get_primary_disc_info (CcInfoOverviewPanel *self)
+-{
+-  GList *points;
+-  GList *p;
+-  GHashTable *hash;
+-  CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
+-
+-  hash = g_hash_table_new (g_str_hash, g_str_equal);
+-  points = g_unix_mount_points_get (NULL);
+-
+-  /* If we do not have /etc/fstab around, try /etc/mtab */
+-  if (points == NULL)
+-    points = g_unix_mounts_get (NULL);
++  manager = udisks_client_get_object_manager (priv->client);
++  objects = g_dbus_object_manager_get_objects (manager);
+ 
+-  for (p = points; p != NULL; p = p->next)
++  for (l = objects; l != NULL; l = l->next)
+     {
+-      GUnixMountEntry *mount = p->data;
+-      const char *mount_path;
+-      const char *device_path;
+-
+-      mount_path = g_unix_mount_get_mount_path (mount);
+-      device_path = g_unix_mount_get_device_path (mount);
+-
+-      /* Do not count multiple mounts with same device_path, because it is
+-       * probably something like btrfs subvolume. Use only the first one in
+-       * order to count the real size. */
+-      if (gsd_should_ignore_unix_mount (mount) ||
+-          gsd_is_removable_mount (mount) ||
+-          g_str_has_prefix (mount_path, "/media/") ||
+-          g_str_has_prefix (mount_path, g_get_home_dir ()) ||
+-          g_hash_table_lookup (hash, device_path) != NULL)
++      UDisksDrive *drive;
++      drive = udisks_object_peek_drive (UDISKS_OBJECT (l->data));
++
++      /* Skip removable devices */
++      if (drive == NULL ||
++          udisks_drive_get_removable (drive) ||
++          udisks_drive_get_ejectable (drive))
+         {
+-          g_unix_mount_free (mount);
+           continue;
+         }
+ 
+-      priv->primary_mounts = g_list_prepend (priv->primary_mounts, mount);
+-      g_hash_table_insert (hash, (gpointer) device_path, (gpointer) device_path);
++      total_size += udisks_drive_get_size (drive);
+     }
+-  g_list_free (points);
+-  g_hash_table_destroy (hash);
+ 
+-  priv->cancellable = g_cancellable_new ();
+-  get_primary_disc_info_start (self);
++  if (total_size > 0)
++    {
++      g_autofree gchar *size = g_format_size (total_size);
++      gtk_label_set_text (GTK_LABEL (priv->disk_label), size);
++    }
++  else
++    {
++      gtk_label_set_text (GTK_LABEL (priv->disk_label), _("Unknown"));
++    }
+ }
+ 
+ static char *
+@@ -852,8 +789,7 @@ cc_info_overview_panel_finalize (GObject *object)
+       g_clear_object (&priv->cancellable);
+     }
+ 
+-  if (priv->primary_mounts)
+-    g_list_free_full (priv->primary_mounts, (GDestroyNotify) g_unix_mount_free);
++  g_clear_object (&priv->client);
+ 
+   g_free (priv->gnome_version);
+   g_free (priv->gnome_date);
+@@ -895,6 +831,7 @@ static void
+ cc_info_overview_panel_init (CcInfoOverviewPanel *self)
+ {
+   CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
++  g_autoptr(GError) error = NULL;
+ 
+   gtk_widget_init_template (GTK_WIDGET (self));
+ 
+@@ -907,6 +844,12 @@ cc_info_overview_panel_init (CcInfoOverviewPanel *self)
+   else
+     gtk_widget_destroy (priv->updates_button);
+ 
++  priv->client = udisks_client_new_sync (NULL, &error);
++
++  if (error != NULL)
++      g_warning ("Unable to get UDisks client: %s. Disk information will not be available.",
++                 error->message);
++
+   info_overview_panel_setup_overview (self);
+   info_overview_panel_setup_virt (self);
+ }
+diff --git a/panels/info/meson.build b/panels/info/meson.build
+index 03742551314f91b60e3ec1caad153ff314b93310..c54e5fdaff3c6ddb59cca8ee9a2bf5a0212bf196 100644
+--- a/panels/info/meson.build
++++ b/panels/info/meson.build
+@@ -61,6 +61,7 @@ sources += gnome.compile_resources(
+ 
+ deps = common_deps + [
+   polkit_gobject_dep,
++  dependency('udisks2', version: '>= 2.1.8'),
+   dependency('libgtop-2.0')
+ ]
+ 
diff --git a/gnu/packages/patches/go-skip-gc-test.patch b/gnu/packages/patches/go-skip-gc-test.patch
new file mode 100644
index 0000000000..2baab97580
--- /dev/null
+++ b/gnu/packages/patches/go-skip-gc-test.patch
@@ -0,0 +1,17 @@
+Skip a GC test known to be flaky:
+
+  https://issues.guix.gnu.org/issue/37425
+  https://github.com/golang/go/issues/27636
+
+--- go/src/runtime/gc_test.go	2019-09-16 23:10:18.200680387 +0200
++++ go/src/runtime/gc_test.go	2019-09-16 23:11:50.324360646 +0200
+@@ -27,6 +27,9 @@ func TestGcSys(t *testing.T) {
+ 	if runtime.GOOS == "linux" && runtime.GOARCH == "arm64" {
+ 		t.Skip("skipping test; GOOS=linux GOARCH=arm64 https://github.com/golang/go/issues/27636")
+ 	}
++	if runtime.GOOS == "linux" {
++		t.Skip("skipping test; GOOS=linux https://issues.guix.gnu.org/issue/37425")
++	}
+ 	got := runTestProg(t, "testprog", "GCSys")
+ 	want := "OK\n"
+ 	if got != want {
diff --git a/gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch b/gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch
index d00cc5a420..956fa617c3 100644
--- a/gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch
+++ b/gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch
@@ -2,10 +2,134 @@
 # add the full path.
 #
 # This patch was provided by Luca Bruno <lucabru@src.gnome.org>  for 
-# 'gobject-introspection' 1.40.0 in Nix. 
---- ./giscanner/utils.py.orig	2014-08-14 22:05:05.055334080 +0200
-+++ ./giscanner/utils.py	2014-08-14 22:05:24.687497334 +0200
-@@ -110,17 +110,11 @@
+# 'gobject-introspection' 1.40.0 in Nix.
+#
+# It has since been updated to work with newer versions of
+# gobject-introspection.
+--- a/giscanner/scannermain.py
++++ b/giscanner/scannermain.py
+@@ -95,6 +95,39 @@ def get_windows_option_group(parser):
+     return group
+ 
+ 
++def _get_default_fallback_libpath():
++    # Newer multiple-output-optimized stdenv has an environment variable
++    # $outputLib which in turn specifies another variable which then is used as
++    # the destination for the library contents (${!outputLib}/lib).
++    store_path = os.environ.get(os.environ.get("outputLib")) if "outputLib" in os.environ else None
++    if store_path is None:
++        outputs = os.environ.get("outputs", "out").split()
++        if "lib" in outputs:
++            # For multiple output derivations let's try whether there is a $lib
++            # environment variable and use that as the base store path.
++            store_path = os.environ.get("lib")
++        elif "out" in outputs:
++            # Otherwise we have a single output derivation, so the libraries
++            # most certainly will end up in "$out/lib".
++            store_path = os.environ.get("out")
++
++    if store_path is not None:
++        # Even if we have a $lib as output, there still should be a $lib/lib
++        # directory.
++        return os.path.join(store_path, 'lib')
++    else:
++        # If we haven't found a possible scenario, let's return an empty string
++        # so that the shared library won't be prepended with a path.
++        #
++        # Note that this doesn't mean that all hope is lost, because after all
++        # we can still use --fallback-library-path to set one.
++        #
++        # Also, we're not returning None, because that would make it very
++        # difficult to disable adding fallback paths altogether using something
++        # like: --fallback-library-path=""
++        return ""
++
++
+ def _get_option_parser():
+     parser = optparse.OptionParser('%prog [options] sources',
+                                    version='%prog ' + giscanner.__version__)
+@@ -205,6 +238,10 @@ match the namespace prefix.""")
+     parser.add_option("", "--filelist",
+                       action="store", dest="filelist", default=[],
+                       help="file containing headers and sources to be scanned")
++    parser.add_option("", "--fallback-library-path",
++                      action="store", dest="fallback_libpath",
++                      default=_get_default_fallback_libpath(),
++                      help="Path to prepend to unknown shared libraries")
+ 
+     group = get_preprocessor_option_group(parser)
+     parser.add_option_group(group)
+--- a/giscanner/shlibs.py
++++ b/giscanner/shlibs.py
+@@ -57,6 +57,14 @@ def _ldd_library_pattern(library_name):
+     $""" % re.escape(library_name), re.VERBOSE)
+ 
+ 
++def _ldd_library_guix_pattern(library_name):
++    store_dir = re.escape(
++      os.environ.get("NIX_STORE", default="/gnu/store")
++    )
++    pattern = r'(%s(?:/[^/]*)+lib%s[^A-Za-z0-9_-][^\s\(\)]*)'
++    return re.compile(pattern % (store_dir, re.escape(library_name)))
++
++
+ # This is a what we do for non-la files. We assume that we are on an
+ # ELF-like system where ldd exists and the soname extracted with ldd is
+ # a filename that can be opened with dlopen().
+@@ -106,7 +112,8 @@ def _resolve_non_libtool(options, binary, libraries):
+             output = output.decode("utf-8", "replace")
+ 
+         shlibs = resolve_from_ldd_output(libraries, output)
+-        return list(map(sanitize_shlib_path, shlibs))
++        fallback_libpath = options.fallback_libpath or "";
++        return list(map(lambda p: os.path.join(fallback_libpath, p), map(sanitize_shlib_path, shlibs)))
+ 
+ 
+ def sanitize_shlib_path(lib):
+@@ -115,19 +122,18 @@ def sanitize_shlib_path(lib):
+     # In case we get relative paths on macOS (like @rpath) then we fall
+     # back to the basename as well:
+     # https://gitlab.gnome.org/GNOME/gobject-introspection/issues/222
+-    if sys.platform == "darwin":
+-        if not os.path.isabs(lib):
+-            return os.path.basename(lib)
+-        return lib
+-    else:
++
++    # Always use absolute paths if available
++    if not os.path.isabs(lib):
+         return os.path.basename(lib)
++    return lib
+ 
+ 
+ def resolve_from_ldd_output(libraries, output):
+     patterns = {}
+     for library in libraries:
+         if not os.path.isfile(library):
+-            patterns[library] = _ldd_library_pattern(library)
++            patterns[library] = (_ldd_library_pattern(library), _ldd_library_guix_pattern(library))
+     if len(patterns) == 0:
+         return []
+ 
+@@ -139,8 +145,12 @@ def resolve_from_ldd_output(libraries, output):
+         if line.endswith(':'):
+             continue
+         for word in line.split():
+-            for library, pattern in patterns.items():
+-                m = pattern.match(word)
++            for library, (pattern, guix_pattern) in patterns.items():
++                store_dir = os.environ.get("NIX_STORE", default="/gnu/store")
++                if line.find(store_dir) != -1:
++                    m = guix_pattern.match(word)
++                else:
++                    m = pattern.match(word)
+                 if m:
+                     del patterns[library]
+                     shlibs.append(m.group())
+
+--- a/giscanner/utils.py
++++ b/giscanner/utils.py
+@@ -111,17 +111,11 @@ def extract_libtool_shlib(la_file):
      if dlname is None:
          return None
  
@@ -28,3 +152,15 @@
  
  
  def extract_libtool(la_file):
+--- a/tests/scanner/test_shlibs.py
++++ b/tests/scanner/test_shlibs.py
+@@ -40,6 +64,7 @@ class TestLddParser(unittest.TestCase):
+ 
+         self.assertEqual(
+             sanitize_shlib_path('/foo/bar'),
+-            '/foo/bar' if sys.platform == 'darwin' else 'bar')
++            # Always use an absolute filename for Guix
++            '/foo/bar')
+ 
+     def test_unresolved_library(self):
+output = ''
diff --git a/gnu/packages/patches/gobject-introspection-cc.patch b/gnu/packages/patches/gobject-introspection-cc.patch
index d9cacf4ca7..6a86b56b44 100644
--- a/gnu/packages/patches/gobject-introspection-cc.patch
+++ b/gnu/packages/patches/gobject-introspection-cc.patch
@@ -1,11 +1,14 @@
 Use gcc as the default C compiler if CC is not set.
 
-
---- gobject-introspection-1.44.0.orig/giscanner/__init__.py	2014-08-04 22:37:07.000000000 +0800
-+++ gobject-introspection-1.44.0/giscanner/__init__.py	2015-04-20 17:30:26.507697234 +0800
-@@ -22,3 +22,5 @@
+diff -ru gobject-introspection-1.58.1.orig/giscanner/__init__.py gobject-introspection-1.58.1/giscanner/__init__.py
+--- gobject-introspection-1.58.1.orig/giscanner/__init__.py	1970-01-01 01:00:00.000000000 +0100
++++ gobject-introspection-1.58.1/giscanner/__init__.py	2018-12-03 13:33:28.788971299 +0100
+@@ -22,6 +22,8 @@
  builddir = os.environ.get('UNINSTALLED_INTROSPECTION_BUILDDIR')
  if builddir is not None:
      __path__.append(os.path.join(builddir, 'giscanner'))
 +if not 'CC' in os.environ:
 +    os.environ['CC'] = 'gcc'
+ try:
+     from ._version import __version__
+ except ImportError:
diff --git a/gnu/packages/patches/groff-source-date-epoch.patch b/gnu/packages/patches/groff-source-date-epoch.patch
deleted file mode 100644
index 53c590b049..0000000000
--- a/gnu/packages/patches/groff-source-date-epoch.patch
+++ /dev/null
@@ -1,299 +0,0 @@
-Adds support for the environment variable SOURCE_DATE_EPOCH.
-
-See: https://sources.debian.net/patches/groff/1.22.3-9/source-date-epoch.patch/
-
-From abc23bc9245e18468817f2838361c3a08f7521e2 Mon Sep 17 00:00:00 2001
-From: Colin Watson <cjwatson@debian.org>
-Date: Thu, 5 Nov 2015 11:47:34 +0000
-Subject: Implement `SOURCE_DATE_EPOCH' for reproducible builds.
-
-Author: Colin Watson <cjwatson@debian.org>
-Forwarded: yes
-Last-Update: 2015-11-05
-
-Patch-Name: source-date-epoch.patch
----
- doc/groff.texinfo                 |  6 +++++
- src/devices/grohtml/grohtml.man   |  7 ++++++
- src/devices/grohtml/post-html.cpp |  5 ++--
- src/devices/gropdf/gropdf.man     |  7 ++++++
- src/devices/gropdf/gropdf.pl      |  3 ++-
- src/devices/grops/grops.man       |  7 ++++++
- src/devices/grops/ps.cpp          |  3 ++-
- src/include/curtime.h             | 23 ++++++++++++++++++
- src/libs/libgroff/Makefile.sub    |  2 ++
- src/libs/libgroff/curtime.cpp     | 51 +++++++++++++++++++++++++++++++++++++++
- src/roff/troff/input.cpp          |  3 ++-
- 11 files changed, 112 insertions(+), 5 deletions(-)
- create mode 100644 src/include/curtime.h
- create mode 100644 src/libs/libgroff/curtime.cpp
-
-diff --git a/doc/groff.texinfo b/doc/groff.texinfo
-index 066b5274..1d3c7a9f 100644
---- a/doc/groff.texinfo
-+++ b/doc/groff.texinfo
-@@ -1453,6 +1453,12 @@ default directory (on Unix and GNU/Linux systems, this is usually
- @item GROFF_TYPESETTER
- @tindex GROFF_TYPESETTER@r{, environment variable}
- The default output device.
-+
-+@item SOURCE_DATE_EPOCH
-+@tindex SOURCE_DATE_EPOCH@r{, environment variable}
-+A timestamp (expressed as seconds since the Unix epoch) to use in place of
-+the current time when initializing time-based built-in registers such as
-+@code{\n[seconds]}.
- @end table
- 
- Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
-diff --git a/src/devices/grohtml/grohtml.man b/src/devices/grohtml/grohtml.man
-index 51eae224..4be4abbc 100644
---- a/src/devices/grohtml/grohtml.man
-+++ b/src/devices/grohtml/grohtml.man
-@@ -419,6 +419,13 @@ and
- for more details.
- .
- .
-+.TP
-+.SM
-+.B SOURCE_DATE_EPOCH
-+A timestamp (expressed as seconds since the Unix epoch) to use as the
-+creation timestamp in place of the current time.
-+.
-+.
- .\" --------------------------------------------------------------------
- .SH BUGS
- .\" --------------------------------------------------------------------
-diff --git a/src/devices/grohtml/post-html.cpp b/src/devices/grohtml/post-html.cpp
-index fefbf014..b5fc5167 100644
---- a/src/devices/grohtml/post-html.cpp
-+++ b/src/devices/grohtml/post-html.cpp
-@@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
- #include "html.h"
- #include "html-text.h"
- #include "html-table.h"
-+#include "curtime.h"
- 
- #include <time.h>
- 
-@@ -5013,7 +5014,7 @@ void html_printer::do_file_components (void)
- 	.put_string(Version_string)
- 	.end_comment();
- 
--      t = time(0);
-+      t = current_time();
-       html.begin_comment("CreationDate: ")
- 	.put_string(ctime(&t), strlen(ctime(&t))-1)
- 	.end_comment();
-@@ -5126,7 +5127,7 @@ html_printer::~html_printer()
-     .put_string(Version_string)
-     .end_comment();
- 
--  t = time(0);
-+  t = current_time();
-   html.begin_comment("CreationDate: ")
-     .put_string(ctime(&t), strlen(ctime(&t))-1)
-     .end_comment();
-diff --git a/src/devices/gropdf/gropdf.man b/src/devices/gropdf/gropdf.man
-index 3bbace6a..cc0c82f1 100644
---- a/src/devices/gropdf/gropdf.man
-+++ b/src/devices/gropdf/gropdf.man
-@@ -1029,6 +1029,13 @@ and
- for more details.
- .
- .
-+.TP
-+.SM
-+.B SOURCE_DATE_EPOCH
-+A timestamp (expressed as seconds since the Unix epoch) to use as the
-+creation timestamp in place of the current time.
-+.
-+.
- .\" --------------------------------------------------------------------
- .SH FILES
- .\" --------------------------------------------------------------------
-diff --git a/src/devices/gropdf/gropdf.pl b/src/devices/gropdf/gropdf.pl
-index 035d1238..c25c4c67 100644
---- a/src/devices/gropdf/gropdf.pl
-+++ b/src/devices/gropdf/gropdf.pl
-@@ -239,13 +239,14 @@ elsif (exists($ppsz{$papersz}))
-     @defaultmb=@mediabox=(0,0,$ppsz{$papersz}->[0],$ppsz{$papersz}->[1]);
- }
- 
--my (@dt)=localtime(time);
-+my (@dt)=localtime($ENV{SOURCE_DATE_EPOCH} || time);
- my $dt=PDFDate(\@dt);
- 
- my %info=('Creator' => "(groff version $cfg{GROFF_VERSION})",
- 				'Producer' => "(gropdf version $cfg{GROFF_VERSION})",
- 				'ModDate' => "($dt)",
- 				'CreationDate' => "($dt)");
-+
- while (<>)
- {
-     chomp;
-diff --git a/src/devices/grops/grops.man b/src/devices/grops/grops.man
-index 99fb7486..272c2d18 100644
---- a/src/devices/grops/grops.man
-+++ b/src/devices/grops/grops.man
-@@ -1419,6 +1419,13 @@ and
- for more details.
- .
- .
-+.TP
-+.SM
-+.B SOURCE_DATE_EPOCH
-+A timestamp (expressed as seconds since the Unix epoch) to use as the
-+creation timestamp in place of the current time.
-+.
-+.
- .\" --------------------------------------------------------------------
- .SH FILES
- .\" --------------------------------------------------------------------
-diff --git a/src/devices/grops/ps.cpp b/src/devices/grops/ps.cpp
-index 745a503b..03e65372 100644
---- a/src/devices/grops/ps.cpp
-+++ b/src/devices/grops/ps.cpp
-@@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
- #include "cset.h"
- #include "nonposix.h"
- #include "paper.h"
-+#include "curtime.h"
- 
- #include "ps.h"
- #include <time.h>
-@@ -1390,7 +1391,7 @@ ps_printer::~ps_printer()
- #else
-     time_t
- #endif
--    t = time(0);
-+    t = current_time();
-     fputs(ctime(&t), out.get_file());
-   }
-   for (font_pointer_list *f = font_list; f; f = f->next) {
-diff --git a/src/include/curtime.h b/src/include/curtime.h
-new file mode 100644
-index 00000000..a4105196
---- /dev/null
-+++ b/src/include/curtime.h
-@@ -0,0 +1,23 @@
-+/* Copyright (C) 2015  Free Software Foundation, Inc.
-+
-+This file is part of groff.
-+
-+groff is free software; you can redistribute it and/or modify it under
-+the terms of the GNU General Public License as published by the Free
-+Software Foundation, either version 2 of the License, or
-+(at your option) any later version.
-+
-+groff is distributed in the hope that it will be useful, but WITHOUT ANY
-+WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-+for more details.
-+
-+The GNU General Public License version 2 (GPL2) is available in the
-+internet at <http://www.gnu.org/licenses/gpl-2.0.txt>. */
-+
-+#ifdef LONG_FOR_TIME_T
-+long
-+#else
-+time_t
-+#endif
-+current_time();
-diff --git a/src/libs/libgroff/Makefile.sub b/src/libs/libgroff/Makefile.sub
-index 840d9934..4cb4937a 100644
---- a/src/libs/libgroff/Makefile.sub
-+++ b/src/libs/libgroff/Makefile.sub
-@@ -32,6 +32,7 @@ OBJS=\
-   cmap.$(OBJEXT) \
-   color.$(OBJEXT) \
-   cset.$(OBJEXT) \
-+  curtime.$(OBJEXT) \
-   device.$(OBJEXT) \
-   errarg.$(OBJEXT) \
-   error.$(OBJEXT) \
-@@ -82,6 +83,7 @@ CCSRCS=\
-   $(srcdir)/cmap.cpp \
-   $(srcdir)/color.cpp \
-   $(srcdir)/cset.cpp \
-+  $(srcdir)/curtime.cpp \
-   $(srcdir)/device.cpp \
-   $(srcdir)/errarg.cpp \
-   $(srcdir)/error.cpp \
-diff --git a/src/libs/libgroff/curtime.cpp b/src/libs/libgroff/curtime.cpp
-new file mode 100644
-index 00000000..00821b7f
---- /dev/null
-+++ b/src/libs/libgroff/curtime.cpp
-@@ -0,0 +1,51 @@
-+/* Copyright (C) 2015  Free Software Foundation, Inc.
-+
-+This file is part of groff.
-+
-+groff is free software; you can redistribute it and/or modify it under
-+the terms of the GNU General Public License as published by the Free
-+Software Foundation, either version 2 of the License, or
-+(at your option) any later version.
-+
-+groff is distributed in the hope that it will be useful, but WITHOUT ANY
-+WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-+for more details.
-+
-+The GNU General Public License version 2 (GPL2) is available in the
-+internet at <http://www.gnu.org/licenses/gpl-2.0.txt>. */
-+
-+#include <errno.h>
-+#include <limits.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <time.h>
-+
-+#include "errarg.h"
-+#include "error.h"
-+
-+#ifdef LONG_FOR_TIME_T
-+long
-+#else
-+time_t
-+#endif
-+current_time()
-+{
-+  char *source_date_epoch = getenv("SOURCE_DATE_EPOCH");
-+
-+  if (source_date_epoch) {
-+    errno = 0;
-+    char *endptr;
-+    long epoch = strtol(source_date_epoch, &endptr, 10);
-+
-+    if ((errno == ERANGE && (epoch == LONG_MAX || epoch == LONG_MIN)) ||
-+	(errno != 0 && epoch == 0))
-+      fatal("$SOURCE_DATE_EPOCH: strtol: %1", strerror(errno));
-+    if (endptr == source_date_epoch)
-+      fatal("$SOURCE_DATE_EPOCH: no digits found: %1", endptr);
-+    if (*endptr != '\0')
-+      fatal("$SOURCE_DATE_EPOCH: trailing garbage: %1", endptr);
-+    return epoch;
-+  } else
-+    return time(0);
-+}
-diff --git a/src/roff/troff/input.cpp b/src/roff/troff/input.cpp
-index 9594f074..f7d2c18a 100644
---- a/src/roff/troff/input.cpp
-+++ b/src/roff/troff/input.cpp
-@@ -36,6 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
- #include "input.h"
- #include "defs.h"
- #include "unicode.h"
-+#include "curtime.h"
- 
- // Needed for getpid() and isatty()
- #include "posix.h"
-@@ -8138,7 +8139,7 @@ static void init_registers()
- #else /* not LONG_FOR_TIME_T */
-   time_t
- #endif /* not LONG_FOR_TIME_T */
--    t = time(0);
-+    t = current_time();
-   // Use struct here to work around misfeature in old versions of g++.
-   struct tm *tt = localtime(&t);
-   set_number_reg("seconds", int(tt->tm_sec));
diff --git a/gnu/packages/patches/guile-2.2-default-utf8.patch b/gnu/packages/patches/guile-2.2-default-utf8.patch
index 3233388874..f55a6430c1 100644
--- a/gnu/packages/patches/guile-2.2-default-utf8.patch
+++ b/gnu/packages/patches/guile-2.2-default-utf8.patch
@@ -4,10 +4,10 @@ available during bootstrap, so using UTF-8 avoids that (and UTF-8 has
 built-in conversions in glibc, too.)
 
 diff --git a/libguile/bytevectors.c b/libguile/bytevectors.c
-index 7cd753009..de92653a4 100644
+index 0ac5ea6a6..f73301e2f 100644
 --- a/libguile/bytevectors.c
 +++ b/libguile/bytevectors.c
-@@ -1918,7 +1918,7 @@ utf_encoding_name (char *name, size_t utf_width, SCM endianness)
+@@ -1931,7 +1931,7 @@ utf_encoding_name (char *name, size_t utf_width, SCM endianness)
    if (scm_i_is_narrow_string (str))                                     \
      {                                                                   \
        err = mem_iconveh (scm_i_string_chars (str), c_strlen,            \
@@ -17,10 +17,10 @@ index 7cd753009..de92653a4 100644
                           &c_utf, &c_utf_len);                           \
        if (SCM_UNLIKELY (err))                                           \
 diff --git a/libguile/ports.c b/libguile/ports.c
-index 2a25cd58e..bdaf921ca 100644
+index 45e62f4e4..42012f3aa 100644
 --- a/libguile/ports.c
 +++ b/libguile/ports.c
-@@ -959,7 +959,9 @@ canonicalize_encoding (const char *enc)
+@@ -974,7 +974,9 @@ canonicalize_encoding (const char *enc)
    char *ret;
    int i;
  
@@ -31,7 +31,7 @@ index 2a25cd58e..bdaf921ca 100644
      return sym_ISO_8859_1;
    if (encoding_matches (enc, sym_UTF_8))
      return sym_UTF_8;
-@@ -4182,7 +4184,7 @@ scm_init_ports (void)
+@@ -4198,7 +4200,7 @@ scm_init_ports (void)
      scm_c_define ("%default-port-conversion-strategy",
                    scm_make_fluid_with_default (sym_substitute));
    /* Use the locale as the default port encoding.  */
@@ -41,10 +41,10 @@ index 2a25cd58e..bdaf921ca 100644
    scm_c_register_extension ("libguile-" SCM_EFFECTIVE_VERSION,
                              "scm_init_ice_9_ports",
 diff --git a/libguile/strings.c b/libguile/strings.c
-index 5c49e33d8..0131e6dc8 100644
+index 056b4c99f..63a6c050d 100644
 --- a/libguile/strings.c
 +++ b/libguile/strings.c
-@@ -1561,7 +1561,7 @@ scm_i_default_string_failed_conversion_handler (void)
+@@ -1579,7 +1579,7 @@ scm_i_default_string_failed_conversion_handler (void)
  SCM
  scm_from_locale_stringn (const char *str, size_t len)
  {
@@ -53,7 +53,7 @@ index 5c49e33d8..0131e6dc8 100644
                             scm_i_default_string_failed_conversion_handler ());
  }
  
-@@ -1885,7 +1885,7 @@ char *
+@@ -1907,7 +1907,7 @@ char *
  scm_to_locale_stringn (SCM str, size_t *lenp)
  {
    return scm_to_stringn (str, lenp,
@@ -62,17 +62,21 @@ index 5c49e33d8..0131e6dc8 100644
                           scm_i_default_string_failed_conversion_handler ());
  }
  
-@@ -2216,11 +2216,11 @@ scm_to_stringn (SCM str, size_t *lenp, const char *encoding,
-   len = 0;
-   enc = encoding;
-   if (enc == NULL)
--    enc = "ISO-8859-1";
-+    enc = "UTF-8";
+@@ -2195,7 +2195,7 @@ scm_to_stringn (SCM str, size_t *lenp, const char *encoding,
+     scm_wrong_type_arg_msg (NULL, 0, str, "string");
+ 
+   if (encoding == NULL)
+-    encoding = "ISO-8859-1";
++    encoding = "UTF-8";
+ 
+   if (c_strcasecmp (encoding, "UTF-8") == 0)
+     /* This is the most common case--e.g., when calling libc bindings
+@@ -2247,7 +2247,7 @@ scm_to_stringn (SCM str, size_t *lenp, const char *encoding,
    if (scm_i_is_narrow_string (str))
      {
        ret = mem_iconveh (scm_i_string_chars (str), ilen,
--                         "ISO-8859-1", enc,
-+                         "UTF-8", enc,
+-                         "ISO-8859-1", encoding,
++                         "UTF-8", encoding,
                           (enum iconv_ilseq_handler) handler, NULL,
                           &buf, &len);
  
diff --git a/gnu/packages/patches/guile-2.2-skip-oom-test.patch b/gnu/packages/patches/guile-2.2-skip-oom-test.patch
new file mode 100644
index 0000000000..765577653f
--- /dev/null
+++ b/gnu/packages/patches/guile-2.2-skip-oom-test.patch
@@ -0,0 +1,25 @@
+Skip 'test-out-of-memory', which is unreliable in Guile 2.2.4:
+
+  https://bugs.gnu.org/34155
+
+--- a/test-suite/standalone/Makefile.in	1969-12-31 19:00:00.000000000 -0500
++++ b/test-suite/standalone/Makefile.in	2019-05-27 16:44:32.302355990 -0400
+@@ -103,7 +103,7 @@
+ 	test-scm-c-bind-keyword-arguments$(EXEEXT) \
+ 	test-srfi-4$(EXEEXT) $(am__append_6) $(am__EXEEXT_1) \
+ 	test-smob-mark$(EXEEXT) test-smob-mark-race$(EXEEXT) \
+-	test-stack-overflow test-out-of-memory
++	test-stack-overflow
+ check_PROGRAMS = test-num2integral$(EXEEXT) test-round$(EXEEXT) \
+ 	test-foreign-object-c$(EXEEXT) test-list$(EXEEXT) \
+ 	test-unwind$(EXEEXT) test-conversion$(EXEEXT) \
+@@ -1938,8 +1938,7 @@
+ 	test-command-line-encoding test-command-line-encoding2 \
+ 	test-language test-guild-compile $(am__append_3) \
+ 	test-foreign-object-scm test-fast-slot-ref test-mb-regexp \
+-	test-use-srfi $(am__append_5) test-stack-overflow \
+-	test-out-of-memory
++	test-use-srfi $(am__append_5) test-stack-overflow
+ BUILT_SOURCES = $(am__append_2)
+ EXTRA_DIST = test-import-order-a.scm test-import-order-b.scm \
+ 	test-import-order-c.scm test-import-order-d.scm \
diff --git a/gnu/packages/patches/guile-relocatable.patch b/gnu/packages/patches/guile-relocatable.patch
index 95bddcce88..464333880c 100644
--- a/gnu/packages/patches/guile-relocatable.patch
+++ b/gnu/packages/patches/guile-relocatable.patch
@@ -11,7 +11,7 @@ location of the `guile' binary, allowing it to be relocated.
  
  #include "libguile/_scm.h"
  #include "libguile/alist.h"
-@@ -325,6 +326,32 @@
+@@ -326,6 +327,32 @@ scm_init_load_path ()
    SCM cpath = SCM_EOL;
  
  #ifdef SCM_LIBRARY_DIR
@@ -44,24 +44,24 @@ location of the `guile' binary, allowing it to be relocated.
    env = scm_i_mirror_backslashes (getenv ("GUILE_SYSTEM_PATH"));
    if (env && strcmp (env, "") == 0)
      /* special-case interpret system-path=="" as meaning no system path instead
-@@ -333,10 +360,7 @@
+@@ -334,10 +361,7 @@ scm_init_load_path ()
    else if (env)
      path = scm_parse_path (scm_from_locale_string (env), path);
    else
--    path = scm_list_4 (scm_from_locale_string (SCM_LIBRARY_DIR),
--                       scm_from_locale_string (SCM_SITE_DIR),
--                       scm_from_locale_string (SCM_GLOBAL_SITE_DIR),
--                       scm_from_locale_string (SCM_PKGDATA_DIR));
+-    path = scm_list_4 (scm_from_utf8_string (SCM_LIBRARY_DIR),
+-                       scm_from_utf8_string (SCM_SITE_DIR),
+-                       scm_from_utf8_string (SCM_GLOBAL_SITE_DIR),
+-                       scm_from_utf8_string (SCM_PKGDATA_DIR));
 +    path = scm_list_1 (scm_from_locale_string (module_dir));
  
    env = scm_i_mirror_backslashes (getenv ("GUILE_SYSTEM_COMPILED_PATH"));
    if (env && strcmp (env, "") == 0)
-@@ -346,8 +370,7 @@
+@@ -347,8 +371,7 @@ scm_init_load_path ()
      cpath = scm_parse_path (scm_from_locale_string (env), cpath);
    else
      {
--      cpath = scm_list_2 (scm_from_locale_string (SCM_CCACHE_DIR),
--                          scm_from_locale_string (SCM_SITE_CCACHE_DIR));
+-      cpath = scm_list_2 (scm_from_utf8_string (SCM_CCACHE_DIR),
+-                          scm_from_utf8_string (SCM_SITE_CCACHE_DIR));
 +      cpath = scm_list_1 (scm_from_locale_string (ccache_dir));
      }
  
diff --git a/gnu/packages/patches/handbrake-opt-in-nvenc.patch b/gnu/packages/patches/handbrake-opt-in-nvenc.patch
new file mode 100644
index 0000000000..2b34aaa427
--- /dev/null
+++ b/gnu/packages/patches/handbrake-opt-in-nvenc.patch
@@ -0,0 +1,14 @@
+Require opt-in for NVEnc support.  Otherwise the default is true with no way
+to disable it.
+
+--- HandBrake-1.2.0/make/configure.py.orig	1969-12-31 18:00:00.000000000 -0600
++++ HandBrake-1.2.0/make/configure.py	2019-01-22 23:22:46.186959060 -0600
+@@ -1320,7 +1320,7 @@
+     grp.add_option( '--disable-ffmpeg-aac', dest="enable_ffmpeg_aac", action='store_false' )
+ 
+     h = IfHost( 'enable Nvidia NVEnc video encoder', '*-*-*', none=optparse.SUPPRESS_HELP ).value
+-    grp.add_option( '--enable-nvenc', dest="enable_nvenc", default=not (host.match( '*-*-darwin*' ) or host.match( '*-*-freebsd*' )), action='store_true', help=h )
++    grp.add_option( '--enable-nvenc', dest="enable_nvenc", default=False, action='store_true', help=h )
+ 
+ 
+     cli.add_option_group( grp )
diff --git a/gnu/packages/patches/hdf4-tirpc.patch b/gnu/packages/patches/hdf4-tirpc.patch
new file mode 100644
index 0000000000..3f436e3887
--- /dev/null
+++ b/gnu/packages/patches/hdf4-tirpc.patch
@@ -0,0 +1,33 @@
+Build with libtirpc on all architectures because glibc no longer provides
+SunRPC support.
+
+diff --git a/configure b/configure
+--- a/configure
++++ b/configure
+@@ -23635,10 +23635,13 @@
+   *-pc-cygwin*)
+     LIBS="$LIBS -ltirpc"
+     CPPFLAGS="$CPPFLAGS -I/usr/include/tirpc"  ;;
++  *-linux-gnu)
++    LIBS="$LIBS -ltirpc"
++    CPPFLAGS="$CPPFLAGS"  ;;
+   *) ;;
+ esac
+ 
+-if test "X$BUILD_XDR" != "Xyes"; then
++if test "X$BUILD_XDR" = "Xyes"; then
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+@@ -23693,9 +23696,9 @@
+   ## but we need to make sure that it is present on the system. Do that here,
+   ## The SunRPC of the glibc has been replaced by a TI-RPC (Transport Independent RPC) library for IPv6 support
+   case "$host" in
+-    *-pc-cygwin*)
++    *)
+       HAVE_RPC="yes"
+-      ac_fn_c_check_header_mongrel "$LINENO" "rpc.h" "ac_cv_header_rpc_h" "$ac_includes_default"
++      ac_fn_c_check_header_mongrel "$LINENO" "rpc/rpc.h" "ac_cv_header_rpc_h" "$ac_includes_default"
+ if test "x$ac_cv_header_rpc_h" = xyes; then :
+   :
+ else
diff --git a/gnu/packages/patches/idris-test-no-node.patch b/gnu/packages/patches/idris-test-no-node.patch
deleted file mode 100644
index c04ad41a8e..0000000000
--- a/gnu/packages/patches/idris-test-no-node.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 6c52e1b902b869c25e2fe39cff6364143a04da61 Mon Sep 17 00:00:00 2001
-From: Niklas Larsson <niklas@mm.st>
-Date: Tue, 11 Dec 2018 19:56:22 +0100
-Subject: [PATCH] Only check for Node when required
-
----
- test/TestRun.hs | 34 ++++++++++++++++++++--------------
- 1 file changed, 20 insertions(+), 14 deletions(-)
-
-diff --git a/test/TestRun.hs b/test/TestRun.hs
-index c7db9fdcd..4809911f3 100644
---- a/test/TestRun.hs
-+++ b/test/TestRun.hs
-@@ -11,6 +11,7 @@ import Data.Proxy
- import Data.Typeable
- import Options.Applicative
- import System.Directory
-+import System.Environment
- import System.Exit
- import System.FilePath ((</>))
- import System.Info
-@@ -103,20 +104,25 @@ runTest path flags = do
-       normalise (x : xs) = x : normalise xs
-       normalise [] = []
- 
-+checkNode :: IO  ()
-+checkNode = do
-+    nodePath   <- findExecutable "node"
-+    nodejsPath <- findExecutable "nodejs"
-+    let node = nodePath <|> nodejsPath
-+    case node of
-+      Nothing -> do
-+        putStrLn "For running the test suite against Node, node must be installed."
-+        exitFailure
-+      Just _  -> return ()
-+
- main :: IO ()
- main = do
--  nodePath   <- findExecutable "node"
--  nodejsPath <- findExecutable "nodejs"
--  let node = nodePath <|> nodejsPath
--  case node of
--    Nothing -> do
--      putStrLn "For running the test suite against Node, node must be installed."
--      exitFailure
--    Just _  -> do
--      defaultMainWithIngredients ingredients $
-+    args <- getArgs
-+    when ("--node" `elem` args) checkNode
-+    defaultMainWithIngredients ingredients $
-         askOption $ \(NodeOpt node) ->
--          let (codegen, flags) = if node then (JS, ["--codegen", "node"])
--                                         else (C , [])
--           in
--            mkGoldenTests (testFamiliesForCodegen codegen)
--                        (flags ++ idrisFlags)
-+            let (codegen, flags) = if node then (JS, ["--codegen", "node"])
-+                                           else (C , [])
-+            in
-+                mkGoldenTests (testFamiliesForCodegen codegen) (flags ++ idrisFlags)
-+
diff --git a/gnu/packages/patches/ilmbase-fix-tests.patch b/gnu/packages/patches/ilmbase-fix-tests.patch
index fcaa37d201..34d3a180c4 100644
--- a/gnu/packages/patches/ilmbase-fix-tests.patch
+++ b/gnu/packages/patches/ilmbase-fix-tests.patch
@@ -22,10 +22,8 @@ Date: Wed, 24 Feb 2016 01:04:11 +0000
 
 Also fix a pre-existing typo.
 
-Index: ilmbase/ImathTest/testBoxAlgo.cpp
-===================================================================
---- ilmbase.orig/ImathTest/testBoxAlgo.cpp
-+++ ilmbase/ImathTest/testBoxAlgo.cpp
+--- a/IlmBase/ImathTest/testBoxAlgo.cpp
++++ b/IlmBase/ImathTest/testBoxAlgo.cpp
 @@ -886,10 +886,11 @@ boxMatrixTransform ()
  
      assert (approximatelyEqual (b2.min, b4.min, e));
@@ -54,10 +52,8 @@ On 32-bit x86, allow even greater discrepency at double
 precision, due to possible double-rounding.  See
 https://lists.nongnu.org/archive/html/openexr-devel/2015-12/msg00001.html
 
-Index: ilmbase/ImathTest/testBox.cpp
-===================================================================
---- ilmbase.orig/ImathTest/testBox.cpp
-+++ ilmbase/ImathTest/testBox.cpp
+--- a/IlmBase/ImathTest/testBox.cpp
++++ b/IlmBase/ImathTest/testBox.cpp
 @@ -47,6 +47,58 @@ using namespace IMATH_INTERNAL_NAMESPACE
  
  namespace {
diff --git a/gnu/packages/patches/ilmbase-openexr-pkg-config.patch b/gnu/packages/patches/ilmbase-openexr-pkg-config.patch
new file mode 100644
index 0000000000..99613080d8
--- /dev/null
+++ b/gnu/packages/patches/ilmbase-openexr-pkg-config.patch
@@ -0,0 +1,40 @@
+Fix pkg-config files when using the CMake build system.
+
+Upstream bug report:
+https://github.com/openexr/openexr/issues/567
+
+diff --git a/IlmBase/config/CMakeLists.txt b/IlmBase/config/CMakeLists.txt
+index 508176a..9e6ab91 100644
+--- a/IlmBase/config/CMakeLists.txt
++++ b/IlmBase/config/CMakeLists.txt
+@@ -71,9 +71,9 @@ if(ILMBASE_INSTALL_PKG_CONFIG)
+   # use a helper function to avoid variable pollution, but pretty simple
+   function(ilmbase_pkg_config_help pcinfile)
+     set(prefix ${CMAKE_INSTALL_PREFIX})
+-    set(exec_prefix ${CMAKE_INSTALL_BINDIR})
+-    set(libdir ${CMAKE_INSTALL_LIBDIR})
+-    set(includedir ${CMAKE_INSTALL_INCLUDEDIR})
++    set(exec_prefix ${CMAKE_INSTALL_FULL_BINDIR})
++    set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
++    set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+     set(LIB_SUFFIX_DASH ${ILMBASE_LIB_SUFFIX})
+     if(TARGET Threads::Threads)
+       # hrm, can't use properties as they end up as generator expressions
+diff --git a/OpenEXR/config/CMakeLists.txt b/OpenEXR/config/CMakeLists.txt
+index 1ef829a..b8dc141 100644
+--- a/OpenEXR/config/CMakeLists.txt
++++ b/OpenEXR/config/CMakeLists.txt
+@@ -72,9 +72,9 @@ if(OPENEXR_INSTALL_PKG_CONFIG)
+   # use a helper function to avoid variable pollution, but pretty simple
+   function(openexr_pkg_config_help pcinfile)
+     set(prefix ${CMAKE_INSTALL_PREFIX})
+-    set(exec_prefix ${CMAKE_INSTALL_BINDIR})
+-    set(libdir ${CMAKE_INSTALL_LIBDIR})
+-    set(includedir ${CMAKE_INSTALL_INCLUDEDIR})
++    set(exec_prefix ${CMAKE_INSTALL_FULL_BINDIR})
++    set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
++    set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+     set(LIB_SUFFIX_DASH ${OPENEXR_LIB_SUFFIX})
+     if(TARGET Threads::Threads)
+       # hrm, can't use properties as they end up as generator expressions
+
diff --git a/gnu/packages/patches/inkscape-poppler-0.76.patch b/gnu/packages/patches/inkscape-poppler-0.76.patch
new file mode 100644
index 0000000000..08e8303892
--- /dev/null
+++ b/gnu/packages/patches/inkscape-poppler-0.76.patch
@@ -0,0 +1,36 @@
+This patch adds support for Poppler 0.76 and later.
+
+Taken from upstream:
+<https://gitlab.com/inkscape/inkscape/commit/e831b034746f8dc3c3c1b88372751f6dcb974831>
+
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
+index 8484984bdf..4f798e35bf 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -421,7 +421,7 @@ void PdfParser::parse(Object *obj, GBool topLevel) {
+ 	error(errInternal, -1, "Weird page contents");
+     	return;
+   }
+-  parser = new Parser(xref, new Lexer(xref, obj), gFalse);
++  parser = new _POPPLER_NEW_PARSER(xref, obj);
+   go(topLevel);
+   delete parser;
+   parser = nullptr;
+diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
+index 61a15083a0..5e8bc4ae90 100644
+--- a/src/extension/internal/pdfinput/poppler-transition-api.h
++++ b/src/extension/internal/pdfinput/poppler-transition-api.h
+@@ -14,6 +14,13 @@
+ 
+ #include <glib/poppler-features.h>
+ 
++#if POPPLER_CHECK_VERSION(0, 76, 0)
++#define _POPPLER_NEW_PARSER(xref, obj) Parser(xref, obj, gFalse)
++#else
++#define _POPPLER_NEW_PARSER(xref, obj) Parser(xref, new Lexer(xref, obj), gFalse)
++#endif
++
++
+ #if POPPLER_CHECK_VERSION(0, 72, 0)
+ #define getCString c_str
+ #endif
diff --git a/gnu/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch b/gnu/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch
new file mode 100644
index 0000000000..53e681ea31
--- /dev/null
+++ b/gnu/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch
@@ -0,0 +1,100 @@
+These fixes are needed to adapt isc-dhcp-4.4.1 to build
+successfully after its bundled copy of bind has been updated.
+
+It is derived from the following upstream commits:
+
+commit 8194daabfd590f17825f0c61e9534bee5c99cc86
+Author: Thomas Markwalder <tmark@isc.org>
+Date:   Fri Sep 14 13:41:14 2018 -0400
+
+  [master] Added includes of new BIND9 compatibility headers, updated util/bind.sh
+  
+      Merges in rt48072.
+
+commit cc35f84943df44dac2499f3e16e8aaba7d54191d
+Author: Thomas Markwalder <tmark@isc.org>
+Date:   Tue Mar 19 08:36:23 2019 -0400
+
+  [master] Avoid Bind9 python dependency
+  
+      merges [#3,!1] Avoid Bind9 python dependency
+
+--- a/bind/Makefile.in
++++ b/bind/Makefile.in
+@@ -23,7 +23,7 @@ exec_prefix = @exec_prefix@
+ 
+ bindconfig = --without-openssl --without-libxml2 --without-libjson \
+ 	--without-gssapi --disable-threads --without-lmdb \
+-	--includedir=@includedir@ --libdir=@libdir@ \
++	--includedir=@includedir@ --libdir=@libdir@  --without-python\
+ 	@BINDLT@ @BINDIOMUX@ @BINDCONFIG@ --enable-full-report
+ 
+ @BIND_ATF_FALSE@cleandirs = ./lib ./include
+diff --git a/includes/omapip/isclib.h b/includes/omapip/isclib.h
+index 75a87ff6..538b927f 100644
+--- a/includes/omapip/isclib.h
++++ b/includes/omapip/isclib.h
+@@ -48,6 +48,9 @@
+ #include <string.h>
+ #include <netdb.h>
+ 
++#include <isc/boolean.h>
++#include <isc/int.h>
++
+ #include <isc/buffer.h>
+ #include <isc/lex.h>
+ #include <isc/lib.h>
+diff --git a/includes/omapip/result.h b/includes/omapip/result.h
+index 91243e1b..860298f6 100644
+--- a/includes/omapip/result.h
++++ b/includes/omapip/result.h
+@@ -26,6 +26,7 @@
+ #ifndef DHCP_RESULT_H
+ #define DHCP_RESULT_H 1
+ 
++#include <isc/boolean.h>
+ #include <isc/lang.h>
+ #include <isc/resultclass.h>
+ #include <isc/types.h>
+diff --git a/server/dhcpv6.c b/server/dhcpv6.c
+index a7110f98..cde4f617 100644
+--- a/server/dhcpv6.c
++++ b/server/dhcpv6.c
+@@ -1034,7 +1034,8 @@ void check_pool6_threshold(struct reply_state *reply,
+ 				  shared_name,
+ 				  inet_ntop(AF_INET6, &lease->addr,
+ 					    tmp_addr, sizeof(tmp_addr)),
+-				  used, count);
++				  (long long unsigned)(used),
++				  (long long unsigned)(count));
+ 		}
+ 		return;
+ 	}
+@@ -1066,7 +1067,8 @@ void check_pool6_threshold(struct reply_state *reply,
+ 		  "address: %s; high threshold %d%% %llu/%llu.",
+ 		  shared_name,
+ 		  inet_ntop(AF_INET6, &lease->addr, tmp_addr, sizeof(tmp_addr)),
+-		  poolhigh, used, count);
++		  poolhigh, (long long unsigned)(used),
++		  (long long unsigned)(count));
+ 
+ 	/* handle the low threshold now, if we don't
+ 	 * have one we default to 0. */
+@@ -1436,12 +1438,15 @@ pick_v6_address(struct reply_state *reply)
+ 		log_debug("Unable to pick client address: "
+ 			  "no addresses available  - shared network %s: "
+ 			  " 2^64-1 < total, %llu active,  %llu abandoned",
+-			  shared_name, active - abandoned, abandoned);
++			  shared_name, (long long unsigned)(active - abandoned),
++			  (long long unsigned)(abandoned));
+ 	} else {
+ 		log_debug("Unable to pick client address: "
+ 			  "no addresses available  - shared network %s: "
+ 			  "%llu total, %llu active,  %llu abandoned",
+-			  shared_name, total, active - abandoned, abandoned);
++			  shared_name, (long long unsigned)(total),
++			  (long long unsigned)(active - abandoned),
++		          (long long unsigned)(abandoned));
+ 	}
+ 
+ 	return ISC_R_NORESOURCES;
diff --git a/gnu/packages/patches/libarchive-CVE-2017-14166.patch b/gnu/packages/patches/libarchive-CVE-2017-14166.patch
deleted file mode 100644
index a122848440..0000000000
--- a/gnu/packages/patches/libarchive-CVE-2017-14166.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Fix CVE-2017-14166:
-
-https://github.com/libarchive/libarchive/issues/935
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14166
-
-Patch copied from upstream source repository:
-
-https://github.com/libarchive/libarchive/commit/fa7438a0ff4033e4741c807394a9af6207940d71
-
-From fa7438a0ff4033e4741c807394a9af6207940d71 Mon Sep 17 00:00:00 2001
-From: Joerg Sonnenberger <joerg@bec.de>
-Date: Tue, 5 Sep 2017 18:12:19 +0200
-Subject: [PATCH] Do something sensible for empty strings to make fuzzers
- happy.
-
----
- libarchive/archive_read_support_format_xar.c | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/libarchive/archive_read_support_format_xar.c b/libarchive/archive_read_support_format_xar.c
-index 7a22beb9d..93eeacc5e 100644
---- a/libarchive/archive_read_support_format_xar.c
-+++ b/libarchive/archive_read_support_format_xar.c
-@@ -1040,6 +1040,9 @@ atol10(const char *p, size_t char_cnt)
- 	uint64_t l;
- 	int digit;
- 
-+	if (char_cnt == 0)
-+		return (0);
-+
- 	l = 0;
- 	digit = *p - '0';
- 	while (digit >= 0 && digit < 10  && char_cnt-- > 0) {
-@@ -1054,7 +1057,10 @@ atol8(const char *p, size_t char_cnt)
- {
- 	int64_t l;
- 	int digit;
--        
-+
-+	if (char_cnt == 0)
-+		return (0);
-+
- 	l = 0;
- 	while (char_cnt-- > 0) {
- 		if (*p >= '0' && *p <= '7')
diff --git a/gnu/packages/patches/libarchive-CVE-2017-14502.patch b/gnu/packages/patches/libarchive-CVE-2017-14502.patch
deleted file mode 100644
index 8e0508afb5..0000000000
--- a/gnu/packages/patches/libarchive-CVE-2017-14502.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Fix CVE-2017-14502:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14502
-https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=573
-
-Patch copied from upstream source repository:
-
-https://github.com/libarchive/libarchive/commit/5562545b5562f6d12a4ef991fae158bf4ccf92b6
-
-From 5562545b5562f6d12a4ef991fae158bf4ccf92b6 Mon Sep 17 00:00:00 2001
-From: Joerg Sonnenberger <joerg@bec.de>
-Date: Sat, 9 Sep 2017 17:47:32 +0200
-Subject: [PATCH] Avoid a read off-by-one error for UTF16 names in RAR
- archives.
-
-Reported-By: OSS-Fuzz issue 573
----
- libarchive/archive_read_support_format_rar.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/libarchive/archive_read_support_format_rar.c b/libarchive/archive_read_support_format_rar.c
-index cbb14c32..751de697 100644
---- a/libarchive/archive_read_support_format_rar.c
-+++ b/libarchive/archive_read_support_format_rar.c
-@@ -1496,7 +1496,11 @@ read_header(struct archive_read *a, struct archive_entry *entry,
-         return (ARCHIVE_FATAL);
-       }
-       filename[filename_size++] = '\0';
--      filename[filename_size++] = '\0';
-+      /*
-+       * Do not increment filename_size here as the computations below
-+       * add the space for the terminating NUL explicitly.
-+       */
-+      filename[filename_size] = '\0';
- 
-       /* Decoded unicode form is UTF-16BE, so we have to update a string
-        * conversion object for it. */
--- 
-2.15.1
-
diff --git a/gnu/packages/patches/libarchive-CVE-2018-1000877.patch b/gnu/packages/patches/libarchive-CVE-2018-1000877.patch
deleted file mode 100644
index 5b68884a0f..0000000000
--- a/gnu/packages/patches/libarchive-CVE-2018-1000877.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Fix CVE-2018-1000877:
-
-https://bugs.launchpad.net/ubuntu/+source/libarchive/+bug/1794909
-https://github.com/libarchive/libarchive/pull/1105
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000877
-https://security-tracker.debian.org/tracker/CVE-2018-1000877
-
-Patch copied from upstream source repository:
-
-https://github.com/libarchive/libarchive/commit/021efa522ad729ff0f5806c4ce53e4a6cc1daa31
-
-From 021efa522ad729ff0f5806c4ce53e4a6cc1daa31 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 20 Nov 2018 17:56:29 +1100
-Subject: [PATCH] Avoid a double-free when a window size of 0 is specified
-
-new_size can be 0 with a malicious or corrupted RAR archive.
-
-realloc(area, 0) is equivalent to free(area), so the region would
-be free()d here and the free()d again in the cleanup function.
-
-Found with a setup running AFL, afl-rb, and qsym.
----
- libarchive/archive_read_support_format_rar.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/libarchive/archive_read_support_format_rar.c b/libarchive/archive_read_support_format_rar.c
-index 23452222..6f419c27 100644
---- a/libarchive/archive_read_support_format_rar.c
-+++ b/libarchive/archive_read_support_format_rar.c
-@@ -2300,6 +2300,11 @@ parse_codes(struct archive_read *a)
-       new_size = DICTIONARY_MAX_SIZE;
-     else
-       new_size = rar_fls((unsigned int)rar->unp_size) << 1;
-+    if (new_size == 0) {
-+      archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
-+                        "Zero window size is invalid.");
-+      return (ARCHIVE_FATAL);
-+    }
-     new_window = realloc(rar->lzss.window, new_size);
-     if (new_window == NULL) {
-       archive_set_error(&a->archive, ENOMEM,
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/libarchive-CVE-2018-1000878.patch b/gnu/packages/patches/libarchive-CVE-2018-1000878.patch
deleted file mode 100644
index fef0881320..0000000000
--- a/gnu/packages/patches/libarchive-CVE-2018-1000878.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-Fix CVE-2018-1000878:
-
-https://bugs.launchpad.net/ubuntu/+source/libarchive/+bug/1794909
-https://github.com/libarchive/libarchive/pull/1105
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000878
-https://security-tracker.debian.org/tracker/CVE-2018-1000878
-
-Patch copied from upstream source repository:
-
-https://github.com/libarchive/libarchive/commit/bfcfe6f04ed20db2504db8a254d1f40a1d84eb28
-
-From bfcfe6f04ed20db2504db8a254d1f40a1d84eb28 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 4 Dec 2018 00:55:22 +1100
-Subject: [PATCH] rar: file split across multi-part archives must match
-
-Fuzzing uncovered some UAF and memory overrun bugs where a file in a
-single file archive reported that it was split across multiple
-volumes. This was caused by ppmd7 operations calling
-rar_br_fillup. This would invoke rar_read_ahead, which would in some
-situations invoke archive_read_format_rar_read_header.  That would
-check the new file name against the old file name, and if they didn't
-match up it would free the ppmd7 buffer and allocate a new
-one. However, because the ppmd7 decoder wasn't actually done with the
-buffer, it would continue to used the freed buffer. Both reads and
-writes to the freed region can be observed.
-
-This is quite tricky to solve: once the buffer has been freed it is
-too late, as the ppmd7 decoder functions almost universally assume
-success - there's no way for ppmd_read to signal error, nor are there
-good ways for functions like Range_Normalise to propagate them. So we
-can't detect after the fact that we're in an invalid state - e.g. by
-checking rar->cursor, we have to prevent ourselves from ever ending up
-there. So, when we are in the dangerous part or rar_read_ahead that
-assumes a valid split, we set a flag force read_header to either go
-down the path for split files or bail. This means that the ppmd7
-decoder keeps a valid buffer and just runs out of data.
-
-Found with a combination of AFL, afl-rb and qsym.
----
- libarchive/archive_read_support_format_rar.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/libarchive/archive_read_support_format_rar.c b/libarchive/archive_read_support_format_rar.c
-index 6f419c27..a8cc5c94 100644
---- a/libarchive/archive_read_support_format_rar.c
-+++ b/libarchive/archive_read_support_format_rar.c
-@@ -258,6 +258,7 @@ struct rar
-   struct data_block_offsets *dbo;
-   unsigned int cursor;
-   unsigned int nodes;
-+  char filename_must_match;
- 
-   /* LZSS members */
-   struct huffman_code maincode;
-@@ -1560,6 +1561,12 @@ read_header(struct archive_read *a, struct archive_entry *entry,
-     }
-     return ret;
-   }
-+  else if (rar->filename_must_match)
-+  {
-+    archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
-+      "Mismatch of file parts split across multi-volume archive");
-+    return (ARCHIVE_FATAL);
-+  }
- 
-   rar->filename_save = (char*)realloc(rar->filename_save,
-                                       filename_size + 1);
-@@ -2933,12 +2940,14 @@ rar_read_ahead(struct archive_read *a, size_t min, ssize_t *avail)
-     else if (*avail == 0 && rar->main_flags & MHD_VOLUME &&
-       rar->file_flags & FHD_SPLIT_AFTER)
-     {
-+      rar->filename_must_match = 1;
-       ret = archive_read_format_rar_read_header(a, a->entry);
-       if (ret == (ARCHIVE_EOF))
-       {
-         rar->has_endarc_header = 1;
-         ret = archive_read_format_rar_read_header(a, a->entry);
-       }
-+      rar->filename_must_match = 0;
-       if (ret != (ARCHIVE_OK))
-         return NULL;
-       return rar_read_ahead(a, min, avail);
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/libarchive-CVE-2018-1000880.patch b/gnu/packages/patches/libarchive-CVE-2018-1000880.patch
deleted file mode 100644
index 6834cabda0..0000000000
--- a/gnu/packages/patches/libarchive-CVE-2018-1000880.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Fix CVE-2018-1000880:
-
-https://bugs.launchpad.net/ubuntu/+source/libarchive/+bug/1794909
-https://github.com/libarchive/libarchive/pull/1105
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000880
-https://security-tracker.debian.org/tracker/CVE-2018-1000880
-
-Patch copied from upstream source repository:
-
-https://github.com/libarchive/libarchive/commit/9c84b7426660c09c18cc349f6d70b5f8168b5680
-
-From 9c84b7426660c09c18cc349f6d70b5f8168b5680 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 4 Dec 2018 16:33:42 +1100
-Subject: [PATCH] warc: consume data once read
-
-The warc decoder only used read ahead, it wouldn't actually consume
-data that had previously been printed. This means that if you specify
-an invalid content length, it will just reprint the same data over
-and over and over again until it hits the desired length.
-
-This means that a WARC resource with e.g.
-Content-Length: 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666665
-but only a few hundred bytes of data, causes a quasi-infinite loop.
-
-Consume data in subsequent calls to _warc_read.
-
-Found with an AFL + afl-rb + qsym setup.
----
- libarchive/archive_read_support_format_warc.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/libarchive/archive_read_support_format_warc.c b/libarchive/archive_read_support_format_warc.c
-index e8753853..e8fc8428 100644
---- a/libarchive/archive_read_support_format_warc.c
-+++ b/libarchive/archive_read_support_format_warc.c
-@@ -386,6 +386,11 @@ _warc_read(struct archive_read *a, const void **buf, size_t *bsz, int64_t *off)
- 		return (ARCHIVE_EOF);
- 	}
- 
-+	if (w->unconsumed) {
-+		__archive_read_consume(a, w->unconsumed);
-+		w->unconsumed = 0U;
-+	}
-+
- 	rab = __archive_read_ahead(a, 1U, &nrd);
- 	if (nrd < 0) {
- 		*bsz = 0U;
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/libcroco-CVE-2017-7960.patch b/gnu/packages/patches/libcroco-CVE-2017-7960.patch
deleted file mode 100644
index 0319c7389f..0000000000
--- a/gnu/packages/patches/libcroco-CVE-2017-7960.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Fix CVE-2017-7960:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7960
-
-Patch copied from upstream source repository:
-
-https://git.gnome.org/browse/libcroco/commit/?id=898e3a8c8c0314d2e6b106809a8e3e93cf9d4394
-
-From 898e3a8c8c0314d2e6b106809a8e3e93cf9d4394 Mon Sep 17 00:00:00 2001
-From: Ignacio Casal Quinteiro <qignacio@amazon.com>
-Date: Sun, 16 Apr 2017 13:13:43 +0200
-Subject: input: check end of input before reading a byte
-
-When reading bytes we weren't check that the index wasn't
-out of bound and this could produce an invalid read which
-could deal to a security bug.
----
- src/cr-input.c | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/src/cr-input.c b/src/cr-input.c
-index 49000b1..3b63a88 100644
---- a/src/cr-input.c
-+++ b/src/cr-input.c
-@@ -256,7 +256,7 @@ cr_input_new_from_uri (const gchar * a_file_uri, enum CREncoding a_enc)
-                  *we should  free buf here because it's own by CRInput.
-                  *(see the last parameter of cr_input_new_from_buf().
-                  */
--                buf = NULL ;
-+                buf = NULL;
-         }
- 
-  cleanup:
-@@ -404,6 +404,8 @@ cr_input_get_nb_bytes_left (CRInput const * a_this)
- enum CRStatus
- cr_input_read_byte (CRInput * a_this, guchar * a_byte)
- {
-+        gulong nb_bytes_left = 0;
-+
-         g_return_val_if_fail (a_this && PRIVATE (a_this)
-                               && a_byte, CR_BAD_PARAM_ERROR);
- 
-@@ -413,6 +415,12 @@ cr_input_read_byte (CRInput * a_this, guchar * a_byte)
-         if (PRIVATE (a_this)->end_of_input == TRUE)
-                 return CR_END_OF_INPUT_ERROR;
- 
-+        nb_bytes_left = cr_input_get_nb_bytes_left (a_this);
-+
-+        if (nb_bytes_left < 1) {
-+                return CR_END_OF_INPUT_ERROR;
-+        }
-+
-         *a_byte = PRIVATE (a_this)->in_buf[PRIVATE (a_this)->next_byte_index];
- 
-         if (PRIVATE (a_this)->nb_bytes -
-@@ -477,7 +485,6 @@ cr_input_read_char (CRInput * a_this, guint32 * a_char)
-                 if (*a_char == '\n') {
-                         PRIVATE (a_this)->end_of_line = TRUE;
-                 }
--
-         }
- 
-         return status;
--- 
-cgit v0.12
-
diff --git a/gnu/packages/patches/libcroco-CVE-2017-7961.patch b/gnu/packages/patches/libcroco-CVE-2017-7961.patch
deleted file mode 100644
index 675dbe4f08..0000000000
--- a/gnu/packages/patches/libcroco-CVE-2017-7961.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Fix CVE-2017-7961:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7961
-
-Patch copied from upstream source repository:
-
-https://git.gnome.org/browse/libcroco/commit/?id=9ad72875e9f08e4c519ef63d44cdbd94aa9504f7
-
-From 9ad72875e9f08e4c519ef63d44cdbd94aa9504f7 Mon Sep 17 00:00:00 2001
-From: Ignacio Casal Quinteiro <qignacio@amazon.com>
-Date: Sun, 16 Apr 2017 13:56:09 +0200
-Subject: tknzr: support only max long rgb values
-
-This fixes a possible out of bound when reading rgbs which
-are longer than the support MAXLONG
----
- src/cr-tknzr.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/src/cr-tknzr.c b/src/cr-tknzr.c
-index 1a7cfeb..1548c35 100644
---- a/src/cr-tknzr.c
-+++ b/src/cr-tknzr.c
-@@ -1279,6 +1279,11 @@ cr_tknzr_parse_rgb (CRTknzr * a_this, CRRgb ** a_rgb)
-         status = cr_tknzr_parse_num (a_this, &num);
-         ENSURE_PARSING_COND ((status == CR_OK) && (num != NULL));
- 
-+        if (num->val > G_MAXLONG) {
-+                status = CR_PARSING_ERROR;
-+                goto error;
-+        }
-+
-         red = num->val;
-         cr_num_destroy (num);
-         num = NULL;
-@@ -1298,6 +1303,11 @@ cr_tknzr_parse_rgb (CRTknzr * a_this, CRRgb ** a_rgb)
-                 status = cr_tknzr_parse_num (a_this, &num);
-                 ENSURE_PARSING_COND ((status == CR_OK) && (num != NULL));
- 
-+                if (num->val > G_MAXLONG) {
-+                        status = CR_PARSING_ERROR;
-+                        goto error;
-+                }
-+
-                 PEEK_BYTE (a_this, 1, &next_bytes[0]);
-                 if (next_bytes[0] == '%') {
-                         SKIP_CHARS (a_this, 1);
--- 
-cgit v0.12
-
diff --git a/gnu/packages/patches/libextractor-exiv2.patch b/gnu/packages/patches/libextractor-exiv2.patch
new file mode 100644
index 0000000000..b92fef3ca1
--- /dev/null
+++ b/gnu/packages/patches/libextractor-exiv2.patch
@@ -0,0 +1,124 @@
+This patch allows us to build libextractor against exiv2 0.27.x.
+Adapted from this upstream commit:
+
+  commit 1ecee9a47717e36cb8a3925d011d1a6de11d631c
+  Author: Christian Grothoff <christian@grothoff.org>
+  Date:   Mon Jul 29 17:58:18 2019 +0200
+
+      importing patch from Gentoo/AS to address exiv2 build issue (#5820)
+
+diff --git a/src/plugins/exiv2_extractor.cc b/src/plugins/exiv2_extractor.cc
+index 8741d40..ef402a8 100644
+--- a/src/plugins/exiv2_extractor.cc
++++ b/src/plugins/exiv2_extractor.cc
+@@ -27,10 +27,7 @@
+ #include <cassert>
+ #include <cstring>
+ #include <math.h>
+-#include <exiv2/exif.hpp>
+-#include <exiv2/error.hpp>
+-#include <exiv2/image.hpp>
+-#include <exiv2/futils.hpp>
++#include <exiv2/exiv2.hpp>
+ 
+ /**
+  * Enable debugging to get error messages.
+@@ -180,7 +177,7 @@ public:
+    *
+    * @return -1 on error
+    */
+-#if EXIV2_VERSION >= EXIV2_MAKE_VERSION(0,26,0)
++#if EXIV2_TEST_VERSION(0,26,0)
+   virtual size_t size (void) const;
+ #else
+   virtual long int size (void) const;
+@@ -316,7 +313,11 @@ ExtractorIO::getb ()
+   const unsigned char *r;
+ 
+   if (1 != ec->read (ec->cls, &data, 1))
++#if EXIV2_TEST_VERSION(0,27,0)
++    throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed);
++#else
+     throw Exiv2::BasicError<char> (42 /* error code */);
++#endif
+   r = (const unsigned char *) data;
+   return *r;
+ }
+@@ -371,7 +372,11 @@ ExtractorIO::putb (Exiv2::byte data)
+ void
+ ExtractorIO::transfer (Exiv2::BasicIo& src)
+ {
++#if EXIV2_TEST_VERSION(0,27,0)
++    throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed);
++#else
+   throw Exiv2::BasicError<char> (42 /* error code */);
++#endif
+ }
+ 
+ 
+@@ -416,7 +421,11 @@ ExtractorIO::seek (long offset,
+ Exiv2::byte *
+ ExtractorIO::mmap (bool isWritable)
+ {
++#if EXIV2_TEST_VERSION(0,27,0)
++    throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed);
++#else
+   throw Exiv2::BasicError<char> (42 /* error code */);
++#endif
+ }
+ 
+ 
+@@ -449,7 +458,7 @@ ExtractorIO::tell (void) const
+  *
+  * @return -1 on error
+  */
+-#if EXIV2_VERSION >= EXIV2_MAKE_VERSION(0,26,0)
++#if EXIV2_TEST_VERSION(0,26,0)
+ size_t
+ #else
+ long int
+@@ -504,7 +513,11 @@ ExtractorIO::eof () const
+ std::string
+ ExtractorIO::path () const
+ {
++#if EXIV2_TEST_VERSION(0,27,0)
++    throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed);
++#else
+   throw Exiv2::BasicError<char> (42 /* error code */);
++#endif
+ }
+ 
+ 
+@@ -517,7 +530,11 @@ ExtractorIO::path () const
+ std::wstring
+ ExtractorIO::wpath () const
+ {
++#if EXIV2_TEST_VERSION(0,27,0)
++    throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed);
++#else
+   throw Exiv2::BasicError<char> (42 /* error code */);
++#endif
+ }
+ #endif
+ 
+@@ -531,7 +548,11 @@ Exiv2::BasicIo::AutoPtr
+ ExtractorIO::temporary () const
+ {
+   fprintf (stderr, "throwing temporary error\n");
++#if EXIV2_TEST_VERSION(0,27,0)
++    throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed);
++#else
+   throw Exiv2::BasicError<char> (42 /* error code */);
++#endif
+ }
+ 
+ 
+@@ -697,7 +718,7 @@ EXTRACTOR_exiv2_extract_method (struct EXTRACTOR_ExtractContext *ec)
+ {
+   try
+     {
+-#if EXIV2_MAKE_VERSION(0,23,0) <= EXIV2_VERSION
++#if !EXIV2_TEST_VERSION(0,24,0)
+       Exiv2::LogMsg::setLevel (Exiv2::LogMsg::mute);
+ #endif
+       std::auto_ptr<Exiv2::BasicIo> eio(new ExtractorIO (ec));
diff --git a/gnu/packages/patches/libgcrypt-make-yat2m-reproducible.patch b/gnu/packages/patches/libgcrypt-make-yat2m-reproducible.patch
deleted file mode 100644
index 3056f0baad..0000000000
--- a/gnu/packages/patches/libgcrypt-make-yat2m-reproducible.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Make yat2m in libgcrypt respect SOURCE_DATE_EPOCH, making
-the build reproducible.
-
-This was already fixed upstream in GnuPG:
-https://dev.gnupg.org/rG139de02b93773615bdd95e04a7f0c1ad73b4f6fb
-
-and in libgpg-error:
-https://dev.gnupg.org/rE5494a5728418938d2e42158bb646b07124184e64
-
-
---- a/doc/yat2m.c 2017-11-23 19:16:58.000000000 +0100
-+++ b/doc/yat2m.c 2017-08-28 12:22:54.000000000 +0200
-@@ -1475,6 +1484,7 @@
- main (int argc, char **argv)
- {
-   int last_argc = -1;
-+  const char *s;
- 
-   opt_source = "GNU";
-   opt_release = "";
-@@ -1608,6 +1618,11 @@
-   if (argc > 1)
-     die ("usage: " PGM " [OPTION] [FILE] (try --help for more information)\n");
- 
-+  /* Take care of supplied timestamp for reproducible builds.  See
-+   * https://reproducible-builds.org/specs/source-date-epoch/  */
-+  if (!opt_date && (s = getenv ("SOURCE_DATE_EPOCH")) && *s)
-+    opt_date = s;
-+
-   /* Start processing. */
-   if (argc && strcmp (*argv, "-"))
-     {
diff --git a/gnu/packages/patches/libgdata-fix-tests.patch b/gnu/packages/patches/libgdata-fix-tests.patch
deleted file mode 100644
index dc86b3ab5a..0000000000
--- a/gnu/packages/patches/libgdata-fix-tests.patch
+++ /dev/null
@@ -1,325 +0,0 @@
-From c87a112246e0bcbd5c3a8aa484a50c617d710dbf Mon Sep 17 00:00:00 2001
-From: Philip Withnall <philip.withnall@collabora.co.uk>
-Date: Fri, 12 Dec 2014 17:31:01 +0000
-Subject: [PATCH] tests: Eliminate ISO 8601 formatting workaround for dates
-
-Follow up to commit 732017e4e5235e28c578cc3367fa0c4548b65495.
-
-https://bugzilla.gnome.org/show_bug.cgi?id=739956
----
- gdata/tests/calendar.c | 20 ++++++++++----------
- gdata/tests/general.c  | 34 +++++++++++++++++-----------------
- gdata/tests/tasks.c    | 34 +++++++++++++++++-----------------
- gdata/tests/youtube.c  | 16 ++++++++--------
- 4 files changed, 52 insertions(+), 52 deletions(-)
-
-diff --git a/gdata/tests/calendar.c b/gdata/tests/calendar.c
-index bb1d609..c54ddda 100644
---- a/gdata/tests/calendar.c
-+++ b/gdata/tests/calendar.c
-@@ -620,7 +620,7 @@ test_event_xml (void)
- 			"<gCal:guestsCanInviteOthers value='false'/>"
- 			"<gCal:guestsCanSeeGuests value='false'/>"
- 			"<gCal:anyoneCanAddSelf value='false'/>"
--			"<gd:when startTime='2009-04-17T15:00:00.000001+00:00' endTime='2009-04-17T17:00:00.000001+00:00'/>"
-+			"<gd:when startTime='2009-04-17T15:00:00Z' endTime='2009-04-17T17:00:00Z'/>"
- 			"<gd:who email='john.smith@example.com' "
- 			        "rel='http://schemas.google.com/g/2005#event.organizer' "
- 			        "valueString='John Smith\342\200\275'/>"
-@@ -706,7 +706,7 @@ test_event_xml_dates (void)
- 			"<gCal:guestsCanSeeGuests value='false'/>"
- 			"<gCal:anyoneCanAddSelf value='false'/>"
- 			"<gd:when startTime='2009-04-17'/>"
--			"<gd:when startTime='2009-04-17T15:00:00.000001+00:00'/>"
-+			"<gd:when startTime='2009-04-17T15:00:00Z'/>"
- 			"<gd:when startTime='2009-04-27' endTime='2009-05-06'/>"
- 		"</entry>");
- 
-@@ -934,25 +934,25 @@ test_query_uri (void)
- 
- 	/* Check the built query URI with a normal feed URI */
- 	query_uri = gdata_query_get_query_uri (GDATA_QUERY (query), "http://example.com");
--	g_assert_cmpstr (query_uri, ==, "http://example.com?q=q&futureevents=true&orderby=starttime&recurrence-expansion-start=2009-04-17T15:00:00.000001+00:00"
--	                                "&recurrence-expansion-end=2010-04-17T15:00:00.000001+00:00&singleevents=true&sortorder=descending"
--	                                "&start-min=2009-04-17T15:00:00.000001+00:00&start-max=2010-04-17T15:00:00.000001+00:00&ctz=America%2FLos_Angeles&max-attendees=15"
-+	g_assert_cmpstr (query_uri, ==, "http://example.com?q=q&futureevents=true&orderby=starttime&recurrence-expansion-start=2009-04-17T15:00:00Z"
-+	                                "&recurrence-expansion-end=2010-04-17T15:00:00Z&singleevents=true&sortorder=descending"
-+	                                "&start-min=2009-04-17T15:00:00Z&start-max=2010-04-17T15:00:00Z&ctz=America%2FLos_Angeles&max-attendees=15"
- 	                                "&showdeleted=true");
- 	g_free (query_uri);
- 
- 	/* …with a feed URI with a trailing slash */
- 	query_uri = gdata_query_get_query_uri (GDATA_QUERY (query), "http://example.com/");
--	g_assert_cmpstr (query_uri, ==, "http://example.com/?q=q&futureevents=true&orderby=starttime&recurrence-expansion-start=2009-04-17T15:00:00.000001+00:00"
--	                                "&recurrence-expansion-end=2010-04-17T15:00:00.000001+00:00&singleevents=true&sortorder=descending"
--	                                "&start-min=2009-04-17T15:00:00.000001+00:00&start-max=2010-04-17T15:00:00.000001+00:00&ctz=America%2FLos_Angeles&max-attendees=15"
-+	g_assert_cmpstr (query_uri, ==, "http://example.com/?q=q&futureevents=true&orderby=starttime&recurrence-expansion-start=2009-04-17T15:00:00Z"
-+	                                "&recurrence-expansion-end=2010-04-17T15:00:00Z&singleevents=true&sortorder=descending"
-+	                                "&start-min=2009-04-17T15:00:00Z&start-max=2010-04-17T15:00:00Z&ctz=America%2FLos_Angeles&max-attendees=15"
- 	                                "&showdeleted=true");
- 	g_free (query_uri);
- 
- 	/* …with a feed URI with pre-existing arguments */
- 	query_uri = gdata_query_get_query_uri (GDATA_QUERY (query), "http://example.com/bar/?test=test&this=that");
- 	g_assert_cmpstr (query_uri, ==, "http://example.com/bar/?test=test&this=that&q=q&futureevents=true&orderby=starttime"
--	                                "&recurrence-expansion-start=2009-04-17T15:00:00.000001+00:00&recurrence-expansion-end=2010-04-17T15:00:00.000001+00:00"
--	                                "&singleevents=true&sortorder=descending&start-min=2009-04-17T15:00:00.000001+00:00&start-max=2010-04-17T15:00:00.000001+00:00"
-+	                                "&recurrence-expansion-start=2009-04-17T15:00:00Z&recurrence-expansion-end=2010-04-17T15:00:00Z"
-+	                                "&singleevents=true&sortorder=descending&start-min=2009-04-17T15:00:00Z&start-max=2010-04-17T15:00:00Z"
- 	                                "&ctz=America%2FLos_Angeles&max-attendees=15&showdeleted=true");
- 	g_free (query_uri);
- 
-diff --git a/gdata/tests/general.c b/gdata/tests/general.c
-index 237a908..f828d2e 100644
---- a/gdata/tests/general.c
-+++ b/gdata/tests/general.c
-@@ -528,8 +528,8 @@ test_entry_parse_xml (void)
- 			 "<?xml version='1.0' encoding='UTF-8'?>"
- 			 "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' xmlns:ns='http://example.com/'>"
- 				"<title type='text'>Testing unhandled XML</title>"
--				"<updated>2009-01-25T14:07:37.000001+00:00</updated>"
--				"<published>2009-01-23T14:06:37.000001+00:00</published>"
-+				"<updated>2009-01-25T14:07:37Z</updated>"
-+				"<published>2009-01-23T14:06:37Z</published>"
- 				"<content type='text'>Here we test unhandled XML elements.</content>"
- 				"<foobar>Test!</foobar>"
- 				"<barfoo shizzle=\"zing\"/>"
-@@ -569,8 +569,8 @@ test_entry_parse_xml_kind_category (void)
- 			 "<?xml version='1.0' encoding='UTF-8'?>"
- 			 "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>"
- 				"<title type='text'>Testing kind categories</title>"
--				"<updated>2009-01-25T14:07:37.000001+00:00</updated>"
--				"<published>2009-01-23T14:06:37.000001+00:00</published>"
-+				"<updated>2009-01-25T14:07:37Z</updated>"
-+				"<published>2009-01-23T14:06:37Z</published>"
- 				"<content type='text'>Here we test kind categories.</content>"
- 			"<category term='http://schemas.google.com/docs/2007#file' "
- 			          "scheme='http://schemas.google.com/g/2005#kind' "
-@@ -620,7 +620,7 @@ test_entry_parse_json (void)
- 		"{"
- 			"\"title\":\"A title\","
- 			"\"id\":\"some-id\","
--			"\"updated\":\"2009-01-25T14:07:37.000001+00:00\","
-+			"\"updated\":\"2009-01-25T14:07:37Z\","
- 			"\"etag\":\"some-etag\","
- 			"\"selfLink\":\"http://example.com/\","
- 			"\"kind\":\"kind#kind\","
-@@ -760,8 +760,8 @@ test_entry_escaping (void)
- 		"<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>"
- 			"<title type='text'>Escaped content &amp; stuff</title>"
- 			"<id>http://foo.com/?foo&amp;bar</id>"
--			"<updated>2010-12-10T17:21:24.000001+00:00</updated>"
--			"<published>2010-12-10T17:21:24.000001+00:00</published>"
-+			"<updated>2010-12-10T17:21:24Z</updated>"
-+			"<published>2010-12-10T17:21:24Z</published>"
- 			"<summary type='text'>Summary &amp; stuff</summary>"
- 			"<rights>Free &amp; open source</rights>"
- 			"<content type='text'>Content &amp; things.</content>"
-@@ -1106,7 +1106,7 @@ test_feed_escaping (void)
- 		"<feed xmlns='http://www.w3.org/2005/Atom'>"
- 			"<title type='text'>Test feed &amp; stuff.</title>"
- 			"<id>http://foo.com?foo&amp;bar</id>"
--			"<updated>2010-12-10T17:49:15.000001+00:00</updated>"
-+			"<updated>2010-12-10T17:49:15Z</updated>"
- 		"</feed>");
- 	g_object_unref (feed);
- }
-@@ -1157,28 +1157,28 @@ test_query_dates (void)
- 	/* updated-min */
- 	gdata_query_set_updated_min (query, 1373280114); /* 2013-07-08T10:41:54Z */
- 	query_uri = gdata_query_get_query_uri (query, "http://example.com");
--	g_assert_cmpstr (query_uri, ==, "http://example.com?q=baz&updated-min=2013-07-08T10:41:54.000001+00:00");
-+	g_assert_cmpstr (query_uri, ==, "http://example.com?q=baz&updated-min=2013-07-08T10:41:54Z");
- 	g_free (query_uri);
- 	gdata_query_set_updated_min (query, -1);
- 
- 	/* updated-max */
- 	gdata_query_set_updated_max (query, 1373280114); /* 2013-07-08T10:41:54Z */
- 	query_uri = gdata_query_get_query_uri (query, "http://example.com");
--	g_assert_cmpstr (query_uri, ==, "http://example.com?q=baz&updated-max=2013-07-08T10:41:54.000001+00:00");
-+	g_assert_cmpstr (query_uri, ==, "http://example.com?q=baz&updated-max=2013-07-08T10:41:54Z");
- 	g_free (query_uri);
- 	gdata_query_set_updated_max (query, -1);
- 
- 	/* published-min */
- 	gdata_query_set_published_min (query, 1373280114); /* 2013-07-08T10:41:54Z */
- 	query_uri = gdata_query_get_query_uri (query, "http://example.com");
--	g_assert_cmpstr (query_uri, ==, "http://example.com?q=baz&published-min=2013-07-08T10:41:54.000001+00:00");
-+	g_assert_cmpstr (query_uri, ==, "http://example.com?q=baz&published-min=2013-07-08T10:41:54Z");
- 	g_free (query_uri);
- 	gdata_query_set_published_min (query, -1);
- 
- 	/* published-max */
- 	gdata_query_set_published_max (query, 1373280114); /* 2013-07-08T10:41:54Z */
- 	query_uri = gdata_query_get_query_uri (query, "http://example.com");
--	g_assert_cmpstr (query_uri, ==, "http://example.com?q=baz&published-max=2013-07-08T10:41:54.000001+00:00");
-+	g_assert_cmpstr (query_uri, ==, "http://example.com?q=baz&published-max=2013-07-08T10:41:54Z");
- 	g_free (query_uri);
- 	gdata_query_set_published_max (query, -1);
- 
-@@ -3127,7 +3127,7 @@ test_gd_reminder (void)
- 	gdata_test_assert_xml (reminder,
- 			 "<?xml version='1.0' encoding='UTF-8'?>"
- 			 "<gd:reminder xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' "
--				"absoluteTime='2005-06-07T00:55:00.000001+00:00' method='alert'/>");
-+				"absoluteTime='2005-06-07T00:55:00Z' method='alert'/>");
- 	g_object_unref (reminder);
- }
- 
-@@ -3218,8 +3218,8 @@ test_gd_when (void)
- 	/* Check the outputted XML is the same */
- 	gdata_test_assert_xml (when,
- 			 "<?xml version='1.0' encoding='UTF-8'?>"
--			 "<gd:when xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' startTime='2005-06-07T01:00:00.000001+00:00' "
--				"endTime='2005-06-07T02:00:00.000001+00:00'/>");
-+			 "<gd:when xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' startTime='2005-06-07T01:00:00Z' "
-+				"endTime='2005-06-07T02:00:00Z'/>");
- 	g_object_unref (when);
- 
- 	/* Now parse a time with different information */
-@@ -3258,7 +3258,7 @@ test_gd_when (void)
- 			 "<gd:when xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' startTime='2005-06-06' "
- 				"endTime='2005-06-08' valueString='This weekend'>"
- 				"<gd:reminder minutes='15'/>"
--				"<gd:reminder absoluteTime='2005-06-06T00:00:00.000001+00:00' method='alert'/>"
-+				"<gd:reminder absoluteTime='2005-06-06T00:00:00Z' method='alert'/>"
- 				"<foobar/>"
- 			 "</gd:when>");
- 	g_object_unref (when);
-@@ -3278,7 +3278,7 @@ test_gd_when_escaping (void)
- 	gdata_test_assert_xml (when,
- 	                 "<?xml version='1.0' encoding='UTF-8'?>"
- 	                 "<gd:when xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' "
--	                          "startTime='2005-06-07T01:00:00.000001+00:00' valueString='Value string &amp; stuff!'/>");
-+	                          "startTime='2005-06-07T01:00:00Z' valueString='Value string &amp; stuff!'/>");
- 	g_object_unref (when);
- }
- 
-diff --git a/gdata/tests/tasks.c b/gdata/tests/tasks.c
-index 7a5bc7e..7bf3174 100644
---- a/gdata/tests/tasks.c
-+++ b/gdata/tests/tasks.c
-@@ -122,11 +122,11 @@ test_query_uri (void)
- 	g_assert_cmpstr (query_uri, ==,
- 	                 "http://example.com"
- 	                 "?maxResults=10"
--	                 "&updatedMin=1970-01-01T01:53:09.000001+00:00"
--	                 "&completedMin=1970-01-01T01:34:38.000001+00:00"
--	                 "&completedMax=1970-01-01T00:20:34.000001+00:00"
--	                 "&dueMin=1970-01-01T00:39:05.000001+00:00"
--	                 "&dueMax=1970-01-01T00:57:36.000001+00:00"
-+	                 "&updatedMin=1970-01-01T01:53:09Z"
-+	                 "&completedMin=1970-01-01T01:34:38Z"
-+	                 "&completedMax=1970-01-01T00:20:34Z"
-+	                 "&dueMin=1970-01-01T00:39:05Z"
-+	                 "&dueMax=1970-01-01T00:57:36Z"
- 	                 "&showCompleted=true"
- 	                 "&showDeleted=true"
- 	                 "&showHidden=true");
-@@ -148,11 +148,11 @@ test_query_uri (void)
- 	g_assert_cmpstr (query_uri, ==,
- 	                 "http://example.com"
- 	                 "?maxResults=10"
--	                 "&updatedMin=1970-01-01T01:53:09.000001+00:00"
--	                 "&completedMin=1970-01-01T01:34:38.000001+00:00"
--	                 "&completedMax=1970-01-01T00:20:34.000001+00:00"
--	                 "&dueMin=1970-01-01T00:39:05.000001+00:00"
--	                 "&dueMax=1970-01-01T00:57:36.000001+00:00"
-+	                 "&updatedMin=1970-01-01T01:53:09Z"
-+	                 "&completedMin=1970-01-01T01:34:38Z"
-+	                 "&completedMax=1970-01-01T00:20:34Z"
-+	                 "&dueMin=1970-01-01T00:39:05Z"
-+	                 "&dueMax=1970-01-01T00:57:36Z"
- 	                 "&showCompleted=false"
- 	                 "&showDeleted=false"
- 	                 "&showHidden=false");
-@@ -317,8 +317,8 @@ test_task_properties (void)
- 			"\"title\": \"some-other-title\","
- 			"\"notes\": \"more-notes\","
- 			"\"status\": \"completed\","
--			"\"due\": \"2014-08-30T17:20:00.000001+00:00\","
--			"\"completed\": \"2014-08-30T17:20:00.000001+00:00\","
-+			"\"due\": \"2014-08-30T17:20:00Z\","
-+			"\"completed\": \"2014-08-30T17:20:00Z\","
- 			"\"deleted\": true,"
- 			"\"hidden\": false"
- 		"}");
-@@ -332,8 +332,8 @@ test_task_properties (void)
- 			"\"title\": \"some-other-title\","
- 			"\"notes\": \"more-notes\","
- 			"\"status\": \"completed\","
--			"\"due\": \"2014-08-30T17:20:00.000001+00:00\","
--			"\"completed\": \"2014-08-30T17:20:00.000001+00:00\","
-+			"\"due\": \"2014-08-30T17:20:00Z\","
-+			"\"completed\": \"2014-08-30T17:20:00Z\","
- 			"\"deleted\": false,"
- 			"\"hidden\": false"
- 		"}");
-@@ -496,14 +496,14 @@ test_task_parser_normal (void)
- 			"\"id\": \"some-id\","
- 			"\"etag\": \"some-etag\","
- 			"\"title\": \"some-title \\\"with quotes\\\"\","
--			"\"updated\": \"2014-08-30T19:40:00.000001+00:00\","
-+			"\"updated\": \"2014-08-30T19:40:00Z\","
- 			"\"selfLink\": \"http://some-uri/\","
- 			"\"parent\": \"some-parent-id\","
- 			"\"position\": \"some-position\","
- 			"\"notes\": \"Some notes!\","
- 			"\"status\": \"needsAction\","
--			"\"due\": \"2014-08-30T20:00:00.000001+00:00\","
--			"\"completed\": \"2014-08-30T20:10:05.000001+00:00\","
-+			"\"due\": \"2014-08-30T20:00:00Z\","
-+			"\"completed\": \"2014-08-30T20:10:05Z\","
- 			"\"deleted\": false,"
- 			"\"hidden\": true,"
- 			/* Unhandled for the moment: */
-diff --git a/gdata/tests/youtube.c b/gdata/tests/youtube.c
-index a1e070a..1195bc3 100644
---- a/gdata/tests/youtube.c
-+++ b/gdata/tests/youtube.c
-@@ -967,8 +967,8 @@ test_parsing_yt_recorded (void)
- 				"gd:etag='W/\"CEMFSX47eCp7ImA9WxVUGEw.\"'>"
- 				"<title type='text'>Judas Priest - Painkiller</title>"
- 				"<id>tag:youtube.com,2008:video:JAagedeKdcQ</id>"
--				"<updated>2009-03-23T12:46:58.000001+00:00</updated>"
--				"<published>2006-05-16T14:06:37.000001+00:00</published>"
-+				"<updated>2009-03-23T12:46:58Z</updated>"
-+				"<published>2006-05-16T14:06:37Z</published>"
- 				"<category term='http://gdata.youtube.com/schemas/2007#video' scheme='http://schemas.google.com/g/2005#kind'/>"
- 				"<link href='http://www.youtube.com/watch?v=JAagedeKdcQ' rel='http://www.iana.org/assignments/relation/alternate' type='text/html'/>"
- 				"<link href='http://gdata.youtube.com/feeds/api/videos/JAagedeKdcQ?client=ytapi-google-jsdemo' rel='http://www.iana.org/assignments/relation/self' type='application/atom+xml'/>"
-@@ -1055,8 +1055,8 @@ test_parsing_yt_access_control (void)
- 				"gd:etag='W/\"CEMFSX47eCp7ImA9WxVUGEw.\"'>"
- 				"<title type='text'>Judas Priest - Painkiller</title>"
- 				"<id>tag:youtube.com,2008:video:JAagedeKdcQ</id>"
--				"<updated>2009-03-23T12:46:58.000001+00:00</updated>"
--				"<published>2006-05-16T14:06:37.000001+00:00</published>"
-+				"<updated>2009-03-23T12:46:58Z</updated>"
-+				"<published>2006-05-16T14:06:37Z</published>"
- 				"<category term='http://gdata.youtube.com/schemas/2007#video' scheme='http://schemas.google.com/g/2005#kind'/>"
- 				"<link href='http://www.youtube.com/watch?v=JAagedeKdcQ' rel='http://www.iana.org/assignments/relation/alternate' type='text/html'/>"
- 				"<link href='http://gdata.youtube.com/feeds/api/videos/JAagedeKdcQ?client=ytapi-google-jsdemo' rel='http://www.iana.org/assignments/relation/self' type='application/atom+xml'/>"
-@@ -1255,8 +1255,8 @@ test_parsing_georss_where (void)
- 		       "xmlns:gml='http://www.opengis.net/gml'>"
- 			"<title type='text'>Some video somewhere</title>"
- 			"<id>tag:youtube.com,2008:video:JAagedeKdcQ</id>"
--			"<updated>2009-03-23T12:46:58.000001+00:00</updated>"
--			"<published>2006-05-16T14:06:37.000001+00:00</published>"
-+			"<updated>2009-03-23T12:46:58Z</updated>"
-+			"<published>2006-05-16T14:06:37Z</published>"
- 			"<category term='http://gdata.youtube.com/schemas/2007#video' scheme='http://schemas.google.com/g/2005#kind'/>"
- 			"<link href='http://www.youtube.com/watch?v=JAagedeKdcQ' rel='http://www.iana.org/assignments/relation/alternate' type='text/html'/>"
- 			"<link href='http://gdata.youtube.com/feeds/api/videos/JAagedeKdcQ?client=ytapi-google-jsdemo' rel='http://www.iana.org/assignments/relation/self' type='application/atom+xml'/>"
-@@ -1295,8 +1295,8 @@ test_parsing_georss_where (void)
- 		       "xmlns:gml='http://www.opengis.net/gml'>"
- 			"<title type='text'>Some video somewhere</title>"
- 			"<id>tag:youtube.com,2008:video:JAagedeKdcQ</id>"
--			"<updated>2009-03-23T12:46:58.000001+00:00</updated>"
--			"<published>2006-05-16T14:06:37.000001+00:00</published>"
-+			"<updated>2009-03-23T12:46:58Z</updated>"
-+			"<published>2006-05-16T14:06:37Z</published>"
- 			"<category term='http://gdata.youtube.com/schemas/2007#video' scheme='http://schemas.google.com/g/2005#kind'/>"
- 			"<link href='http://www.youtube.com/watch?v=JAagedeKdcQ' rel='http://www.iana.org/assignments/relation/alternate' type='text/html'/>"
- 			"<link href='http://gdata.youtube.com/feeds/api/videos/JAagedeKdcQ?client=ytapi-google-jsdemo' rel='http://www.iana.org/assignments/relation/self' type='application/atom+xml'/>"
--- 
-1.9.3
diff --git a/gnu/packages/patches/libgdata-glib-duplicate-tests.patch b/gnu/packages/patches/libgdata-glib-duplicate-tests.patch
deleted file mode 100644
index d5d8d064de..0000000000
--- a/gnu/packages/patches/libgdata-glib-duplicate-tests.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -ur a/gdata/tests/oauth1-authorizer.c b/gdata/tests/oauth1-authorizer.c
---- a/gdata/tests/oauth1-authorizer.c	1969-12-31 19:00:00.000000000 -0500
-+++ b/gdata/tests/oauth1-authorizer.c	2017-05-27 19:35:30.551725678 -0400
-@@ -1045,10 +1045,10 @@
- 	/* Sync request-authentication-uri tests */
- 	g_test_add ("/oauth1-authorizer/request-authentication-uri/sync", OAuth1AuthorizerData, NULL, set_up_oauth1_authorizer_data,
- 	            test_oauth1_authorizer_request_authentication_uri_sync, tear_down_oauth1_authorizer_data);
--	g_test_add ("/oauth1-authorizer/request-authentication-uri/sync/multiple-domains", OAuth1AuthorizerData, NULL,
-+	g_test_add ("/oauth1-authorizer/request-authentication-uri/sync/multiple-domains1", OAuth1AuthorizerData, NULL,
- 	            set_up_oauth1_authorizer_data_multiple_domains, test_oauth1_authorizer_request_authentication_uri_sync,
- 	            tear_down_oauth1_authorizer_data);
--	g_test_add ("/oauth1-authorizer/request-authentication-uri/sync/multiple-domains", OAuth1AuthorizerData, NULL,
-+	g_test_add ("/oauth1-authorizer/request-authentication-uri/sync/multiple-domains2", OAuth1AuthorizerData, NULL,
- 	            set_up_oauth1_authorizer_data_locale, test_oauth1_authorizer_request_authentication_uri_sync,
- 	            tear_down_oauth1_authorizer_data);
- 	g_test_add ("/oauth1-authorizer/request-authentication-uri/sync/cancellation", OAuth1AuthorizerData, NULL,
diff --git a/gnu/packages/patches/libgpg-error-gawk-compat.patch b/gnu/packages/patches/libgpg-error-gawk-compat.patch
new file mode 100644
index 0000000000..85477b0be6
--- /dev/null
+++ b/gnu/packages/patches/libgpg-error-gawk-compat.patch
@@ -0,0 +1,155 @@
+From 7865041c77f4f7005282f10f9b6666b19072fbdf Mon Sep 17 00:00:00 2001
+From: NIIBE Yutaka <gniibe@fsij.org>
+Date: Mon, 15 Apr 2019 15:10:44 +0900
+Subject: [PATCH] awk: Prepare for Gawk 5.0.
+
+* src/Makefile.am: Use pkg_namespace (instead of namespace).
+* src/mkerrnos.awk: Likewise.
+* lang/cl/mkerrcodes.awk: Don't escape # in regexp.
+* src/mkerrcodes.awk, src/mkerrcodes1.awk, src/mkerrcodes2.awk: Ditto.
+
+--
+
+In Gawk 5.0, regexp routines are replaced by Gnulib implementation,
+which only allows escaping specific characters.
+
+GnuPG-bug-id: 4459
+Reported-by: Marius Schamschula
+Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
+---
+ lang/cl/mkerrcodes.awk |  2 +-
+ src/Makefile.am        |  2 +-
+ src/mkerrcodes.awk     |  2 +-
+ src/mkerrcodes1.awk    |  2 +-
+ src/mkerrcodes2.awk    |  2 +-
+ src/mkerrnos.awk       |  2 +-
+ src/mkstrtable.awk     | 10 +++++-----
+ 7 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/lang/cl/mkerrcodes.awk b/lang/cl/mkerrcodes.awk
+index ae29043..9a1fc18 100644
+--- a/lang/cl/mkerrcodes.awk
++++ b/lang/cl/mkerrcodes.awk
+@@ -122,7 +122,7 @@ header {
+ }
+ 
+ !header {
+-  sub (/\#.+/, "");
++  sub (/#.+/, "");
+   sub (/[ 	]+$/, ""); # Strip trailing space and tab characters.
+ 
+   if (/^$/)
+diff --git a/src/Makefile.am b/src/Makefile.am
+index ce1b882..f2590cb 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -293,7 +293,7 @@ code-from-errno.h: mkerrcodes$(EXEEXT_FOR_BUILD) Makefile
+ 
+ errnos-sym.h: Makefile mkstrtable.awk errnos.in
+ 	$(AWK) -f $(srcdir)/mkstrtable.awk -v textidx=2 -v nogettext=1 \
+-		-v prefix=GPG_ERR_ -v namespace=errnos_ \
++		-v prefix=GPG_ERR_ -v pkg_namespace=errnos_ \
+ 		$(srcdir)/errnos.in >$@
+ 
+ 
+diff --git a/src/mkerrcodes.awk b/src/mkerrcodes.awk
+index 46d436c..e9c857c 100644
+--- a/src/mkerrcodes.awk
++++ b/src/mkerrcodes.awk
+@@ -85,7 +85,7 @@ header {
+ }
+ 
+ !header {
+-  sub (/\#.+/, "");
++  sub (/#.+/, "");
+   sub (/[ 	]+$/, ""); # Strip trailing space and tab characters.
+ 
+   if (/^$/)
+diff --git a/src/mkerrcodes1.awk b/src/mkerrcodes1.awk
+index a771a73..4578e29 100644
+--- a/src/mkerrcodes1.awk
++++ b/src/mkerrcodes1.awk
+@@ -81,7 +81,7 @@ header {
+ }
+ 
+ !header {
+-  sub (/\#.+/, "");
++  sub (/#.+/, "");
+   sub (/[ 	]+$/, ""); # Strip trailing space and tab characters.
+ 
+   if (/^$/)
+diff --git a/src/mkerrcodes2.awk b/src/mkerrcodes2.awk
+index ea58503..188f7a4 100644
+--- a/src/mkerrcodes2.awk
++++ b/src/mkerrcodes2.awk
+@@ -91,7 +91,7 @@ header {
+ }
+ 
+ !header {
+-  sub (/\#.+/, "");
++  sub (/#.+/, "");
+   sub (/[ 	]+$/, ""); # Strip trailing space and tab characters.
+ 
+   if (/^$/)
+diff --git a/src/mkerrnos.awk b/src/mkerrnos.awk
+index f79df66..15b1aad 100644
+--- a/src/mkerrnos.awk
++++ b/src/mkerrnos.awk
+@@ -83,7 +83,7 @@ header {
+ }
+ 
+ !header {
+-  sub (/\#.+/, "");
++  sub (/#.+/, "");
+   sub (/[ 	]+$/, ""); # Strip trailing space and tab characters.
+ 
+   if (/^$/)
+diff --git a/src/mkstrtable.awk b/src/mkstrtable.awk
+index c9de9c1..285e45f 100644
+--- a/src/mkstrtable.awk
++++ b/src/mkstrtable.awk
+@@ -77,7 +77,7 @@
+ #
+ # The variable prefix can be used to prepend a string to each message.
+ #
+-# The variable namespace can be used to prepend a string to each
++# The variable pkg_namespace can be used to prepend a string to each
+ # variable and macro name.
+ 
+ BEGIN {
+@@ -102,7 +102,7 @@ header {
+       print "/* The purpose of this complex string table is to produce";
+       print "   optimal code with a minimum of relocations.  */";
+       print "";
+-      print "static const char " namespace "msgstr[] = ";
++      print "static const char " pkg_namespace "msgstr[] = ";
+       header = 0;
+     }
+   else
+@@ -110,7 +110,7 @@ header {
+ }
+ 
+ !header {
+-  sub (/\#.+/, "");
++  sub (/#.+/, "");
+   sub (/[ 	]+$/, ""); # Strip trailing space and tab characters.
+ 
+   if (/^$/)
+@@ -150,7 +150,7 @@ END {
+   else
+     print "  gettext_noop (\"" last_msgstr "\");";
+   print "";
+-  print "static const int " namespace "msgidx[] =";
++  print "static const int " pkg_namespace "msgidx[] =";
+   print "  {";
+   for (i = 0; i < coded_msgs; i++)
+     print "    " pos[i] ",";
+@@ -158,7 +158,7 @@ END {
+   print "  };";
+   print "";
+   print "static GPG_ERR_INLINE int";
+-  print namespace "msgidxof (int code)";
++  print pkg_namespace "msgidxof (int code)";
+   print "{";
+   print "  return (0 ? 0";
+ 
diff --git a/gnu/packages/patches/libmp4v2-c++11.patch b/gnu/packages/patches/libmp4v2-c++11.patch
new file mode 100644
index 0000000000..e12f89bd84
--- /dev/null
+++ b/gnu/packages/patches/libmp4v2-c++11.patch
@@ -0,0 +1,14 @@
+Avoid a type mismatch that shows up in C++11.
+Taken from <https://bugs.debian.org/853560>.
+
+--- a/src/rtphint.cpp	2012-05-20 16:11:53.000000000 -0600
++++ b/src/rtphint.cpp	2017-05-16 10:25:26.930705191 -0600
+@@ -339,7 +339,7 @@
+                 pSlash = strchr(pSlash, '/');
+                 if (pSlash != NULL) {
+                     pSlash++;
+-                    if (pSlash != '\0') {
++                    if (*pSlash != '\0') {
+                         length = (uint32_t)strlen(pRtpMap) - (pSlash - pRtpMap);
+                         *ppEncodingParams = (char *)MP4Calloc(length + 1);
+                         strncpy(*ppEncodingParams, pSlash, length);
diff --git a/gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch b/gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch
deleted file mode 100644
index 4133be7fc9..0000000000
--- a/gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-This fixes a regression introduced in 1.8.0 where libssh2 fails to build
-with the gcrypt backend.
-
-Upstream bug URL:
-
-https://github.com/libssh2/libssh2/issues/150
-
-Patch copied from upstream source repository:
-
-https://github.com/libssh2/libssh2/commit/ced924b78a40126606797ef57a74066eb3b4b83f
-
-From ced924b78a40126606797ef57a74066eb3b4b83f Mon Sep 17 00:00:00 2001
-From: Sergei Trofimovich <siarheit@google.com>
-Date: Mon, 31 Oct 2016 09:04:33 +0000
-Subject: [PATCH] acinclude.m4: fix ./configure --with-libgcrypt
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 734ef07..c78260c 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -412,9 +412,9 @@ AC_DEFUN([LIBSSH2_CHECKFOR_GCRYPT], [
- 
-   old_LDFLAGS=$LDFLAGS
-   old_CFLAGS=$CFLAGS
--  if test -n "$use_libgcrypt" && test "$use_libgcrypt" != "no"; then
--    LDFLAGS="$LDFLAGS -L$use_libgcrypt/lib"
--    CFLAGS="$CFLAGS -I$use_libgcrypt/include"
-+  if test -n "$with_libgcrypt_prefix" && test "$use_libgcrypt" != "no"; then
-+    LDFLAGS="$LDFLAGS -L$with_libgcrypt_prefix/lib"
-+    CFLAGS="$CFLAGS -I$with_libgcrypt_prefix/include"
-   fi
-   AC_LIB_HAVE_LINKFLAGS([gcrypt], [], [
-     #include <gcrypt.h>
diff --git a/gnu/packages/patches/libxt-guix-search-paths.patch b/gnu/packages/patches/libxt-guix-search-paths.patch
index c618f48da5..5419edd1bd 100644
--- a/gnu/packages/patches/libxt-guix-search-paths.patch
+++ b/gnu/packages/patches/libxt-guix-search-paths.patch
@@ -1,26 +1,27 @@
---- libXt-1.1.5/src/Intrinsic.c	2015-05-01 07:36:20.000000000 +0200
-+++ Intrinsic.c	2016-12-12 00:42:16.567388450 +0100
-@@ -1303,21 +1303,101 @@
+diff --git a/src/Intrinsic.c b/src/Intrinsic.c
+index c9624ec..addcdba 100644
+--- a/src/Intrinsic.c
++++ b/src/Intrinsic.c
+@@ -1312,21 +1312,101 @@ static void FillInLangSubs(
      } else (void) strcpy(*rest, string);
  }
  
--/*
++
++
+ /*
 - * default path used if environment variable XFILESEARCHPATH
 - * is not defined.  Also substitued for %D.
 - * The exact value should be documented in the implementation
 - * notes for any Xt implementation.
-+
-+
-+/* 
 +   Return the default search path for the function
-+   XtResolvePathname to use if XFILESEARCHPATH is 
++   XtResolvePathname to use if XFILESEARCHPATH is
 +   not defined.
 +
 +   It returns the combination the set of values which are the 6 "stems" below,
-+   prepended with "/run/current-system/profile", and $GUIX_PROFILE and 
++   prepended with "/run/current-system/profile", and $GUIX_PROFILE and
 +   "$HOME/.guix-profile"
 +
-+   These values provide the default paths where Guix/GuixSD  can expect
++   These values provide the default paths where Guix/GuixSD can expect
 +   to find resources for installed packages.
   */
 -static const char *implementation_default_path(void)
@@ -28,11 +29,6 @@
  {
 -#if defined(WIN32)
 -    static char xfilesearchpath[] = "";
--
--    return xfilesearchpath;
--#else
--    return XFILESEARCHPATHDEFAULT;
--#endif
 +  static const char *search_path_default_stem[] = {
 +    "/lib/X11/%L/%T/%N%C%S",
 +    "/lib/X11/%l/%T/%N%C%S",
@@ -55,7 +51,7 @@
 +  char *home = getenv ("HOME");
 +  char *guix_profile = getenv ("GUIX_PROFILE");
 +
-+  size_t bytesAllocd = SIZEOF_STEMS + 1; 
++  size_t bytesAllocd = SIZEOF_STEMS + 1;
 +
 +  /* This function is evaluated multiple times and the calling
 +     code assumes that it is idempotent. So we must not allow
@@ -72,7 +68,11 @@
 +      bytesAllocd += SIZEOF_STEMS;
 +      bytesAllocd += 6 * (1 + strlen (guix_profile));
 +    }
-+
+ 
+-    return xfilesearchpath;
+-#else
+-    return XFILESEARCHPATHDEFAULT;
+-#endif
 +  if (home != NULL)
 +    {
 +      bytesAllocd += SIZEOF_STEMS;
@@ -83,7 +83,7 @@
 +  if (path == NULL) _XtAllocError(NULL);
 +
 +  memset (path, 0, bytesAllocd);
-+  
++
 +  for (i = 0 ; i < 6 ; ++i)
 +    {
 +      strcat (path, current_profile);
@@ -110,17 +110,17 @@
 +
 +  /* Remove final : */
 +  path[strlen(path) - 1] = '\0';
-+  
++
 +  return path;
  }
  
  
-@@ -1345,7 +1425,7 @@
+@@ -1354,7 +1434,7 @@ _XtString XtResolvePathname(
  {
      XtPerDisplay pd;
      static const char *defaultPath = NULL;
 -    const char *impl_default = implementation_default_path();
 +    const char *impl_default = guix_default_path();
-     int idef_len = strlen(impl_default);
+     int idef_len = (int) strlen(impl_default);
      char *massagedPath;
      int bytesAllocd, bytesLeft;
diff --git a/gnu/packages/patches/linux-libre-active-entropy.patch b/gnu/packages/patches/linux-libre-active-entropy.patch
new file mode 100644
index 0000000000..8f081f4a19
--- /dev/null
+++ b/gnu/packages/patches/linux-libre-active-entropy.patch
@@ -0,0 +1,86 @@
+Try to actively add entropy instead of waiting forever.
+Fixes <https://bugs.gnu.org/37501>.
+
+Taken from upstream:
+https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=50ee7529ec4500c88f8664560770a7a1b65db72b
+
+diff --git a/drivers/char/random.c b/drivers/char/random.c
+index 5d5ea4ce1442..2fda6166c1dd 100644
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -1731,6 +1731,56 @@ void get_random_bytes(void *buf, int nbytes)
+ }
+ EXPORT_SYMBOL(get_random_bytes);
+ 
++
++/*
++ * Each time the timer fires, we expect that we got an unpredictable
++ * jump in the cycle counter. Even if the timer is running on another
++ * CPU, the timer activity will be touching the stack of the CPU that is
++ * generating entropy..
++ *
++ * Note that we don't re-arm the timer in the timer itself - we are
++ * happy to be scheduled away, since that just makes the load more
++ * complex, but we do not want the timer to keep ticking unless the
++ * entropy loop is running.
++ *
++ * So the re-arming always happens in the entropy loop itself.
++ */
++static void entropy_timer(struct timer_list *t)
++{
++	credit_entropy_bits(&input_pool, 1);
++}
++
++/*
++ * If we have an actual cycle counter, see if we can
++ * generate enough entropy with timing noise
++ */
++static void try_to_generate_entropy(void)
++{
++	struct {
++		unsigned long now;
++		struct timer_list timer;
++	} stack;
++
++	stack.now = random_get_entropy();
++
++	/* Slow counter - or none. Don't even bother */
++	if (stack.now == random_get_entropy())
++		return;
++
++	timer_setup_on_stack(&stack.timer, entropy_timer, 0);
++	while (!crng_ready()) {
++		if (!timer_pending(&stack.timer))
++			mod_timer(&stack.timer, jiffies+1);
++		mix_pool_bytes(&input_pool, &stack.now, sizeof(stack.now));
++		schedule();
++		stack.now = random_get_entropy();
++	}
++
++	del_timer_sync(&stack.timer);
++	destroy_timer_on_stack(&stack.timer);
++	mix_pool_bytes(&input_pool, &stack.now, sizeof(stack.now));
++}
++
+ /*
+  * Wait for the urandom pool to be seeded and thus guaranteed to supply
+  * cryptographically secure random numbers. This applies to: the /dev/urandom
+@@ -1745,7 +1795,17 @@ int wait_for_random_bytes(void)
+ {
+ 	if (likely(crng_ready()))
+ 		return 0;
+-	return wait_event_interruptible(crng_init_wait, crng_ready());
++
++	do {
++		int ret;
++		ret = wait_event_interruptible_timeout(crng_init_wait, crng_ready(), HZ);
++		if (ret)
++			return ret > 0 ? 0 : ret;
++
++		try_to_generate_entropy();
++	} while (!crng_ready());
++
++	return 0;
+ }
+ EXPORT_SYMBOL(wait_for_random_bytes);
+ 
diff --git a/gnu/packages/patches/mescc-tools-boot.patch b/gnu/packages/patches/mescc-tools-boot.patch
new file mode 100644
index 0000000000..2bce8a49c2
--- /dev/null
+++ b/gnu/packages/patches/mescc-tools-boot.patch
@@ -0,0 +1,222 @@
+From c184e95096881a13f29ebd7fc507fe305d3d8de5 Mon Sep 17 00:00:00 2001
+From: Jan Nieuwenhuizen <janneke@gnu.org>
+Date: Thu, 4 Oct 2018 22:03:31 +0200
+Subject: [PATCH] build.sh: Update for mes 0.18.
+
+---
+ build.sh   | 92 +++++++++++++++++++++++++++++++++++++-----------------
+ install.sh |  6 ++--
+ 2 files changed, 66 insertions(+), 32 deletions(-)
+
+diff --git a/build.sh b/build.sh
+index 335a7bb..19a0029 100755
+--- a/build.sh
++++ b/build.sh
+@@ -18,7 +18,8 @@
+ # along with mescc-tools.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ set -eux
+-MES_SEED=${MES_SEED-../mescc-tools-seed/libs}
++MES_PREFIX=${MES_PREFIX-../mes}
++MES_SEED=${MES_SEED-../mes-seed}
+ MESCC_TOOLS_SEED=${MESCC_TOOLS_SEED-../mescc-tools-seed}
+ 
+ #########################################
+@@ -32,15 +33,23 @@ MESCC_TOOLS_SEED=${MESCC_TOOLS_SEED-../mescc-tools-seed}
+ # blood-elf
+ # Create proper debug segment
+ $MESCC_TOOLS_SEED/blood-elf\
++    -f $MESCC_TOOLS_SEED/file_print.M1\
++    -f $MESCC_TOOLS_SEED/match.M1\
++    -f $MESCC_TOOLS_SEED/numerate_number.M1\
++    -f $MESCC_TOOLS_SEED/string.M1\
+     -f $MESCC_TOOLS_SEED/blood-elf.M1\
+     -o blood-elf-blood-elf-footer.M1
+ 
+ # Build
+ # M1-macro phase
+ $MESCC_TOOLS_SEED/M1 --LittleEndian --Architecture 1\
+-    -f $MES_SEED/x86.M1\
+-    -f $MES_SEED/crt1.M1\
+-    -f $MES_SEED/libc+tcc-mes.M1\
++    -f $MES_PREFIX/lib/x86-mes/x86.M1\
++    -f $MES_SEED/x86-mes/crt1.S\
++    -f $MES_SEED/x86-mes/libc+tcc.S\
++    -f $MESCC_TOOLS_SEED/file_print.M1\
++    -f $MESCC_TOOLS_SEED/match.M1\
++    -f $MESCC_TOOLS_SEED/numerate_number.M1\
++    -f $MESCC_TOOLS_SEED/string.M1\
+     -f $MESCC_TOOLS_SEED/blood-elf.M1\
+     -f blood-elf-blood-elf-footer.M1\
+     -o blood-elf.hex2
+@@ -49,7 +58,7 @@ $MESCC_TOOLS_SEED/hex2\
+     --LittleEndian\
+     --Architecture 1\
+     --BaseAddress 0x1000000\
+-    -f $MES_SEED/elf32-header.hex2\
++    -f $MES_PREFIX/lib/x86-mes/elf32-header.hex2\
+     -f blood-elf.hex2\
+     --exec_enable\
+     -o bin/blood-elf
+@@ -65,9 +74,13 @@ $MESCC_TOOLS_SEED/hex2\
+ $MESCC_TOOLS_SEED/M1 \
+     --LittleEndian\
+     --Architecture 1\
+-    -f $MES_SEED/x86.M1\
+-    -f $MES_SEED/crt1.M1\
+-    -f $MES_SEED/libc+tcc-mes.M1\
++    -f $MES_PREFIX/lib/x86-mes/x86.M1\
++    -f $MES_SEED/x86-mes/crt1.S\
++    -f $MES_SEED/x86-mes/libc+tcc.S\
++    -f $MESCC_TOOLS_SEED/file_print.M1\
++    -f $MESCC_TOOLS_SEED/match.M1\
++    -f $MESCC_TOOLS_SEED/numerate_number.M1\
++    -f $MESCC_TOOLS_SEED/string.M1\
+     -f $MESCC_TOOLS_SEED/M1.M1\
+     -f M1-footer.M1\
+     -o M1.hex2
+@@ -76,7 +89,7 @@ $MESCC_TOOLS_SEED/hex2 \
+     --LittleEndian\
+     --Architecture 1\
+     --BaseAddress 0x1000000\
+-    -f $MES_SEED/elf32-header.hex2\
++    -f $MES_PREFIX/lib/x86-mes/elf32-header.hex2\
+     -f M1.hex2\
+     --exec_enable\
+     -o bin/M1
+@@ -92,9 +105,13 @@ $MESCC_TOOLS_SEED/hex2 \
+ ./bin/M1 \
+     --LittleEndian\
+     --Architecture 1\
+-    -f $MES_SEED/x86.M1\
+-    -f $MES_SEED/crt1.M1\
+-    -f $MES_SEED/libc+tcc-mes.M1\
++    -f $MES_PREFIX/lib/x86-mes/x86.M1\
++    -f $MES_SEED/x86-mes/crt1.S\
++    -f $MES_SEED/x86-mes/libc+tcc.S\
++    -f $MESCC_TOOLS_SEED/file_print.M1\
++    -f $MESCC_TOOLS_SEED/match.M1\
++    -f $MESCC_TOOLS_SEED/numerate_number.M1\
++    -f $MESCC_TOOLS_SEED/string.M1\
+     -f $MESCC_TOOLS_SEED/hex2.M1\
+     -f hex2-footer.M1\
+     -o hex2.hex2
+@@ -103,10 +120,10 @@ $MESCC_TOOLS_SEED/hex2 \
+       --LittleEndian\
+       --Architecture 1\
+       --BaseAddress 0x1000000\
+-      -f $MES_SEED/elf32-header.hex2\
++      -f $MES_PREFIX/lib/x86-mes/elf32-header.hex2\
+       -f hex2.hex2\
+       --exec_enable\
+-      -o bin/hex2
++      -o bin/hex2-0
+ 
+ #########################
+ # Phase-1 Self-host     #
+@@ -123,18 +140,22 @@ $MESCC_TOOLS_SEED/hex2 \
+ ./bin/M1 \
+     --LittleEndian\
+     --Architecture 1\
+-    -f $MES_SEED/x86.M1\
+-    -f $MES_SEED/crt1.M1\
+-    -f $MES_SEED/libc+tcc-mes.M1\
++    -f $MES_PREFIX/lib/x86-mes/x86.M1\
++    -f $MES_SEED/x86-mes/crt1.S\
++    -f $MES_SEED/x86-mes/libc+tcc.S\
++    -f $MESCC_TOOLS_SEED/file_print.M1\
++    -f $MESCC_TOOLS_SEED/match.M1\
++    -f $MESCC_TOOLS_SEED/numerate_number.M1\
++    -f $MESCC_TOOLS_SEED/string.M1\
+     -f $MESCC_TOOLS_SEED/blood-elf.M1\
+     -f blood-elf-blood-elf-footer.M1\
+     -o blood-elf.hex2
+ # Hex2-linker phase
+-./bin/hex2 \
++./bin/hex2-0 \
+     --LittleEndian\
+     --Architecture 1\
+     --BaseAddress 0x1000000\
+-    -f $MES_SEED/elf32-header.hex2\
++    -f $MES_PREFIX/lib/x86-mes/elf32-header.hex2\
+     -f blood-elf.hex2\
+     --exec_enable\
+     -o blood-elf
+@@ -150,18 +171,22 @@ $MESCC_TOOLS_SEED/hex2 \
+ ./bin/M1 \
+     --LittleEndian\
+     --Architecture 1\
+-    -f $MES_SEED/x86.M1\
+-    -f $MES_SEED/crt1.M1\
+-    -f $MES_SEED/libc+tcc-mes.M1\
++    -f $MES_PREFIX/lib/x86-mes/x86.M1\
++    -f $MES_SEED/x86-mes/crt1.S\
++    -f $MES_SEED/x86-mes/libc+tcc.S\
++    -f $MESCC_TOOLS_SEED/file_print.M1\
++    -f $MESCC_TOOLS_SEED/match.M1\
++    -f $MESCC_TOOLS_SEED/numerate_number.M1\
++    -f $MESCC_TOOLS_SEED/string.M1\
+     -f $MESCC_TOOLS_SEED/M1.M1\
+     -f M1-footer.M1\
+     -o M1.hex2
+ # Hex2-linker phase
+-./bin/hex2 \
++./bin/hex2-0 \
+     --LittleEndian\
+     --Architecture 1\
+     --BaseAddress 0x1000000\
+-    -f $MES_SEED/elf32-header.hex2\
++    -f $MES_PREFIX/lib/x86-mes/elf32-header.hex2\
+     -f M1.hex2\
+     --exec_enable\
+     -o bin/M1
+@@ -177,18 +202,27 @@ $MESCC_TOOLS_SEED/hex2 \
+ ./bin/M1 \
+     --LittleEndian\
+     --Architecture 1\
+-    -f $MES_SEED/x86.M1\
+-    -f $MES_SEED/crt1.M1\
+-    -f $MES_SEED/libc+tcc-mes.M1\
++    -f $MES_PREFIX/lib/x86-mes/x86.M1\
++    -f $MES_SEED/x86-mes/crt1.S\
++    -f $MES_SEED/x86-mes/libc+tcc.S\
++    -f $MESCC_TOOLS_SEED/file_print.M1\
++    -f $MESCC_TOOLS_SEED/match.M1\
++    -f $MESCC_TOOLS_SEED/numerate_number.M1\
++    -f $MESCC_TOOLS_SEED/string.M1\
+     -f $MESCC_TOOLS_SEED/hex2.M1\
+     -f hex2-footer.M1\
+     -o hex2.hex2
+ # Hex2-linker phase
+-./bin/hex2 \
++./bin/hex2-0 \
+       --LittleEndian\
+       --Architecture 1\
+       --BaseAddress 0x1000000\
+-      -f $MES_SEED/elf32-header.hex2\
++      -f $MES_PREFIX/lib/x86-mes/elf32-header.hex2\
+       -f hex2.hex2\
+       --exec_enable\
+       -o bin/hex2
++
++# TODO
++touch bin/exec_enable
++touch bin/get_machine
++touch bin/kaem
+diff --git a/install.sh b/install.sh
+index e4dccff..29e58d6 100644
+--- a/install.sh
++++ b/install.sh
+@@ -18,6 +18,6 @@
+ PREFIX=${PREFIX-usr}
+ 
+ mkdir -p "$PREFIX/bin"
+-cp blood-elf "$PREFIX/bin/blood-elf"
+-cp hex2 "$PREFIX/bin/hex2"
+-cp M1 "$PREFIX/bin/M1"
++cp bin/blood-elf "$PREFIX/bin/blood-elf"
++cp bin/hex2 "$PREFIX/bin/hex2"
++cp bin/M1 "$PREFIX/bin/M1"
+-- 
+2.18.0
+
diff --git a/gnu/packages/patches/mingw-w64-5.0rc2-gcc-4.9.3.patch b/gnu/packages/patches/mingw-w64-5.0rc2-gcc-4.9.3.patch
deleted file mode 100644
index e8f841c4fd..0000000000
--- a/gnu/packages/patches/mingw-w64-5.0rc2-gcc-4.9.3.patch
+++ /dev/null
@@ -1,218 +0,0 @@
-This patch includes
-
-   * mingw-w64-headers/include/winnt.h: compile fixes for1 gcc-4.9.3
-   * mingw-w64-headers/crt/math.h: Likewise
-   * mingw-w64-headers/crt/float.h (FLT_EPSILON,DBL_EPSILON,LDBL_EPSILON): Add
-   symbols.
-   * mingw-w64-headers/crt/stat.h (S_ISLNK,S_ISSOCK,S_ISUID,S_ISGID,S_ISLINK):
-   Add symbols.
-   (lstat): Add function.
-   * mingw-w64-headers/crt/_mingw_stat64.h: Likewise
-   * mingw-w64-headers/crt/stdlib.h (realpath): Add function.
-
-Needed for building with gcc-4.9.3 and using with cross-libtool-2.4.6.
-
-Upstream status: not yet presented upstream.
-
-index 9c5cf87..74a8541 100644
---- a/mingw-w64-crt/misc/dirname.c
-+++ b/mingw-w64-crt/misc/dirname.c
-@@ -29,6 +29,12 @@
- #define __cdecl  /* this may not be defined.                   */
- #endif
- 
-+char *__cdecl
-+realpath(const char *name, char *resolved)
-+{
-+  return resolved ? strcpy (resolved, name) : strdup (name);
-+}
-+
- char * __cdecl
- dirname(char *path)
- {
-diff --git a/mingw-w64-headers/crt/_mingw_stat64.h b/mingw-w64-headers/crt/_mingw_stat64.h
-index 17e754c..7d2339b 100644
---- a/mingw-w64-headers/crt/_mingw_stat64.h
-+++ b/mingw-w64-headers/crt/_mingw_stat64.h
-@@ -2,13 +2,17 @@
- 
- #ifdef _USE_32BIT_TIME_T
- #define _fstat32 _fstat
-+#define _lstat32 _lstat
- #define _stat32 _stat
- #define _wstat32 _wstat
- #define _fstat32i64 _fstati64
-+#define _lstat32i64 _lstati64
- #define _stat32i64 _stati64
- #define _wstat32i64 _wstati64
- #else
- #define _fstat _fstat64i32
-+#define _lstat _lstat64i32
-+#define _lstati64 _lstat64
- #define _fstati64 _fstat64
- #define _stat _stat64i32
- #define _stati64 _stat64
-diff --git a/mingw-w64-headers/crt/float.h b/mingw-w64-headers/crt/float.h
-index 5874f4e..bdf4ead 100644
---- a/mingw-w64-headers/crt/float.h
-+++ b/mingw-w64-headers/crt/float.h
-@@ -22,6 +22,15 @@
- #if (__GNUC__ < 4)
- #error Corrupt install of gcc-s internal headers, or search order was changed.
- #else
-+
-+        /* From gcc-4.9.3 float.h.  */
-+        #undef FLT_EPSILON
-+        #undef DBL_EPSILON
-+        #undef LDBL_EPSILON
-+        #define FLT_EPSILON	__FLT_EPSILON__
-+        #define DBL_EPSILON	__DBL_EPSILON__
-+        #define LDBL_EPSILON	__LDBL_EPSILON__
-+
- 	/* #include_next <float_ginclude.h> */
- 	
-    	/* Number of decimal digits, q, such that any floating-point number with q
-diff --git a/mingw-w64-headers/crt/math.h b/mingw-w64-headers/crt/math.h
-index 1e970f4..99a332f 100644
---- a/mingw-w64-headers/crt/math.h
-+++ b/mingw-w64-headers/crt/math.h
-@@ -216,6 +216,7 @@ extern "C" {
- #endif
-   }
- 
-+#if 0
-   __CRT_INLINE long double __cdecl fabsl (long double x)
-   {
- #ifdef __arm__
-@@ -226,6 +227,7 @@ extern "C" {
-     return res;
- #endif
-   }
-+#endif
- 
-   __CRT_INLINE double __cdecl fabs (double x)
-   {
-@@ -905,7 +907,7 @@ __mingw_choose_expr (                                         \
- /* 7.12.7.3  */
-   extern double __cdecl hypot (double, double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; /* in libmoldname.a */
-   extern float __cdecl hypotf (float x, float y);
--#ifndef __CRT__NO_INLINE
-+#if 0 //ndef __CRT__NO_INLINE
-   __CRT_INLINE float __cdecl hypotf (float x, float y) { return (float) hypot ((double)x, (double)y);}
- #endif
-   extern long double __cdecl hypotl (long double, long double);
-diff --git a/mingw-w64-headers/crt/stdlib.h b/mingw-w64-headers/crt/stdlib.h
-index dfc5ae4..6f0fee3 100644
---- a/mingw-w64-headers/crt/stdlib.h
-+++ b/mingw-w64-headers/crt/stdlib.h
-@@ -8,6 +8,7 @@
- 
- #include <crtdefs.h>
- #include <limits.h>
-+#include <string.h>
- 
- #if defined (__USE_MINGW_ANSI_STDIO) && ((__USE_MINGW_ANSI_STDIO + 0) != 0) && !defined (__USE_MINGW_STRTOX)
- #define __USE_MINGW_STRTOX 1
-@@ -676,6 +677,8 @@ unsigned long __cdecl _lrotr(unsigned long,int);
- 
- #endif /* !__NO_ISOCEXT */
- 
-+char *__cdecl realpath (const char *name, char *resolved);
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/mingw-w64-headers/crt/sys/stat.h b/mingw-w64-headers/crt/sys/stat.h
-index ed60219..d88b4f1 100644
---- a/mingw-w64-headers/crt/sys/stat.h
-+++ b/mingw-w64-headers/crt/sys/stat.h
-@@ -58,16 +58,21 @@ extern "C" {
- #include <_mingw_stat64.h>
- 
- #define _S_IFMT 0xF000
-+#define _S_IFLNK 0xA000
-+#define _S_IFSOCK 0xC000
- #define _S_IFDIR 0x4000
- #define _S_IFCHR 0x2000
- #define _S_IFIFO 0x1000
- #define _S_IFREG 0x8000
-+#define _S_ISUID 0x0400
-+#define _S_ISGID 0x0200
- #define _S_IREAD 0x0100
- #define _S_IWRITE 0x0080
- #define _S_IEXEC 0x0040
- 
-   _CRTIMP int __cdecl _fstat32(int _FileDes,struct _stat32 *_Stat);
-   _CRTIMP int __cdecl _stat32(const char *_Name,struct _stat32 *_Stat);
-+  static inline int __cdecl _lstat32(const char *_Name,struct _stat32 *_Stat) {return _stat32(_Name, _Stat);}
-   _CRTIMP int __cdecl _fstat64(int _FileDes,struct _stat64 *_Stat);
-   _CRTIMP int __cdecl _fstat32i64(int _FileDes,struct _stat32i64 *_Stat);
-   int __cdecl _fstat64i32(int _FileDes,struct _stat64i32 *_Stat);
-@@ -97,6 +102,9 @@ extern "C" {
-   _CRTIMP int __cdecl _stat64(const char *_Name,struct _stat64 *_Stat);
-   _CRTIMP int __cdecl _stat32i64(const char *_Name,struct _stat32i64 *_Stat);
-   int __cdecl _stat64i32(const char *_Name,struct _stat64i32 *_Stat);
-+  static inline int __cdecl _lstat64(const char *_Name,struct _stat64 *_Stat) {return _stat64(_Name, _Stat);}
-+  static inline int __cdecl _lstat32i64(const char *_Name,struct _stat32i64 *_Stat) {return _stat32i64(_Name, _Stat);}
-+  static inline int __cdecl _lstat64i32(const char *_Name,struct _stat64i32 *_Stat) {return _stat64i32(_Name, _Stat);}
- #ifndef __CRT__NO_INLINE
-   __CRT_INLINE int __cdecl _stat64i32(const char *_Name,struct _stat64i32 *_Stat)
-   {
-@@ -132,6 +140,8 @@ extern "C" {
- #ifndef	NO_OLDNAMES
- #define	_S_IFBLK	0x3000	/* Block: Is this ever set under w32? */
- 
-+#define S_IFLNK _S_IFLNK
-+#define S_IFSOCK _S_IFSOCK
- #define S_IFMT _S_IFMT
- #define S_IFDIR _S_IFDIR
- #define S_IFCHR _S_IFCHR
-@@ -162,6 +172,11 @@ extern "C" {
- #define S_IXOTH    (S_IXGRP >> 3)
- #define S_IRWXO    (S_IRWXG >> 3)
- 
-+#define S_ISUID _S_ISUID
-+#define S_ISGID _S_ISGID
-+
-+#define S_ISLNK(m)	(((m) & S_IFMT) == S_IFLNK)
-+#define S_ISSOCK(m)	(((m) & S_IFMT) == S_IFSOCK)
- #define	S_ISDIR(m)	(((m) & S_IFMT) == S_IFDIR)
- #define	S_ISFIFO(m)	(((m) & S_IFMT) == S_IFIFO)
- #define	S_ISCHR(m)	(((m) & S_IFMT) == S_IFCHR)
-@@ -174,6 +189,7 @@ extern "C" {
- int __cdecl stat(const char *_Filename,struct stat *_Stat);
- int __cdecl fstat(int _Desc,struct stat *_Stat);
- int __cdecl wstat(const wchar_t *_Filename,struct stat *_Stat);
-+static inline int __cdecl lstat(const char *_Filename,struct stat *_Stat){return stat(_Filename, _Stat);}
- 
- #ifndef __CRT__NO_INLINE
- #ifdef _USE_32BIT_TIME_T
-@@ -262,9 +278,11 @@ __CRT_INLINE int __cdecl
- 
- #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
- #ifdef _USE_32BIT_TIME_T
-+#define lstat _lstat32i64
- #define stat _stat32i64
- #define fstat _fstat32i64
- #else
-+#define lstat _lstat64
- #define stat _stat64
- #define fstat _fstat64
- #endif
-diff --git a/mingw-w64-headers/include/winnt.h b/mingw-w64-headers/include/winnt.h
-index 52af29b..8626396 100644
---- a/mingw-w64-headers/include/winnt.h
-+++ b/mingw-w64-headers/include/winnt.h
-@@ -6895,7 +6895,12 @@ __buildmemorybarrier()
- 	  DWORD Reg : 3;
- 	  DWORD R : 1;
- 	  DWORD L : 1;
-+/* C is used as a const specifier */
-+#define save_C C
-+#undef C
- 	  DWORD C : 1;
-+#define C save_C
-+#undef save_C
- 	  DWORD StackAdjust : 10;
- 	} DUMMYSTRUCTNAME;
-       } DUMMYUNIONNAME;
diff --git a/gnu/packages/patches/mingw-w64-6.0.0-gcc.patch b/gnu/packages/patches/mingw-w64-6.0.0-gcc.patch
new file mode 100644
index 0000000000..036cf79f91
--- /dev/null
+++ b/gnu/packages/patches/mingw-w64-6.0.0-gcc.patch
@@ -0,0 +1,65 @@
+This patch includes
+
+   * mingw-w64-headers/include/winnt.h: compile fixes for1 gcc-4.9.3
+   * mingw-w64-headers/crt/math.h: Likewise
+   * mingw-w64-headers/crt/float.h (FLT_EPSILON,DBL_EPSILON,LDBL_EPSILON): Add
+   symbols.
+   * mingw-w64-headers/crt/stat.h (S_ISLNK,S_ISSOCK,S_ISUID,S_ISGID,S_ISLINK):
+   Add symbols.
+   (lstat): Add function.
+   * mingw-w64-headers/crt/_mingw_stat64.h: Likewise
+   * mingw-w64-headers/crt/stdlib.h (realpath): Add function.
+
+Needed for building with gcc-4.9.3 and using with cross-libtool-2.4.6.
+
+Upstream status: not yet presented upstream.
+
+diff --git a/mingw-w64-headers/crt/float.h b/mingw-w64-headers/crt/float.h
+index 5874f4e..bdf4ead 100644
+--- a/mingw-w64-headers/crt/float.h
++++ b/mingw-w64-headers/crt/float.h
+@@ -22,6 +22,15 @@
+ #if (__GNUC__ < 4)
+ #error Corrupt install of gcc-s internal headers, or search order was changed.
+ #else
++
++        /* From gcc-4.9.3 float.h.  */
++        #undef FLT_EPSILON
++        #undef DBL_EPSILON
++        #undef LDBL_EPSILON
++        #define FLT_EPSILON	__FLT_EPSILON__
++        #define DBL_EPSILON	__DBL_EPSILON__
++        #define LDBL_EPSILON	__LDBL_EPSILON__
++
+ 	/* #include_next <float_ginclude.h> */
+
+    	/* Number of decimal digits, q, such that any floating-point number with q
+diff --git a/mingw-w64-headers/crt/math.h b/mingw-w64-headers/crt/math.h
+index 1e970f4..99a332f 100644
+--- a/mingw-w64-headers/crt/math.h
++++ b/mingw-w64-headers/crt/math.h
+@@ -216,6 +216,7 @@ extern "C" {
+ #endif
+   }
+
++#if 0
+   __CRT_INLINE long double __cdecl fabsl (long double x)
+   {
+ #ifdef __arm__
+@@ -226,6 +227,7 @@ extern "C" {
+     return res;
+ #endif
+   }
++#endif
+
+   __CRT_INLINE double __cdecl fabs (double x)
+   {
+@@ -905,7 +907,7 @@ __mingw_choose_expr (                                         \
+ /* 7.12.7.3  */
+   extern double __cdecl hypot (double, double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; /* in libmoldname.a */
+   extern float __cdecl hypotf (float x, float y);
+-#ifndef __CRT__NO_INLINE
++#if 0 //ndef __CRT__NO_INLINE
+   __CRT_INLINE float __cdecl hypotf (float x, float y) { return (float) hypot ((double)x, (double)y);}
+ #endif
+   extern long double __cdecl hypotl (long double, long double);
diff --git a/gnu/packages/patches/p11-kit-jks-timestamps.patch b/gnu/packages/patches/p11-kit-jks-timestamps.patch
deleted file mode 100644
index 8cb8ed8684..0000000000
--- a/gnu/packages/patches/p11-kit-jks-timestamps.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-Fix test failures induced by setting the SOURCE_DATE_EPOCH variable.
-
-Taken from upstream: <https://github.com/p11-glue/p11-kit/pull/213>.
-
-From 2a474e1fe8f4bd8b4ed7622e5cf3b2718a202562 Mon Sep 17 00:00:00 2001
-From: Daiki Ueno <dueno@redhat.com>
-Date: Mon, 28 Jan 2019 13:03:15 +0100
-Subject: [PATCH] extract-jks: Prefer _p11_extract_jks_timestamp to
- SOURCE_DATE_EPOCH
-
-Give _p11_extract_jks_timestamp precedence over SOURCE_DATE_EPOCH so
-that the test results are not affected by the envvar settings.
----
- trust/extract-jks.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/trust/extract-jks.c b/trust/extract-jks.c
-index ad8dc35..a6f855f 100644
---- a/trust/extract-jks.c
-+++ b/trust/extract-jks.c
-@@ -250,7 +250,9 @@ prepare_jks_buffer (p11_enumerate *ex,
- 	 * when this was this certificate was added to the keystore, however
- 	 * we don't have that information. Java uses time in milliseconds
- 	 */
--	{
-+	if (_p11_extract_jks_timestamp)
-+		now = _p11_extract_jks_timestamp;
-+	else {
- 		char *source_date_epoch;
- 		source_date_epoch = secure_getenv ("SOURCE_DATE_EPOCH");
- 		if (source_date_epoch) {
-@@ -276,9 +278,7 @@ prepare_jks_buffer (p11_enumerate *ex,
- 				return false;
- 			}
- 			now = epoch;
--		} else if (_p11_extract_jks_timestamp)
--			now = _p11_extract_jks_timestamp;
--		else
-+		} else
- 			now = time (NULL);
- 	}
- 
diff --git a/gnu/packages/patches/perl-no-sys-dirs.patch b/gnu/packages/patches/perl-no-sys-dirs.patch
index 31d53e0353..2269d715c7 100644
--- a/gnu/packages/patches/perl-no-sys-dirs.patch
+++ b/gnu/packages/patches/perl-no-sys-dirs.patch
@@ -112,20 +112,29 @@ Only in perl-5.20.0/: Configure.orig
 diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/ext/Errno/Errno_pm.PL perl-5.20.0/ext/Errno/Errno_pm.PL
 --- perl-5.20.0-orig/ext/Errno/Errno_pm.PL	2014-05-26 15:34:20.000000000 +0200
 +++ perl-5.20.0/ext/Errno/Errno_pm.PL	2014-06-25 10:31:24.317970047 +0200
-@@ -126,11 +126,7 @@
+@@ -114,7 +114,7 @@ sub get_files {
+     # When cross-compiling we may store a path for gcc's "sysroot" option:
+     my $sysroot = $Config{sysroot} || '';
+     my $linux_errno_h;
+-    if ($^O eq 'linux') {
++    if (0) {
+ 	# Some Linuxes have weird errno.hs which generate
+ 	# no #file or #line directives
+ 	($linux_errno_h) = grep { -e $_ } map { "$_/errno.h" }
+@@ -134,13 +134,6 @@ sub get_files {
  	if ($dep =~ /(\S+errno\.h)/) {
  	     $file{$1} = 1;
  	}
 -    } elsif ($^O eq 'linux' &&
 -	      $Config{gccversion} ne '' && 
--	      $Config{gccversion} !~ /intel/i
+-	      $Config{gccversion} !~ /intel/i &&
 -	      # might be using, say, Intel's icc
+-	      $linux_errno_h
 -	     ) {
-+    } elsif (0) {
-     # When cross-compiling we may store a path for gcc's "sysroot" option:
-     my $sysroot = $Config{sysroot} || '';
- 	# Some Linuxes have weird errno.hs which generate
-Only in perl-5.20.0/ext/Errno: Errno_pm.PL.orig
+-	$file{$linux_errno_h} = 1;
+     } elsif ($^O eq 'haiku') {
+ 	# hidden in a special place
+ 	$file{'/boot/develop/headers/posix/errno.h'} = 1;
 diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/freebsd.sh perl-5.20.0/hints/freebsd.sh
 --- perl-5.20.0-orig/hints/freebsd.sh	2014-01-31 22:55:51.000000000 +0100
 +++ perl-5.20.0/hints/freebsd.sh	2014-06-25 10:25:53.263964680 +0200
diff --git a/gnu/packages/patches/python-2.7-search-paths.patch b/gnu/packages/patches/python-2.7-search-paths.patch
index ba7235df27..a012bc8fe0 100644
--- a/gnu/packages/patches/python-2.7-search-paths.patch
+++ b/gnu/packages/patches/python-2.7-search-paths.patch
@@ -1,4 +1,4 @@
-Make sure the build system honors C_INCLUDE_PATH and LIBRARY_PATH when
+Make sure the build system honors CPATH and LIBRARY_PATH when
 looking for headers and libraries.
 
 --- Python-2.7.10/setup.py	2015-10-07 18:33:18.125153186 +0200
@@ -9,7 +9,7 @@ looking for headers and libraries.
  
 +        # Always honor these variables.
 +        lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep)
-+        inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep)
++        inc_dirs += os.getenv('CPATH', '').split(os.pathsep)
 +
          # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb)
          if host_platform in ['osf1', 'unixware7', 'openunix8']:
diff --git a/gnu/packages/patches/python-3-deterministic-build-info.patch b/gnu/packages/patches/python-3-deterministic-build-info.patch
index 22c372a0cf..25a079fe90 100644
--- a/gnu/packages/patches/python-3-deterministic-build-info.patch
+++ b/gnu/packages/patches/python-3-deterministic-build-info.patch
@@ -2,8 +2,8 @@ Always provide the same date and time in 'Py_GetBuildInfo'.
 This is the information shown at the REPL and in 'sys.version'.
 We cannot pass it in CPPFLAGS due to whitespace in the DATE string.
 
---- Modules/getbuildinfo.c
-+++ Modules/getbuildinfo.c
+--- a/Modules/getbuildinfo.c
++++ b/Modules/getbuildinfo.c
 @@ -4,6 +4,10 @@
  #include <stdio.h>
  #endif
diff --git a/gnu/packages/patches/python-3-fix-tests.patch b/gnu/packages/patches/python-3-fix-tests.patch
index ab713c54dd..e13790bd41 100644
--- a/gnu/packages/patches/python-3-fix-tests.patch
+++ b/gnu/packages/patches/python-3-fix-tests.patch
@@ -1,9 +1,134 @@
-Additional test fixes which affect Python 3.5 (and presumably later) but not
-prior revisions of Python.
+See the discussion about the issues fixed here at:
+http://bugs.python.org/issue20868 .
 
---- Lib/test/test_pathlib.py     2014-03-01 03:02:36.088311000 +0100
-+++ Lib/test/test_pathlib.py     2014-03-01 04:56:37.768311000 +0100
-@@ -2132,8 +2132,7 @@
+diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
+--- a/Lib/ctypes/test/test_callbacks.py
++++ b/Lib/ctypes/test/test_callbacks.py
+@@ -3,6 +3,7 @@ import unittest
+ from ctypes import *
+ from ctypes.test import need_symbol
+ import _ctypes_test
++import platform
+ 
+ class Callbacks(unittest.TestCase):
+     functype = CFUNCTYPE
+@@ -176,6 +177,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
+ 
+         self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
+ 
++    @unittest.skipIf(platform.machine() in ['mips64'],
++                     "This test fails on this platform")
+     def test_issue_8959_a(self):
+         from ctypes.util import find_library
+         libc_path = find_library("c")
+diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
+--- a/Lib/ctypes/test/test_libc.py
++++ b/Lib/ctypes/test/test_libc.py
+@@ -2,6 +2,7 @@ import unittest
+ 
+ from ctypes import *
+ import _ctypes_test
++import platform
+ 
+ lib = CDLL(_ctypes_test.__file__)
+ 
+@@ -17,6 +18,8 @@ class LibTest(unittest.TestCase):
+         import math
+         self.assertEqual(lib.my_sqrt(2.0), math.sqrt(2.0))
+ 
++    @unittest.skipIf(platform.machine() in ['mips64'],
++                     "This test fails on this platform")
+     def test_qsort(self):
+         comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
+         lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
+diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py
+--- a/Lib/distutils/tests/test_archive_util.py
++++ b/Lib/distutils/tests/test_archive_util.py
+@@ -333,6 +333,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
+         self.assertEqual(os.path.basename(res), 'archive.tar.xz')
+         self.assertEqual(self._tarinfo(res), self._created_files)
+ 
++    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
+     def test_make_archive_owner_group(self):
+         # testing make_archive with owner and group, with various combinations
+         # this works even if there's not gid/uid support
+@@ -362,6 +363,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
+ 
+     @unittest.skipUnless(ZLIB_SUPPORT, "Requires zlib")
+     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
++    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
+     def test_tarfile_root_owner(self):
+         tmpdir =  self._create_files()
+         base_name = os.path.join(self.mkdtemp(), 'archive')
+diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
+--- a/Lib/distutils/tests/test_sdist.py
++++ b/Lib/distutils/tests/test_sdist.py
+@@ -443,6 +443,7 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
+                      "The tar command is not found")
+     @unittest.skipIf(find_executable('gzip') is None,
+                      "The gzip command is not found")
++    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
+     def test_make_distribution_owner_group(self):
+         # now building a sdist
+         dist, cmd = self.get_cmd()
+diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
+--- a/Lib/test/_test_multiprocessing.py
++++ b/Lib/test/_test_multiprocessing.py
+@@ -1473,6 +1473,7 @@ class _TestCondition(BaseTestCase):
+         if pid is not None:
+             os.kill(pid, signal.SIGINT)
+ 
++    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
+     def test_wait_result(self):
+         if isinstance(self, ProcessesMixin) and sys.platform != 'win32':
+             pid = os.getpid()
+diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
+--- a/Lib/test/test_asyncio/test_base_events.py
++++ b/Lib/test/test_asyncio/test_base_events.py
+@@ -1323,6 +1323,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
+         self._test_create_connection_ip_addr(m_socket, False)
+ 
+     @patch_socket
++    @unittest.skipUnless(support.is_resource_enabled('network'),
++                         'network is not enabled')
+     def test_create_connection_service_name(self, m_socket):
+         m_socket.getaddrinfo = socket.getaddrinfo
+         sock = m_socket.socket.return_value
+diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
+--- a/Lib/test/test_generators.py
++++ b/Lib/test/test_generators.py
+@@ -34,6 +34,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
+         else:
+             return "FAILED"
+ 
++    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment')
+     def test_raise_and_yield_from(self):
+         gen = self.generator1()
+         gen.send(None)
+diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py
+--- a/Lib/test/test_normalization.py
++++ b/Lib/test/test_normalization.py
+@@ -2,6 +2,7 @@ from test.support import open_urlresource
+ import unittest
+ 
+ from http.client import HTTPException
++from urllib.error import URLError
+ import sys
+ from unicodedata import normalize, unidata_version
+ 
+@@ -43,6 +44,8 @@ class NormalizationTest(unittest.TestCase):
+         except PermissionError:
+             self.skipTest(f"Permission error when downloading {TESTDATAURL} "
+                           f"into the test data directory")
++        except URLError:
++            self.skipTest("DNS lookups are not enabled.")
+         except (OSError, HTTPException):
+             self.fail(f"Could not retrieve {TESTDATAURL}")
+ 
+diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
+--- a/Lib/test/test_pathlib.py
++++ b/Lib/test/test_pathlib.py
+@@ -2134,8 +2134,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
          self.assertEqual(given, expect)
          self.assertEqual(set(p.rglob("FILEd*")), set())
  
@@ -13,47 +138,10 @@ prior revisions of Python.
      def test_expanduser(self):
          P = self.cls
          support.import_module('pwd')
---- Lib/test/test_tarfile.py        2016-02-24 19:22:52.597208055 +0000
-+++ Lib/test/test_tarfile.py     2016-02-24 20:50:48.941950135 +0000
-@@ -2305,11 +2305,14 @@
-     try:
-         import pwd, grp
-     except ImportError:
-         return False
--    if pwd.getpwuid(0)[0] != 'root':
--        return False
--    if grp.getgrgid(0)[0] != 'root':
-+    try:
-+        if pwd.getpwuid(0)[0] != 'root':
-+            return False
-+        if grp.getgrgid(0)[0] != 'root':
-+            return False
-+    except KeyError:
-         return False
-     return True
-
-
---- Lib/test/test_asyncio/test_base_events.py
-+++ Lib/test/test_asyncio/test_base_events.py
-@@ -1216,6 +1216,8 @@
-         self._test_create_connection_ip_addr(m_socket, False)
-
-     @patch_socket
-+    @unittest.skipUnless(support.is_resource_enabled('network'),
-+                         'network is not enabled')
-     def test_create_connection_service_name(self, m_socket):
-         m_socket.getaddrinfo = socket.getaddrinfo
-         sock = m_socket.socket.return_value
-
---- Lib/test/test_pdb.py.org    2017-03-12 03:09:01.991856701 +0100
-+++ Lib/test/test_pdb.py        2017-03-12 03:26:17.742572869 +0100
-
-For some reason, KeyboardInterrupts do not work in the build
-environment (lack of controlling TTY?). Just change the expected
-outcome. Unfortunately, this will make it fail for users running
-`python -m test test_pdb test_pdb` interactively.
-
-@@ -928,11 +928,11 @@
+diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
+--- a/Lib/test/test_pdb.py
++++ b/Lib/test/test_pdb.py
+@@ -1150,11 +1150,11 @@ def test_pdb_issue_20766():
      > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
      -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
      (Pdb) continue
@@ -65,22 +153,100 @@ outcome. Unfortunately, this will make it fail for users running
 -    pdb 2: <built-in function default_int_handler>
 +    pdb 2: Handlers.SIG_IGN
      """
-
- class PdbTestCase(unittest.TestCase):
---- Lib/test/test_socket.py
-+++ Lib/test/test_socket.py
-@@ -802,6 +802,8 @@
+ 
+ 
+diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
+--- a/Lib/test/test_regrtest.py
++++ b/Lib/test/test_regrtest.py
+@@ -762,6 +762,7 @@ class ArgsTestCase(BaseTestCase):
+         output = self.run_tests('--fromfile', filename)
+         self.check_executed_tests(output, tests)
+ 
++    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
+     def test_interrupted(self):
+         code = TEST_INTERRUPTED
+         test = self.create_test('sigint', code=code)
+@@ -779,6 +780,7 @@ class ArgsTestCase(BaseTestCase):
+                  % (self.TESTNAME_REGEX, len(tests)))
+         self.check_line(output, regex)
+ 
++    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
+     def test_slowest_interrupted(self):
+         # Issue #25373: test --slowest with an interrupted test
+         code = TEST_INTERRUPTED
+diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
+--- a/Lib/test/test_resource.py
++++ b/Lib/test/test_resource.py
+@@ -145,6 +145,7 @@ class ResourceTest(unittest.TestCase):
+ 
+     @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
+     @support.requires_linux_version(2, 6, 36)
++    @unittest.skipIf(True, "Bug: the PermissionError is not raised")
+     def test_prlimit(self):
+         self.assertRaises(TypeError, resource.prlimit)
+         self.assertRaises(ProcessLookupError, resource.prlimit,
+diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
+--- a/Lib/test/test_shutil.py
++++ b/Lib/test/test_shutil.py
+@@ -1143,6 +1143,7 @@ class TestShutil(unittest.TestCase):
+         self.assertRaises(ValueError, make_archive, base_name, 'xxx')
+ 
+     @support.requires_zlib
++    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
+     def test_make_archive_owner_group(self):
+         # testing make_archive with owner and group, with various combinations
+         # this works even if there's not gid/uid support
+@@ -1171,6 +1172,7 @@ class TestShutil(unittest.TestCase):
+ 
+ 
+     @support.requires_zlib
++    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
+     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
+     def test_tarfile_root_owner(self):
+         root_dir, base_dir = self._create_files()
+diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
+--- a/Lib/test/test_socket.py
++++ b/Lib/test/test_socket.py
+@@ -875,6 +875,8 @@ class GeneralModuleTests(unittest.TestCase):
          if not fqhn in all_host_names:
              self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
  
 +    @unittest.skipUnless(support.is_resource_enabled('network'),
 +                         'network is not enabled')
      def test_host_resolution(self):
-         for addr in [support.HOST, '10.0.0.1', '255.255.255.255']:
+         for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
              self.assertEqual(socket.gethostbyname(addr), addr)
---- Lib/test/test_spwd.py
-+++ Lib/test/test_spwd.py
-@@ -5,8 +5,7 @@
+@@ -1004,6 +1006,8 @@ class GeneralModuleTests(unittest.TestCase):
+             self.assertWarns(DeprecationWarning, socket.ntohs, k)
+             self.assertWarns(DeprecationWarning, socket.htons, k)
+ 
++    @unittest.skipUnless(os.path.exists("/etc/services"),
++                         "getservbyname uses /etc/services, which is not in the chroot")
+     def testGetServBy(self):
+         eq = self.assertEqual
+         # Find one service that exists, then check all the related interfaces.
+@@ -1358,6 +1362,8 @@ class GeneralModuleTests(unittest.TestCase):
+             raise
+         self.assertRaises(TypeError, s.ioctl, socket.SIO_LOOPBACK_FAST_PATH, None)
+ 
++    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
++                         "getaddrinfo() will fail")
+     def testGetaddrinfo(self):
+         try:
+             socket.getaddrinfo('localhost', 80)
+@@ -1440,6 +1446,8 @@ class GeneralModuleTests(unittest.TestCase):
+         # only IP addresses are allowed
+         self.assertRaises(OSError, socket.getnameinfo, ('mail.python.org',0), 0)
+ 
++    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
++                         "getaddrinfo() will fail")
+     @unittest.skipUnless(support.is_resource_enabled('network'),
+                          'network is not enabled')
+     def test_idna(self):
+diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
+--- a/Lib/test/test_spwd.py
++++ b/Lib/test/test_spwd.py
+@@ -5,8 +5,7 @@ from test import support
  spwd = support.import_module('spwd')
  
  
@@ -90,7 +256,7 @@ outcome. Unfortunately, this will make it fail for users running
  class TestSpwdRoot(unittest.TestCase):
  
      def test_getspall(self):
-@@ -56,8 +55,7 @@
+@@ -56,8 +55,7 @@ class TestSpwdRoot(unittest.TestCase):
              self.assertRaises(TypeError, spwd.getspnam, bytes_name)
  
  
@@ -100,50 +266,54 @@ outcome. Unfortunately, this will make it fail for users running
  class TestSpwdNonRoot(unittest.TestCase):
  
      def test_getspnam_exception(self):
---- Lib/test/test_regrtest.py
-+++ Lib/test/test_regrtest.py
-@@ -700,6 +700,7 @@
-         output = self.run_tests('--fromfile', filename)
-         self.check_executed_tests(output, tests)
- 
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
-     def test_interrupted(self):
-         code = TEST_INTERRUPTED
-         test = self.create_test('sigint', code=code)
-@@ -717,6 +718,7 @@
-                  % (self.TESTNAME_REGEX, len(tests)))
-         self.check_line(output, regex)
- 
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
-     def test_slow_interrupted(self):
-         # Issue #25373: test --slowest with an interrupted test
-         code = TEST_INTERRUPTED
---- Lib/test/test_generators.py
-+++ Lib/test/test_generators.py
-@@ -29,6 +29,7 @@
-         else:
-             return "FAILED"
+diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
+--- a/Lib/test/test_tarfile.py
++++ b/Lib/test/test_tarfile.py
+@@ -2509,9 +2509,12 @@ def root_is_uid_gid_0():
+         import pwd, grp
+     except ImportError:
+         return False
+-    if pwd.getpwuid(0)[0] != 'root':
+-        return False
+-    if grp.getgrgid(0)[0] != 'root':
++    try:
++        if pwd.getpwuid(0)[0] != 'root':
++            return False
++        if grp.getgrgid(0)[0] != 'root':
++            return False
++    except KeyError:
+         return False
+     return True
  
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment')
-     def test_raise_and_yield_from(self):
-         gen = self.generator1()
-         gen.send(None)
---- Lib/test/test_normalization.py
-+++ Lib/test/test_normalization.py
-@@ -2,6 +2,7 @@
- import unittest
+diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
+--- a/Lib/test/test_threading.py
++++ b/Lib/test/test_threading.py
+@@ -1249,6 +1249,7 @@ class MiscTestCase(unittest.TestCase):
  
- from http.client import HTTPException
-+from urllib.error import URLError
- import sys
- from unicodedata import normalize, unidata_version
  
-@@ -43,6 +44,8 @@
-         except PermissionError:
-             self.skipTest(f"Permission error when downloading {TESTDATAURL} "
-                           f"into the test data directory")
-+        except URLError:
-+            self.skipTest("DNS lookups are not enabled.")
-         except (OSError, HTTPException):
-             self.fail(f"Could not retrieve {TESTDATAURL}")
+ class InterruptMainTests(unittest.TestCase):
++    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build container.')
+     def test_interrupt_main_subthread(self):
+         # Calling start_new_thread with a function that executes interrupt_main
+         # should raise KeyboardInterrupt upon completion.
+@@ -1260,6 +1261,8 @@ class InterruptMainTests(unittest.TestCase):
+             t.join()
+         t.join()
  
++
++    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build container.')
+     def test_interrupt_main_mainthread(self):
+         # Make sure that if interrupt_main is called in main thread that
+         # KeyboardInterrupt is raised instantly.
+diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
+--- a/Tools/scripts/run_tests.py
++++ b/Tools/scripts/run_tests.py
+@@ -39,7 +39,7 @@ def main(regrtest_args):
+     if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
+         args.extend(['-j', '0'])  # Use all CPU cores
+     if not any(is_resource_use_flag(arg) for arg in regrtest_args):
+-        args.extend(['-u', 'all,-largefile,-audio,-gui'])
++        args.extend(['-u', 'all,-largefile,-audio,-gui,-network'])
+     args.extend(regrtest_args)
+     print(' '.join(args))
+     if sys.platform == 'win32':
diff --git a/gnu/packages/patches/python-3-search-paths.patch b/gnu/packages/patches/python-3-search-paths.patch
index 73e3f4ccf5..5fea9c66b6 100644
--- a/gnu/packages/patches/python-3-search-paths.patch
+++ b/gnu/packages/patches/python-3-search-paths.patch
@@ -1,8 +1,8 @@
-Make sure the build system honors C_INCLUDE_PATH and LIBRARY_PATH when
+Make sure the build system honors CPATH and LIBRARY_PATH when
 looking for headers and libraries.
 
---- setup.py	2015-10-07 23:32:58.891329173 +0200
-+++ setup.py	2015-10-07 23:46:29.653349924 +0200
+--- a/setup.py	2015-10-07 23:32:58.891329173 +0200
++++ b/setup.py	2015-10-07 23:46:29.653349924 +0200
 @@ -575,8 +575,8 @@
          # if a file is found in one of those directories, it can
          # be assumed that no additional -I,-L directives are needed.
@@ -10,7 +10,7 @@ looking for headers and libraries.
 -            lib_dirs = self.compiler.library_dirs + system_lib_dirs
 -            inc_dirs = self.compiler.include_dirs + system_include_dirs
 +            lib_dirs = os.getenv('LIBRARY_PATH', '').split(os.pathsep)
-+            inc_dirs = os.getenv('C_INCLUDE_PATH', '').split(os.pathsep)
++            inc_dirs = os.getenv('CPATH', '').split(os.pathsep)
          else:
              # Add the sysroot paths. 'sysroot' is a compiler option used to
              # set the logical path of the standard system headers and
diff --git a/gnu/packages/patches/python-fix-tests.patch b/gnu/packages/patches/python-fix-tests.patch
deleted file mode 100644
index d8f69866fd..0000000000
--- a/gnu/packages/patches/python-fix-tests.patch
+++ /dev/null
@@ -1,147 +0,0 @@
-See the discussion about the issues fixed here at:
-http://bugs.python.org/issue20868 .
-
---- Lib/test/test_shutil.py     2014-03-01 03:02:36.088311000 +0100
-+++ Lib/test/test_shutil.py     2014-03-01 04:56:37.768311000 +0100
-@@ -1127,6 +1127,7 @@
-         self.assertRaises(ValueError, make_archive, base_name, 'xxx')
-
-     @support.requires_zlib
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_archive_owner_group(self):
-         # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -1155,6 +1156,7 @@
-
-
-     @support.requires_zlib
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
-     def test_tarfile_root_owner(self):
-         root_dir, base_dir = self._create_files()
---- Lib/test/test_socket.py.orig	2014-03-02 22:14:12.264311000 +0100
-+++ Lib/test/test_socket.py	2014-03-21 03:50:45.660311000 +0100
-@@ -819,6 +819,8 @@
-             self.assertRaises(OverflowError, socket.htonl, k)
-             self.assertRaises(OverflowError, socket.htons, k)
- 
-+    @unittest.skipUnless(os.path.exists("/etc/services"),
-+                         "getservbyname uses /etc/services, which is not in the chroot")
-     def testGetServBy(self):
-         eq = self.assertEqual
-         # Find one service that exists, then check all the related interfaces.
-@@ -1104,6 +1106,8 @@
-         self.assertRaises(ValueError, s.ioctl, -1, None)
-         s.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 100, 100))
- 
-+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
-+                         "getaddrinfo() will fail")
-     def testGetaddrinfo(self):
-         try:
-             socket.getaddrinfo('localhost', 80)
-@@ -1174,6 +1178,8 @@
-         # only IP addresses are allowed
-         self.assertRaises(socket.error, socket.getnameinfo, ('mail.python.org',0), 0)
- 
-+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
-+                         "getaddrinfo() will fail")
-     @unittest.skipUnless(support.is_resource_enabled('network'),
-                          'network is not enabled')
-     def test_idna(self):
---- Lib/test/_test_multiprocessing.py	2014-04-06 23:12:27.575235000 +0200
-+++ Lib/test/_test_multiprocessing.py	2014-04-06 23:13:04.827235000 +0200
-@@ -1016,6 +1016,7 @@
-         if pid is not None:
-             os.kill(pid, signal.SIGINT)
- 
-+    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
-     def test_wait_result(self):
-         if isinstance(self, ProcessesMixin) and sys.platform != 'win32':
-             pid = os.getpid()
---- Lib/ctypes/test/test_libc.py	2014-04-07 23:17:41.351235000 +0200
-+++ Lib/ctypes/test/test_libc.py	2014-04-07 23:32:18.799235000 +0200
-@@ -2,6 +2,7 @@
- 
- from ctypes import *
- import _ctypes_test
-+import platform
- 
- lib = CDLL(_ctypes_test.__file__)
- 
-@@ -17,6 +18,8 @@
-         import math
-         self.assertEqual(lib.my_sqrt(2.0), math.sqrt(2.0))
- 
-+    @unittest.skipIf(platform.machine() in ['mips64'],
-+                     "This test fails on this platform")
-     def test_qsort(self):
-         comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
-         lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
---- Lib/ctypes/test/test_callbacks.py	2014-04-07 23:15:42.835235000 +0200
-+++ Lib/ctypes/test/test_callbacks.py	2014-04-07 23:32:42.035235000 +0200
-@@ -1,6 +1,7 @@
- import unittest
- from ctypes import *
- import _ctypes_test
-+import platform
- 
- class Callbacks(unittest.TestCase):
-     functype = CFUNCTYPE
-@@ -174,6 +175,8 @@
- 
-         self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
- 
-+    @unittest.skipIf(platform.machine() in ['mips64'],
-+                     "This test fails on this platform")
-     def test_issue_8959_a(self):
-         from ctypes.util import find_library
-         libc_path = find_library("c")
---- Tools/scripts/run_tests.py.orig	2015-04-06 03:52:17.484000000 +0200
-+++ Tools/scripts/run_tests.py	2015-04-06 03:52:25.880000000 +0200
-@@ -47,7 +47,7 @@
-     if threading and not any(is_multiprocess_flag(arg) for arg in regrtest_args):
-         args.extend(['-j', '0'])  # Use all CPU cores
-     if not any(is_resource_use_flag(arg) for arg in regrtest_args):
--        args.extend(['-u', 'all,-largefile,-audio,-gui'])
-+        args.extend(['-u', 'all,-largefile,-audio,-gui,-network'])
-     args.extend(regrtest_args)
-     print(' '.join(args))
-     os.execv(sys.executable, args)
---- Lib/distutils/tests/test_archive_util.py.orig	2015-04-06 04:08:49.288000000 +0200
-+++ Lib/distutils/tests/test_archive_util.py	2015-04-06 04:09:34.396000000 +0200
-@@ -282,6 +282,7 @@
-         finally:
-             del ARCHIVE_FORMATS['xxx']
-
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_archive_owner_group(self):
-         # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -310,6 +311,7 @@
-
-     @unittest.skipUnless(ZLIB_SUPPORT, "Requires zlib")
-     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_tarfile_root_owner(self):
-         tmpdir, tmpdir2, base_name =  self._create_files()
-         old_dir = os.getcwd()
---- Lib/distutils/tests/test_sdist.py.orig	2015-04-06 04:10:05.264000000 +0200
-+++ Lib/distutils/tests/test_sdist.py	2015-04-06 04:10:21.448000000 +0200
-@@ -435,6 +435,7 @@
-                      "The tar command is not found")
-     @unittest.skipIf(find_executable('gzip') is None,
-                      "The gzip command is not found")
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_distribution_owner_group(self):
-         # now building a sdist
-         dist, cmd = self.get_cmd()
---- Lib/test/test_resource.py.orig	2015-04-06 21:30:24.708000000 +0200
-+++ Lib/test/test_resource.py	2015-04-06 23:07:27.220000000 +0200
-@@ -146,6 +146,7 @@
-
-     @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
-     @support.requires_linux_version(2, 6, 36)
-+    @unittest.skipIf(True, "Bug: the PermissionError is not raised")
-     def test_prlimit(self):
-         self.assertRaises(TypeError, resource.prlimit)
-         if os.geteuid() != 0:
diff --git a/gnu/packages/patches/python-keras-integration-test.patch b/gnu/packages/patches/python-keras-integration-test.patch
new file mode 100644
index 0000000000..aa2b1a273d
--- /dev/null
+++ b/gnu/packages/patches/python-keras-integration-test.patch
@@ -0,0 +1,19 @@
+Fix a test failure with recent versions of ... Pytest?  Python?
+
+Taken from upstream:
+https://github.com/keras-team/keras/commit/fe35050a8f18dc52304aa8da4e463eececa25240
+
+diff --git a/tests/integration_tests/applications_test.py b/tests/integration_tests/applications_test.py
+index 979f2f2abd6..6e3b57fa8e2 100644
+--- a/tests/integration_tests/applications_test.py
++++ b/tests/integration_tests/applications_test.py
+@@ -58,7 +58,8 @@ def _test_application_basic(app, last_dim=1000):
+ def _test_application_notop(app, last_dim):
+     output_shape = _get_output_shape(
+         lambda: app(weights=None, include_top=False))
+-    assert output_shape == (None, None, None, last_dim)
++    assert len(output_shape) == 4
++    assert output_shape[-1] == last_dim
+ 
+ 
+ def test_mobilenet_v2_legacy_import():
diff --git a/gnu/packages/patches/python-libxml2-utf8.patch b/gnu/packages/patches/python-libxml2-utf8.patch
new file mode 100644
index 0000000000..e39672faa1
--- /dev/null
+++ b/gnu/packages/patches/python-libxml2-utf8.patch
@@ -0,0 +1,40 @@
+This patch fixes a crash in the libxml2 bindings for Python 3.x
+that 'itstool' stumbles upon when processing UTF-8 data:
+
+  https://issues.guix.gnu.org/issue/37468
+
+Patch by Jan Matejek
+from <https://bugzilla.opensuse.org/show_bug.cgi?id=1065270>.
+
+--- libxml2-2.9.5.orig/python/libxml.c
++++ libxml2-2.9.5/python/libxml.c
+@@ -1620,6 +1620,7 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU
+     PyObject *message;
+     PyObject *result;
+     char str[1000];
++    unsigned char *ptr = (unsigned char *)str;
+ 
+ #ifdef DEBUG_ERROR
+     printf("libxml_xmlErrorFuncHandler(%p, %s, ...) called\n", ctx, msg);
+@@ -1636,12 +1637,20 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU
+ 	    str[999] = 0;
+         va_end(ap);
+ 
++#if PY_MAJOR_VERSION >= 3
++        /* Ensure the error string doesn't start at UTF8 continuation. */
++        while (*ptr && (*ptr & 0xc0) == 0x80)
++            ptr++;
++#endif
++
+         list = PyTuple_New(2);
+         PyTuple_SetItem(list, 0, libxml_xmlPythonErrorFuncCtxt);
+         Py_XINCREF(libxml_xmlPythonErrorFuncCtxt);
+-        message = libxml_charPtrConstWrap(str);
++        message = libxml_charPtrConstWrap(ptr);
+         PyTuple_SetItem(list, 1, message);
+         result = PyEval_CallObject(libxml_xmlPythonErrorFuncHandler, list);
++        /* Forget any errors caused in the error handler. */
++        PyErr_Clear();
+         Py_XDECREF(list);
+         Py_XDECREF(result);
+     }
diff --git a/gnu/packages/patches/python-pep8-stdlib-tokenize-compat.patch b/gnu/packages/patches/python-pep8-stdlib-tokenize-compat.patch
new file mode 100644
index 0000000000..f11d8f7be8
--- /dev/null
+++ b/gnu/packages/patches/python-pep8-stdlib-tokenize-compat.patch
@@ -0,0 +1,35 @@
+From 397463014fda3cdefe8d6c9d117ae16d878dc494 Mon Sep 17 00:00:00 2001
+From: Michael Hudson-Doyle <michael.hudson@canonical.com>
+Date: Tue, 25 Sep 2018 14:58:57 +1200
+Subject: [PATCH] Keep compability with stdlib tokenize.py changes
+
+https://github.com/python/cpython/commit/c4ef4896eac86a6759901c8546e26de4695a1389
+is not yet part of any release of Python but has been backported to all
+versions in Git (includeing 2.7!). It causes the tokenize.py module to
+emit a synthetic NEWLINE token for files that do not in fact end with a
+newline, which confuses pycodestyle's checks for blank lines at the end
+of a file. Fortunately the synthetic NEWLINE tokens are easy to detect
+(the token text is "").
+
+Fixes #786
+---
+ pycodestyle.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/pycodestyle.py b/pycodestyle.py
+index 0d725d27..fbc3dca3 100755
+--- a/pep8.py
++++ b/pep8.py
+@@ -258,10 +258,10 @@ def trailing_blank_lines(physical_line, lines, line_number, total_lines):
+     """
+     if line_number == total_lines:
+         stripped_last_line = physical_line.rstrip()
+-        if not stripped_last_line:
++        if physical_line and not stripped_last_line:
+             return 0, "W391 blank line at end of file"
+         if stripped_last_line == physical_line:
+-            return len(physical_line), "W292 no newline at end of file"
++            return len(lines[-1]), "W292 no newline at end of file"
+ 
+ 
+ @register_check
diff --git a/gnu/packages/patches/python-slugify-depend-on-unidecode.patch b/gnu/packages/patches/python-slugify-depend-on-unidecode.patch
index 6038f432f1..5ac749c19d 100644
--- a/gnu/packages/patches/python-slugify-depend-on-unidecode.patch
+++ b/gnu/packages/patches/python-slugify-depend-on-unidecode.patch
@@ -6,8 +6,8 @@ index 4800173..6bdd77f 100755
  author = 'Val Neekman'
  author_email = 'info@neekware.com'
  license = 'MIT'
--install_requires = ['text-unidecode==1.2']
--extras_require = {'unidecode': ['Unidecode==1.0.23']}
+-install_requires = ['text-unidecode>=1.3']
+-extras_require = {'unidecode': ['Unidecode>=1.1.1']}
 +install_requires = ['Unidecode']
  
  classifiers = [
diff --git a/gnu/packages/patches/python2-CVE-2018-1000802.patch b/gnu/packages/patches/python2-CVE-2018-1000802.patch
deleted file mode 100644
index 0d5bc77c84..0000000000
--- a/gnu/packages/patches/python2-CVE-2018-1000802.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-Fix CVE-2018-1000802:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000802
-
-Taken from upstream commit (sans NEWS):
-https://github.com/python/cpython/commit/d8b103b8b3ef9644805341216963a64098642435
-
-diff --git a/Lib/shutil.py b/Lib/shutil.py
-index 3462f7c5e9..0ab1a06f52 100644
---- a/Lib/shutil.py
-+++ b/Lib/shutil.py
-@@ -413,17 +413,21 @@ def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0,
- 
-     return archive_name
- 
--def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False):
-+def _call_external_zip(base_dir, zip_filename, verbose, dry_run, logger):
-     # XXX see if we want to keep an external call here
-     if verbose:
-         zipoptions = "-r"
-     else:
-         zipoptions = "-rq"
--    from distutils.errors import DistutilsExecError
--    from distutils.spawn import spawn
-+    cmd = ["zip", zipoptions, zip_filename, base_dir]
-+    if logger is not None:
-+        logger.info(' '.join(cmd))
-+    if dry_run:
-+        return
-+    import subprocess
-     try:
--        spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run)
--    except DistutilsExecError:
-+        subprocess.check_call(cmd)
-+    except subprocess.CalledProcessError:
-         # XXX really should distinguish between "couldn't find
-         # external 'zip' command" and "zip failed".
-         raise ExecError, \
-@@ -458,7 +462,7 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None):
-         zipfile = None
- 
-     if zipfile is None:
--        _call_external_zip(base_dir, zip_filename, verbose, dry_run)
-+        _call_external_zip(base_dir, zip_filename, verbose, dry_run, logger)
-     else:
-         if logger is not None:
-             logger.info("creating '%s' and adding '%s' to it",
diff --git a/gnu/packages/patches/python2-CVE-2018-14647.patch b/gnu/packages/patches/python2-CVE-2018-14647.patch
deleted file mode 100644
index 6226b06aca..0000000000
--- a/gnu/packages/patches/python2-CVE-2018-14647.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-Fix CVE-2018-14647:
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-14647
-https://bugs.python.org/issue34623
-
-Taken from upstream:
-https://github.com/python/cpython/commit/18b20bad75b4ff0486940fba4ec680e96e70f3a2
-
-diff --git a/Include/pyexpat.h b/Include/pyexpat.h
-index 5340ef5fa3..3fc5fa54da 100644
---- a/Include/pyexpat.h
-+++ b/Include/pyexpat.h
-@@ -3,7 +3,7 @@
- 
- /* note: you must import expat.h before importing this module! */
- 
--#define PyExpat_CAPI_MAGIC  "pyexpat.expat_CAPI 1.0"
-+#define PyExpat_CAPI_MAGIC  "pyexpat.expat_CAPI 1.1"
- #define PyExpat_CAPSULE_NAME "pyexpat.expat_CAPI"
- 
- struct PyExpat_CAPI 
-@@ -43,6 +43,8 @@ struct PyExpat_CAPI
-         XML_Parser parser, XML_UnknownEncodingHandler handler,
-         void *encodingHandlerData);
-     void (*SetUserData)(XML_Parser parser, void *userData);
-+    /* might be none for expat < 2.1.0 */
-+    int (*SetHashSalt)(XML_Parser parser, unsigned long hash_salt);
-     /* always add new stuff to the end! */
- };
- 
-diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
-index f7f992dd3a..b38e0ab329 100644
---- a/Modules/_elementtree.c
-+++ b/Modules/_elementtree.c
-@@ -2574,6 +2574,11 @@ xmlparser(PyObject* self_, PyObject* args, PyObject* kw)
-         PyErr_NoMemory();
-         return NULL;
-     }
-+    /* expat < 2.1.0 has no XML_SetHashSalt() */
-+    if (EXPAT(SetHashSalt) != NULL) {
-+        EXPAT(SetHashSalt)(self->parser,
-+                           (unsigned long)_Py_HashSecret.prefix);
-+    }
- 
-     ALLOC(sizeof(XMLParserObject), "create expatparser");
- 
-diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
-index 2b4d31293c..1f8c0d70a5 100644
---- a/Modules/pyexpat.c
-+++ b/Modules/pyexpat.c
-@@ -2042,6 +2042,11 @@ MODULE_INITFUNC(void)
-     capi.SetProcessingInstructionHandler = XML_SetProcessingInstructionHandler;
-     capi.SetUnknownEncodingHandler = XML_SetUnknownEncodingHandler;
-     capi.SetUserData = XML_SetUserData;
-+#if XML_COMBINED_VERSION >= 20100
-+    capi.SetHashSalt = XML_SetHashSalt;
-+#else
-+    capi.SetHashSalt = NULL;
-+#endif
- 
-     /* export using capsule */
-     capi_object = PyCapsule_New(&capi, PyExpat_CAPSULE_NAME, NULL);
diff --git a/gnu/packages/patches/qemu-CVE-2018-16872.patch b/gnu/packages/patches/qemu-CVE-2018-16872.patch
deleted file mode 100644
index 094e823ee4..0000000000
--- a/gnu/packages/patches/qemu-CVE-2018-16872.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-Fixes CVE-2018-16872:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-16872
-
-Patch copied from upstream source repository:
-
-https://git.qemu.org/?p=qemu.git;a=commitdiff;h=bab9df35ce73d1c8e19a37e2737717ea1c984dc1
-
-From bab9df35ce73d1c8e19a37e2737717ea1c984dc1 Mon Sep 17 00:00:00 2001
-From: Gerd Hoffmann <kraxel@redhat.com>
-Date: Thu, 13 Dec 2018 13:25:11 +0100
-Subject: [PATCH] usb-mtp: use O_NOFOLLOW and O_CLOEXEC.
-
-Open files and directories with O_NOFOLLOW to avoid symlinks attacks.
-While being at it also add O_CLOEXEC.
-
-usb-mtp only handles regular files and directories and ignores
-everything else, so users should not see a difference.
-
-Because qemu ignores symlinks, carrying out a successful symlink attack
-requires swapping an existing file or directory below rootdir for a
-symlink and winning the race against the inotify notification to qemu.
-
-Fixes: CVE-2018-16872
-Cc: Prasad J Pandit <ppandit@redhat.com>
-Cc: Bandan Das <bsd@redhat.com>
-Reported-by: Michael Hanselmann <public@hansmi.ch>
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-Reviewed-by: Michael Hanselmann <public@hansmi.ch>
-Message-id: 20181213122511.13853-1-kraxel@redhat.com
----
- hw/usb/dev-mtp.c | 13 +++++++++----
- 1 file changed, 9 insertions(+), 4 deletions(-)
-
-diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c
-index 100b7171f4..36c43b8c20 100644
---- a/hw/usb/dev-mtp.c
-+++ b/hw/usb/dev-mtp.c
-@@ -653,13 +653,18 @@ static void usb_mtp_object_readdir(MTPState *s, MTPObject *o)
- {
-     struct dirent *entry;
-     DIR *dir;
-+    int fd;
- 
-     if (o->have_children) {
-         return;
-     }
-     o->have_children = true;
- 
--    dir = opendir(o->path);
-+    fd = open(o->path, O_DIRECTORY | O_CLOEXEC | O_NOFOLLOW);
-+    if (fd < 0) {
-+        return;
-+    }
-+    dir = fdopendir(fd);
-     if (!dir) {
-         return;
-     }
-@@ -1007,7 +1012,7 @@ static MTPData *usb_mtp_get_object(MTPState *s, MTPControl *c,
- 
-     trace_usb_mtp_op_get_object(s->dev.addr, o->handle, o->path);
- 
--    d->fd = open(o->path, O_RDONLY);
-+    d->fd = open(o->path, O_RDONLY | O_CLOEXEC | O_NOFOLLOW);
-     if (d->fd == -1) {
-         usb_mtp_data_free(d);
-         return NULL;
-@@ -1031,7 +1036,7 @@ static MTPData *usb_mtp_get_partial_object(MTPState *s, MTPControl *c,
-                                         c->argv[1], c->argv[2]);
- 
-     d = usb_mtp_data_alloc(c);
--    d->fd = open(o->path, O_RDONLY);
-+    d->fd = open(o->path, O_RDONLY | O_CLOEXEC | O_NOFOLLOW);
-     if (d->fd == -1) {
-         usb_mtp_data_free(d);
-         return NULL;
-@@ -1658,7 +1663,7 @@ static void usb_mtp_write_data(MTPState *s)
-                                  0, 0, 0, 0);
-             goto done;
-         }
--        d->fd = open(path, O_CREAT | O_WRONLY, mask);
-+        d->fd = open(path, O_CREAT | O_WRONLY | O_CLOEXEC | O_NOFOLLOW, mask);
-         if (d->fd == -1) {
-             usb_mtp_queue_result(s, RES_STORE_FULL, d->trans,
-                                  0, 0, 0, 0);
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/qemu-CVE-2019-6778.patch b/gnu/packages/patches/qemu-CVE-2019-6778.patch
deleted file mode 100644
index 315f2922da..0000000000
--- a/gnu/packages/patches/qemu-CVE-2019-6778.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Fixes CVE-2019-6778:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6778
-
-Patch copied from upstream source repository:
-
-https://git.qemu.org/?p=qemu.git;a=commitdiff;h=a7104eda7dab99d0cdbd3595c211864cba415905
-
-From a7104eda7dab99d0cdbd3595c211864cba415905 Mon Sep 17 00:00:00 2001
-From: Prasad J Pandit <pjp@fedoraproject.org>
-Date: Sun, 13 Jan 2019 23:29:48 +0530
-Subject: [PATCH] slirp: check data length while emulating ident function
-
-While emulating identification protocol, tcp_emu() does not check
-available space in the 'sc_rcv->sb_data' buffer. It could lead to
-heap buffer overflow issue. Add check to avoid it.
-
-Reported-by: Kira <864786842@qq.com>
-Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
-Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
----
- slirp/tcp_subr.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
-index 4a9a5b5edc..23a841f26e 100644
---- a/slirp/tcp_subr.c
-+++ b/slirp/tcp_subr.c
-@@ -634,6 +634,11 @@ tcp_emu(struct socket *so, struct mbuf *m)
- 			socklen_t addrlen = sizeof(struct sockaddr_in);
- 			struct sbuf *so_rcv = &so->so_rcv;
- 
-+			if (m->m_len > so_rcv->sb_datalen
-+					- (so_rcv->sb_wptr - so_rcv->sb_data)) {
-+			    return 1;
-+			}
-+
- 			memcpy(so_rcv->sb_wptr, m->m_data, m->m_len);
- 			so_rcv->sb_wptr += m->m_len;
- 			so_rcv->sb_rptr += m->m_len;
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/rapidjson-gcc-compat.patch b/gnu/packages/patches/rapidjson-gcc-compat.patch
new file mode 100644
index 0000000000..b5ffc0a908
--- /dev/null
+++ b/gnu/packages/patches/rapidjson-gcc-compat.patch
@@ -0,0 +1,18 @@
+Disable -Werror=implicit-fallthrough on GCC7 and later.  Taken from upstream:
+https://github.com/Tencent/rapidjson/commit/fe19b7b6016d446722621fb407738209d1a911e8
+https://github.com/Tencent/rapidjson/commit/cba45fe9de6923b858edb0780e257b7257aa4f7b
+
+diff --git a/include/rapidjson/internal/regex.h b/include/rapidjson/internal/regex.h
+index 422a5240..d4039716 100644
+--- a/include/rapidjson/internal/regex.h
++++ b/include/rapidjson/internal/regex.h
+@@ -29,6 +29,9 @@ RAPIDJSON_DIAG_OFF(implicit-fallthrough)
+ #ifdef __GNUC__
+ RAPIDJSON_DIAG_PUSH
+ RAPIDJSON_DIAG_OFF(effc++)
++#if __GNUC__ >= 7
++RAPIDJSON_DIAG_OFF(implicit-fallthrough)
++#endif
+ #endif
+ 
+ #ifdef _MSC_VER
diff --git a/gnu/packages/patches/scribus-poppler.patch b/gnu/packages/patches/scribus-poppler.patch
deleted file mode 100644
index 9b969e4cb6..0000000000
--- a/gnu/packages/patches/scribus-poppler.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-Fix build with recent Poppler.
-
-From d867ec3c386baaed1b8e076dd70b278863411480 Mon Sep 17 00:00:00 2001
-From: Jean Ghali <jghali@libertysurf.fr>
-Date: Mon, 30 Apr 2018 09:19:33 +0000
-Subject: [PATCH] =?UTF-8?q?#15289:=20FTBFS=201.5.4=20with=20error:=20inval?=
- =?UTF-8?q?id=20conversion=20from=20=E2=80=98const=20GooString*=E2=80=99?=
- =?UTF-8?q?=20to=20=E2=80=98GooString*=E2=80=99?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-git-svn-id: svn://scribus.net/trunk/Scribus@22498 11d20701-8431-0410-a711-e3c959e3b870
----
- scribus/plugins/import/pdf/importpdf.cpp | 2 +-
- scribus/plugins/import/pdf/importpdf.h   | 2 +-
- scribus/plugins/import/pdf/slaoutput.cpp | 2 +-
- scribus/plugins/import/pdf/slaoutput.h   | 2 +-
- 4 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/scribus/plugins/import/pdf/importpdf.cpp b/scribus/plugins/import/pdf/importpdf.cpp
-index c1802861aa..d4c5a9ba49 100644
---- a/scribus/plugins/import/pdf/importpdf.cpp
-+++ b/scribus/plugins/import/pdf/importpdf.cpp
-@@ -1081,7 +1081,7 @@ QRectF PdfPlug::getCBox(int box, int pgNum)
- 	return cRect;

- }

- 

--QString PdfPlug::UnicodeParsedString(GooString *s1)

-+QString PdfPlug::UnicodeParsedString(const GooString *s1)

- {

- 	if ( !s1 || s1->getLength() == 0 )

- 		return QString();

-diff --git a/scribus/plugins/import/pdf/importpdf.h b/scribus/plugins/import/pdf/importpdf.h
-index c8c5efcd0d..5249562692 100644
---- a/scribus/plugins/import/pdf/importpdf.h
-+++ b/scribus/plugins/import/pdf/importpdf.h
-@@ -81,7 +81,7 @@ class PdfPlug : public QObject
- private:
- 	bool convert(const QString& fn);
- 	QRectF getCBox(int box, int pgNum);
--	QString UnicodeParsedString(GooString *s1);
-+	QString UnicodeParsedString(const GooString *s1);
- 	
- 	QList<PageItem*> Elements;
- 	double baseX, baseY;
-diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
-index be1815dc29..17b6357246 100644
---- a/scribus/plugins/import/pdf/slaoutput.cpp
-+++ b/scribus/plugins/import/pdf/slaoutput.cpp
-@@ -4252,7 +4252,7 @@ void SlaOutputDev::pushGroup(QString maskName, GBool forSoftMask, GBool alpha, b
- 	m_groupStack.push(gElements);

- }

- 

--QString SlaOutputDev::UnicodeParsedString(GooString *s1)

-+QString SlaOutputDev::UnicodeParsedString(const GooString *s1)

- {

- 	if ( !s1 || s1->getLength() == 0 )

- 		return QString();

-diff --git a/scribus/plugins/import/pdf/slaoutput.h b/scribus/plugins/import/pdf/slaoutput.h
-index 20e8b2d311..6698c030e0 100644
---- a/scribus/plugins/import/pdf/slaoutput.h
-+++ b/scribus/plugins/import/pdf/slaoutput.h
-@@ -266,7 +266,7 @@ class SlaOutputDev : public OutputDev
- 	int getBlendMode(GfxState *state);
- 	void applyMask(PageItem *ite);
- 	void pushGroup(QString maskName = "", GBool forSoftMask = gFalse, GBool alpha = gFalse, bool inverted = false);
--	QString UnicodeParsedString(GooString *s1);
-+	QString UnicodeParsedString(const GooString *s1);
- 	bool checkClip();
- 	bool pathIsClosed;
- 	QString CurrColorFill;
diff --git a/gnu/packages/patches/sssd-curl-compat.patch b/gnu/packages/patches/sssd-curl-compat.patch
deleted file mode 100644
index ecab737153..0000000000
--- a/gnu/packages/patches/sssd-curl-compat.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Fix build with curl >= 7.62.  Patch taken from upstream:
-
-https://pagure.io/SSSD/sssd/c/4d3841ca379afc01184453ba45ab3e75ffec60da?branch=sssd-1-16
-
-diff --git a/src/util/tev_curl.c b/src/util/tev_curl.c
-index 6a7a580..d70a429 100644
---- a/src/util/tev_curl.c
-+++ b/src/util/tev_curl.c
-@@ -97,7 +97,9 @@ static errno_t curl_code2errno(CURLcode crv)
-         return ETIMEDOUT;
-     case CURLE_SSL_ISSUER_ERROR:
-     case CURLE_SSL_CACERT_BADFILE:
-+#if LIBCURL_VERSION_NUM < 0x073e00
-     case CURLE_SSL_CACERT:
-+#endif
-     case CURLE_SSL_CERTPROBLEM:
-         return ERR_INVALID_CERT;
- 
diff --git a/gnu/packages/patches/supercollider-boost-1.70-build-fix.patch b/gnu/packages/patches/supercollider-boost-1.70-build-fix.patch
new file mode 100644
index 0000000000..073044fccb
--- /dev/null
+++ b/gnu/packages/patches/supercollider-boost-1.70-build-fix.patch
@@ -0,0 +1,28 @@
+Patches taken from https://gitweb.gentoo.org/repo/gentoo.git/tree/media-sound/supercollider/files/supercollider-3.10.2-boost-1.70.patch?id=a420618dc766bba0654dbe0ef67008fdc5e901c6 to fix supercollider build with boost 1.70.
+
+diff --git a/server/supernova/sc/sc_osc_handler.cpp b/server/supernova/sc/sc_osc_handler.cpp
+index 5116a1be87..96e937ec25 100644
+--- a/server/supernova/sc/sc_osc_handler.cpp
++++ b/server/supernova/sc/sc_osc_handler.cpp
+@@ -728,7 +728,8 @@ void sc_osc_handler::tcp_connection::handle_message() {
+ 
+ 
+ void sc_osc_handler::start_tcp_accept(void) {
+-    tcp_connection::pointer new_connection = tcp_connection::create(tcp_acceptor_.get_io_service());
++    tcp_connection::pointer new_connection =
++        tcp_connection::create((boost::asio::io_context&)tcp_acceptor_.get_executor().context());
+ 
+     tcp_acceptor_.async_accept(
+         new_connection->socket(),
+diff --git a/server/supernova/utilities/utils.hpp b/server/supernova/utilities/utils.hpp
+index 35b8ab5ad..a7c191f2d 100644
+--- a/server/supernova/utilities/utils.hpp
++++ b/server/supernova/utilities/utils.hpp
+@@ -23,6 +23,7 @@
+ 
+ #include <type_traits>
+ 
++#include <boost/checked_delete.hpp>
+ #include <boost/intrusive_ptr.hpp>
+ #include <boost/noncopyable.hpp>
+ #include <boost/detail/atomic_count.hpp>
diff --git a/gnu/packages/patches/supertux-fix-build-with-gcc5.patch b/gnu/packages/patches/supertux-fix-build-with-gcc5.patch
deleted file mode 100644
index 6393215ca1..0000000000
--- a/gnu/packages/patches/supertux-fix-build-with-gcc5.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-Taken from https://github.com/SuperTux/supertux/commit/a75317ef0a94847d9b6a7833b9c6652ef29edde3.
-This patch fixes building with gcc versions earlier than 6.
-
-From a75317ef0a94847d9b6a7833b9c6652ef29edde3 Mon Sep 17 00:00:00 2001
-From: Ingo Ruhnke <grumbel@gmail.com>
-Date: Fri, 28 Dec 2018 22:45:35 +0100
-Subject: [PATCH] Add workaround for backwards compatibilty with gcc5
-
-Fixes #1014
----
- src/video/gl/gl_painter.cpp | 11 ++++++-----
- src/video/ttf_surface.cpp   | 16 +++++++++-------
- 2 files changed, 15 insertions(+), 12 deletions(-)
-
-diff --git a/src/video/gl/gl_painter.cpp b/src/video/gl/gl_painter.cpp
-index 5e0d1e7b1e..32fb7a09b6 100644
---- a/src/video/gl/gl_painter.cpp
-+++ b/src/video/gl/gl_painter.cpp
-@@ -37,12 +37,13 @@ namespace {
- 
- inline std::tuple<GLenum, GLenum> blend_factor(Blend blend)
- {
-+  using B = std::tuple<GLenum, GLenum>;
-   switch(blend) {
--    case Blend::NONE: return {GL_ONE, GL_ZERO};
--    case Blend::BLEND: return {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};
--    case Blend::ADD: return {GL_SRC_ALPHA, GL_ONE};
--    case Blend::MOD: return {GL_DST_COLOR, GL_ZERO};
--    default: return {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};
-+    case Blend::NONE: return B(GL_ONE, GL_ZERO);
-+    case Blend::BLEND: return B(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-+    case Blend::ADD: return B(GL_SRC_ALPHA, GL_ONE);
-+    case Blend::MOD: return B(GL_DST_COLOR, GL_ZERO);
-+    default: return B(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-   }
- }
- 
-diff --git a/src/video/ttf_surface.cpp b/src/video/ttf_surface.cpp
-index 7c9505004f..b41d67b2c8 100644
---- a/src/video/ttf_surface.cpp
-+++ b/src/video/ttf_surface.cpp
-@@ -55,12 +55,13 @@ TTFSurface::create(const TTFFont& font, const std::string& text)
-     SDL_SetSurfaceColorMod(text_surface.get(), 0, 0, 0);
-     SDL_SetSurfaceBlendMode(text_surface.get(), SDL_BLENDMODE_BLEND);
- 
-+    using P = std::tuple<int, int>;
-     const std::initializer_list<std::tuple<int, int> > positions[] = {
-       {},
--      {{0, 0}},
--      {{-1, 0}, {1, 0}, {0, -1}, {0, 1}},
--      {{-2, 0}, {2, 0}, {0, -2}, {0, 2},
--       {-1, -1}, {1, -1}, {-1, 1}, {1, 1}}
-+      {P{0, 0}},
-+      {P{-1, 0}, P{1, 0}, P{0, -1}, P{0, 1}},
-+      {P{-2, 0}, P{2, 0}, P{0, -2}, P{0, 2},
-+       P{-1, -1}, P{1, -1}, P{-1, 1}, P{1, 1}}
-     };
- 
-     int shadow_size = std::min(2, font.get_shadow_size());
-@@ -77,11 +78,12 @@ TTFSurface::create(const TTFFont& font, const std::string& text)
-     SDL_SetSurfaceColorMod(text_surface.get(), 0, 0, 0);
-     SDL_SetSurfaceBlendMode(text_surface.get(), SDL_BLENDMODE_BLEND);
- 
-+    using P = std::tuple<int, int>;
-     const std::initializer_list<std::tuple<int, int> > positions[] = {
-       {},
--      {{-1, 0}, {1, 0}, {0, -1}, {0, 1}},
--      {{-2, 0}, {2, 0}, {0, -2}, {0, 2},
--       {-1, -1}, {1, -1}, {-1, 1}, {1, 1}}
-+      {P{-1, 0}, P{1, 0}, P{0, -1}, P{0, 1}},
-+      {P{-2, 0}, P{2, 0}, P{0, -2}, P{0, 2},
-+       P{-1, -1}, P{1, -1}, P{-1, 1}, P{1, 1}}
-     };
- 
-     int border = std::min(2, font.get_border());
diff --git a/gnu/packages/patches/tcc-boot-0.9.27.patch b/gnu/packages/patches/tcc-boot-0.9.27.patch
new file mode 100644
index 0000000000..6f9d365788
--- /dev/null
+++ b/gnu/packages/patches/tcc-boot-0.9.27.patch
@@ -0,0 +1,26 @@
+From 1431ba3a99582e4c3d2693ac37e57f361858affd Mon Sep 17 00:00:00 2001
+From: Jan Nieuwenhuizen <janneke@gnu.org>
+Date: Mon, 11 Jun 2018 18:39:44 +0200
+Subject: [PATCH] bootstrappable: Force static link.
+
+---
+ libtcc.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/libtcc.c b/libtcc.c
+index 3448f44..02ab850 100644
+--- a/libtcc.c
++++ b/libtcc.c
+@@ -735,6 +735,9 @@ LIBTCCAPI TCCState *tcc_new(void)
+     tcc_state = s;
+     ++nb_states;
+ 
++#if BOOTSTRAP
++    s->static_link = 1;
++#endif
+     s->alacarte_link = 1;
+     s->nocommon = 1;
+     s->warn_implicit_function_declaration = 1;
+-- 
+2.16.2
+
diff --git a/gnu/packages/patches/texinfo-perl-compat.patch b/gnu/packages/patches/texinfo-perl-compat.patch
deleted file mode 100644
index a7348fde0d..0000000000
--- a/gnu/packages/patches/texinfo-perl-compat.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Fix compatibility with newer Perls.
-
-The first patch is taken from upstream:
-https://svn.savannah.gnu.org/viewvc/texinfo?view=revision&revision=8008
-
-The second gets rid of a deprecation warning that breaks some tests.
-Taken from Fedora: <https://bugzilla.redhat.com/show_bug.cgi?id=1590308>.
-
---- trunk/tp/Texinfo/Convert/XSParagraph/xspara.c	2017/04/30 14:57:26	7765
-+++ trunk/tp/Texinfo/Convert/XSParagraph/xspara.c	2018/07/13 15:39:29	8008
-@@ -248,6 +248,11 @@
- 
-   dTHX;
- 
-+#if PERL_VERSION > 27 || (PERL_VERSION == 27 && PERL_SUBVERSION > 8)
-+  /* needed due to thread-safe locale handling in newer perls */
-+  switch_to_global_locale();
-+#endif
-+
-   if (setlocale (LC_CTYPE, "en_US.UTF-8")
-       || setlocale (LC_CTYPE, "en_US.utf8"))
-     goto success;
-@@ -320,6 +325,10 @@
-     {
- success: ;
-       free (utf8_locale);
-+#if PERL_VERSION > 27 || (PERL_VERSION == 27 && PERL_SUBVERSION > 8)
-+      /* needed due to thread-safe locale handling in newer perls */
-+      sync_locale();
-+#endif
-       /*
-       fprintf (stderr, "tried to set LC_CTYPE to UTF-8.\n");
-       fprintf (stderr, "character encoding is: %s\n",
-
-diff -up texinfo-6.5/tp/Texinfo/Parser.pm.orig texinfo-6.5/tp/Texinfo/Parser.pm
---- texinfo-6.5/tp/Texinfo/Parser.pm.orig	2018-06-12 13:40:29.356030136 +0200
-+++ texinfo-6.5/tp/Texinfo/Parser.pm	2018-06-12 13:41:28.357725639 +0200
-@@ -5478,11 +5478,11 @@ sub _parse_special_misc_command($$$$)
-     }
-   } elsif ($command eq 'clickstyle') {
-     # REMACRO
--    if ($line =~ /^\s+@([[:alnum:]][[:alnum:]\-]*)({})?\s*/) {
-+    if ($line =~ /^\s+@([[:alnum:]][[:alnum:]\-]*)(\{})?\s*/) {
-       $args = ['@'.$1];
-       $self->{'clickstyle'} = $1;
-       $remaining = $line;
--      $remaining =~ s/^\s+@([[:alnum:]][[:alnum:]\-]*)({})?\s*(\@(c|comment)((\@|\s+).*)?)?//;
-+      $remaining =~ s/^\s+@([[:alnum:]][[:alnum:]\-]*)(\{})?\s*(\@(c|comment)((\@|\s+).*)?)?//;
-       $has_comment = 1 if (defined($4));
-     } else {
-       $self->line_error (sprintf($self->__(
diff --git a/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch b/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch
index d8b9bf172a..024ff416af 100644
--- a/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch
+++ b/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch
@@ -1,23 +1,14 @@
-Fix LuaTeX compatibility with Poppler 0.72.
+Fix LuaTeX compatibility with Poppler 0.75.
 
 Upstream LuaTeX have moved from Poppler to "pplib" and thus upstream
-fixes are unavailable.  This is based on Arch Linux patches, with minor
-changes for Poppler 0.72:
-https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/texlive-bin&id=f1b424435c8fa31d9296c7a6dc17f939a8332780
+fixes are unavailable.  This is based on Archs patch, with minor
+tweaks to comply with texlive-bin-CVE-2018-17407.patch.
+https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/texlive-bin&id=418dd6f008c3d41a461353fdb60f2d73d87c58ed
 
 diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image/pdftoepdf.w
 --- a/texk/web2c/luatexdir/image/pdftoepdf.w
 +++ b/texk/web2c/luatexdir/image/pdftoepdf.w
-@@ -35,7 +35,7 @@
- 
- extern void md5(Guchar *msg, int msgLen, Guchar *digest);
- 
--static GBool isInit = gFalse;
-+static bool isInit = false;
- 
- /* Maintain AVL tree of all PDF files for embedding */
- 
-@@ -363,10 +363,10 @@ void copyReal(PDF pdf, double d)
+@@ -363,7 +363,7 @@ void copyReal(PDF pdf, double d)
  
  static void copyString(PDF pdf, GooString * string)
  {
@@ -25,11 +16,7 @@ diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image
 +    const char *p;
      unsigned char c;
      size_t i, l;
--    p = string->getCString();
-+    p = string->c_str();
-     l = (size_t) string->getLength();
-     if (pdf->cave)
-         pdf_out(pdf, ' ');
+     p = string->getCString();
 @@ -393,7 +393,7 @@ static void copyString(PDF pdf, GooString * string)
      pdf->cave = true;
  }
@@ -39,15 +26,25 @@ diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image
  {
      pdf_out(pdf, '/');
      for (; *s != 0; s++) {
-@@ -468,14 +468,14 @@ static void copyObject(PDF pdf, PdfDocument * pdf_doc, Object * obj)
-         break;
-     /*
-     case objNum:
--        GBool isNum() { return type == objInt || type == objReal; }
-+        bool isNum() { return type == objInt || type == objReal; }
-         break;
-     */
-     case objString:
+@@ -412,7 +412,7 @@ static void copyArray(PDF pdf, PdfDocument * pdf_doc, Array * array)
+     Object obj1;
+     pdf_begin_array(pdf);
+     for (i = 0, l = array->getLength(); i < l; ++i) {
+-        obj1 = array->getNF(i);
++        obj1 = array->getNF(i).copy();
+         copyObject(pdf, pdf_doc, &obj1);
+     }
+     pdf_end_array(pdf);
+@@ -425,7 +425,7 @@ static void copyDict(PDF pdf, PdfDocument * pdf_doc, Dict * dict)
+     pdf_begin_dict(pdf);
+     for (i = 0, l = dict->getLength(); i < l; ++i) {
+         copyName(pdf, dict->getKey(i));
+-        obj1 = dict->getValNF(i);
++        obj1 = dict->getValNF(i).copy();
+         copyObject(pdf, pdf_doc, &obj1);
+     }
+     pdf_end_dict(pdf);
+@@ -475,7 +475,7 @@ static void copyObject(PDF pdf, PdfDocument * pdf_doc, Object * obj)
          copyString(pdf, (GooString *)obj->getString());
          break;
      case objName:
@@ -85,31 +82,37 @@ diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image
              break;
      }
  }
-@@ -587,11 +587,11 @@ void read_pdf_info(image_dict * idict)
-     PDFRectangle *pagebox;
-     int pdf_major_version_found, pdf_minor_version_found;
-     float xsize, ysize, xorig, yorig;
--    if (isInit == gFalse) {
-+    if (isInit == false) {
-         if (!(globalParams))
-             globalParams = new GlobalParams();
--        globalParams->setErrQuiet(gFalse);
--        isInit = gTrue;
-+        globalParams->setErrQuiet(false);
-+        isInit = true;
-     }
-     if (img_type(idict) == IMG_TYPE_PDF)
-         pdf_doc = refPdfDocument(img_filepath(idict), FE_FAIL);
-@@ -966,7 +966,7 @@ void epdf_free()
-     if (PdfDocumentTree != NULL)
-         avl_destroy(PdfDocumentTree, destroyPdfDocument);
-     PdfDocumentTree = NULL;
--    if (isInit == gTrue)
-+    if (isInit == true)
-         delete globalParams;
--    isInit = gFalse;
-+    isInit = false;
- }
+@@ -788,12 +788,12 @@ void write_epdf(PDF pdf, image_dict * idict, int suppress_optional_info)
+         Now all relevant parts of the Page dictionary are copied. Metadata validity
+         check is needed(as a stream it must be indirect).
+     */
+-    obj1 = pageDict->lookupNF("Metadata");
++    obj1 = pageDict->lookupNF("Metadata").copy();
+     if (!obj1.isNull() && !obj1.isRef())
+         formatted_warning("pdf inclusion","/Metadata must be indirect object");
+     /* copy selected items in Page dictionary */
+     for (i = 0; pagedictkeys[i] != NULL; i++) {
+-        obj1 = pageDict->lookupNF(pagedictkeys[i]);
++        obj1 = pageDict->lookupNF(pagedictkeys[i]).copy();
+         if (!obj1.isNull()) {
+             pdf_add_name(pdf, pagedictkeys[i]);
+             /* preserves indirection */
+@@ -806,13 +806,13 @@ void write_epdf(PDF pdf, image_dict * idict, int suppress_optional_info)
+         PDF file, climbing up the tree until the Resources are found.
+         (This fixes a problem with Scribus 1.3.3.14.)
+     */
+-    obj1 = pageDict->lookupNF("Resources");
++    obj1 = pageDict->lookupNF("Resources").copy();
+     if (obj1.isNull()) {
+         op1 = &pagesobj1;
+         op2 = &pagesobj2;
+         *op1 = pageDict->lookup("Parent");
+         while (op1->isDict()) {
+-            obj1 = op1->dictLookupNF("Resources");
++            obj1 = op1->dictLookupNF("Resources").copy();
+             if (!obj1.isNull()) {
+                 pdf_add_name(pdf, "Resources");
+                 copyObject(pdf, pdf_doc, &obj1);
 diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lepdflib.cc
 --- a/texk/web2c/luatexdir/lua/lepdflib.cc
 +++ b/texk/web2c/luatexdir/lua/lepdflib.cc
@@ -122,15 +125,15 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep
         uout->atype = ALLOC_LEPDF;
         uout->pc = uobj->pc;
         uout->pd = uobj->pd;
-@@ -439,7 +439,7 @@ static int l_new_Object(lua_State * L)
-       break;
-     case 1:
-       if (lua_isboolean (L,1)) {
--	uout->d = new Object(lua_toboolean(L, 1)? gTrue : gFalse);
-+	uout->d = new Object(lua_toboolean(L, 1)? true : false);
- 	uout->atype = ALLOC_LEPDF;
- 	uout->pc = 0;
- 	uout->pd = NULL;
+@@ -496,7 +496,7 @@ static int l_new_Object(lua_State * L)
+ 	double numA = lua_tonumber(L,1);
+ 	double genA = lua_tonumber(L,2);
+ 	if ( ((numA)==(int)(numA)) && ((genA)==(int)(genA)) ){
+-	  uout->d = new Object((int)(numA), (int)(genA));
++	  uout->d = new Object({(int)(numA), (int)(genA)});
+ 	  uout->atype = ALLOC_LEPDF;
+ 	  uout->pc = 0;
+ 	  uout->pd = NULL;
 @@ -596,7 +596,7 @@ static int m_##in##_##function(lua_State * L)                  \
      uin = (udstruct *) luaL_checkudata(L, 1, M_##in);          \
      if (uin->pd != NULL && uin->pd->pc != uin->pc)             \
@@ -140,33 +143,15 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep
      if (o != NULL) {                                           \
          uout = new_##out##_userdata(L);                        \
          uout->d = o;                                           \
-@@ -676,7 +676,7 @@ static int m_##in##_##function(lua_State * L)                  \
-         pdfdoc_changed_error(L);                               \
-     gs = (GooString *)((in *) uin->d)->function();             \
-     if (gs != NULL)                                            \
--        lua_pushlstring(L, gs->getCString(), gs->getLength()); \
-+        lua_pushlstring(L, gs->c_str(), gs->getLength()); \
-     else                                                       \
-         lua_pushnil(L);                                        \
-     return 1;                                                  \
-@@ -911,7 +911,7 @@ static int m_Array_getString(lua_State * L)
-     if (i > 0 && i <= len) {
-         gs = new GooString();
-         if (((Array *) uin->d)->getString(i - 1, gs))
--            lua_pushlstring(L, gs->getCString(), gs->getLength());
-+            lua_pushlstring(L, gs->c_str(), gs->getLength());
-         else
-             lua_pushnil(L);
-         delete gs;
-@@ -1063,7 +1063,7 @@ static int m_Catalog_getJS(lua_State * L)
+@@ -889,7 +889,7 @@ static int m_Array_getNF(lua_State * L)
      if (i > 0 && i <= len) {
-         gs = ((Catalog *) uin->d)->getJS(i - 1);
-         if (gs != NULL)
--            lua_pushlstring(L, gs->getCString(), gs->getLength());
-+            lua_pushlstring(L, gs->c_str(), gs->getLength());
-         else
-             lua_pushnil(L);
-         delete gs;
+         uout = new_Object_userdata(L);
+         uout->d = new Object();
+-        *((Object *) uout->d) = ((Array *) uin->d)->getNF(i - 1);
++        *((Object *) uout->d) = ((Array *) uin->d)->getNF(i - 1).copy();
+         uout->atype = ALLOC_LEPDF;
+         uout->pc = uin->pc;
+         uout->pd = uin->pd;
 @@ -1125,12 +1125,12 @@ m_poppler_get_INT(Dict, getLength);
  
  static int m_Dict_add(lua_State * L)
@@ -182,36 +167,42 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep
      uobj = (udstruct *) luaL_checkudata(L, 3, M_Object);
      ((Dict *) uin->d)->add(s, std::move(*((Object *) uobj->d)));
      return 0;
-@@ -1378,7 +1378,7 @@ static int m_GooString__tostring(lua_State * L)
-     uin = (udstruct *) luaL_checkudata(L, 1, M_GooString);
-     if (uin->pd != NULL && uin->pd->pc != uin->pc)
-         pdfdoc_changed_error(L);
--    lua_pushlstring(L, ((GooString *) uin->d)->getCString(),
-+    lua_pushlstring(L, ((GooString *) uin->d)->c_str(),
-                     ((GooString *) uin->d)->getLength());
-     return 1;
- }
-@@ -1527,9 +1527,9 @@ static int m_Object_initBool(lua_State * L)
+@@ -1190,7 +1190,7 @@ static int m_Dict_lookupNF(lua_State * L)
+     s = luaL_checkstring(L, 2);
+     uout = new_Object_userdata(L);
+     uout->d = new Object();
+-    *((Object *) uout->d) = ((Dict *) uin->d)->lookupNF(s);
++    *((Object *) uout->d) = ((Dict *) uin->d)->lookupNF(s).copy();
+     uout->atype = ALLOC_LEPDF;
+     uout->pc = uin->pc;
+     uout->pd = uin->pd;
+@@ -1263,7 +1263,7 @@ static int m_Dict_getValNF(lua_State * L)
+     if (i > 0 && i <= len) {
+         uout = new_Object_userdata(L);
+         uout->d = new Object();
+-        *((Object *) uout->d) = ((Dict *) uin->d)->getValNF(i - 1);
++        *((Object *) uout->d) = ((Dict *) uin->d)->getValNF(i - 1).copy();
+         uout->atype = ALLOC_LEPDF;
+         uout->pc = uin->pc;
+         uout->pd = uin->pd;
+@@ -1653,7 +1653,7 @@ static int m_Object_initRef(lua_State * L)
          pdfdoc_changed_error(L);
-     luaL_checktype(L, 2, LUA_TBOOLEAN);
-     if (lua_toboolean(L, 2) != 0)
--        *((Object *) uin->d) = Object(gTrue);
-+        *((Object *) uin->d) = Object(true);
-     else
--        *((Object *) uin->d) = Object(gFalse);
-+        *((Object *) uin->d) = Object(false);
+     num = luaL_checkint(L, 2);
+     gen = luaL_checkint(L, 3);
+-    *((Object *) uin->d) = Object(num, gen);
++    *((Object *) uin->d) = Object({num, gen});
      return 0;
  }
  
-@@ -1814,7 +1814,7 @@ static int m_Object_getString(lua_State * L)
-         pdfdoc_changed_error(L);
-     if (((Object *) uin->d)->isString()) {
-         gs = (GooString *)((Object *) uin->d)->getString();
--        lua_pushlstring(L, gs->getCString(), gs->getLength());
-+        lua_pushlstring(L, gs->c_str(), gs->getLength());
-     } else
-         lua_pushnil(L);
-     return 1;
+@@ -2011,7 +2011,7 @@ static int m_Object_arrayGetNF(lua_State * L)
+         if (i > 0 && i <= len) {
+             uout = new_Object_userdata(L);
+             uout->d = new Object();
+-            *((Object *) uout->d) = ((Object *) uin->d)->arrayGetNF(i - 1);
++            *((Object *) uout->d) = ((Object *) uin->d)->arrayGetNF(i - 1).copy();
+             uout->atype = ALLOC_LEPDF;
+             uout->pc = uin->pc;
+             uout->pd = uin->pd;
 @@ -2051,7 +2051,7 @@ static int m_Object_dictAdd(lua_State * L)
          pdfdoc_changed_error(L);
      if (!((Object *) uin->d)->isDict())
@@ -221,30 +212,42 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep
      return 0;
  }
  
-@@ -2470,9 +2470,9 @@ static int m_PDFDoc_getFileName(lua_State * L)
+@@ -2104,7 +2104,7 @@ static int m_Object_dictLookupNF(lua_State * L)
+     if (((Object *) uin->d)->isDict()) {
+         uout = new_Object_userdata(L);
+         uout->d = new Object();
+-        *((Object *) uout->d) = ((Object *) uin->d)->dictLookupNF(s);
++        *((Object *) uout->d) = ((Object *) uin->d)->dictLookupNF(s).copy();
+         uout->atype = ALLOC_LEPDF;
+         uout->pc = uin->pc;
+         uout->pd = uin->pd;
+@@ -2169,7 +2169,7 @@ static int m_Object_dictGetValNF(lua_State * L)
+         if (i > 0 && i <= len) {
+             uout = new_Object_userdata(L);
+             uout->d = new Object();
+-            *((Object *) uout->d) = ((Object *) uin->d)->dictGetValNF(i - 1);
++            *((Object *) uout->d) = ((Object *) uin->d)->dictGetValNF(i - 1).copy();
+             uout->atype = ALLOC_LEPDF;
+             uout->pc = uin->pc;
+             uout->pd = uin->pd;
+@@ -2470,7 +2470,7 @@ static int m_PDFDoc_getFileName(lua_State * L)
      uin = (udstruct *) luaL_checkudata(L, 1, M_PDFDoc);
      if (uin->pd != NULL && uin->pd->pc != uin->pc)
          pdfdoc_changed_error(L);
 -    gs = ((PdfDocument *) uin->d)->doc->getFileName();
 +    gs = (GooString *) ((PdfDocument *) uin->d)->doc->getFileName();
      if (gs != NULL)
--        lua_pushlstring(L, gs->getCString(), gs->getLength());
-+        lua_pushlstring(L, gs->c_str(), gs->getLength());
+         lua_pushlstring(L, gs->getCString(), gs->getLength());
      else
-         lua_pushnil(L);
-     return 1;
-@@ -2559,9 +2559,9 @@ static int m_PDFDoc_readMetadata(lua_State * L)
+@@ -2559,7 +2559,7 @@ static int m_PDFDoc_readMetadata(lua_State * L)
      if (uin->pd != NULL && uin->pd->pc != uin->pc)
          pdfdoc_changed_error(L);
      if (((PdfDocument *) uin->d)->doc->getCatalog()->isOk()) {
 -        gs = ((PdfDocument *) uin->d)->doc->readMetadata();
 +        gs = (GooString *) ((PdfDocument *) uin->d)->doc->readMetadata();
          if (gs != NULL)
--            lua_pushlstring(L, gs->getCString(), gs->getLength());
-+            lua_pushlstring(L, gs->c_str(), gs->getLength());
+             lua_pushlstring(L, gs->getCString(), gs->getLength());
          else
-             lua_pushnil(L);
-     } else
 @@ -2577,7 +2577,7 @@ static int m_PDFDoc_getStructTreeRoot(lua_State * L)
      if (uin->pd != NULL && uin->pd->pc != uin->pc)
          pdfdoc_changed_error(L);
@@ -254,65 +257,37 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep
          uout = new_StructTreeRoot_userdata(L);
          uout->d = obj;
          uout->pc = uin->pc;
-@@ -3038,12 +3038,12 @@ m_poppler_get_BOOL(Attribute, isHidden);
- 
- static int m_Attribute_setHidden(lua_State * L)
- {
--    GBool i;
-+    bool i;
-     udstruct *uin;
-     uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
-     if (uin->pd != NULL && uin->pd->pc != uin->pc)
+--- texlive-source/texk/web2c/luatexdir/lua/lepdflib.cc.orig    2019-04-24 09:41:05.090522664 +0000
++++ texlive-source/texk/web2c/luatexdir/lua/lepdflib.cc 2019-04-24 09:43:37.119184926 +0000
+@@ -994,7 +994,8 @@
          pdfdoc_changed_error(L);
--    i = (GBool) lua_toboolean(L, 2);
-+    i = (bool) lua_toboolean(L, 2);
-     ((Attribute *) uin->d)->setHidden(i);
-     return 0;
- }
-@@ -3180,7 +3180,7 @@ static int m_StructElement_getParentRef(lua_State * L)
- // Ref is false if the C++ functione return false
- static int m_StructElement_getPageRef(lua_State * L)
- {
--    GBool b;
-+    bool b;
-     Ref *r;
-     udstruct *uin, *uout;
-     uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
-@@ -3226,16 +3226,16 @@ static int m_StructElement_setRevision(lua_State * L)
- 
- static int m_StructElement_getText(lua_State * L)
- {
--    GBool i;
-+    bool i;
-     GooString *gs;
-     udstruct *uin;
-     uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
-     if (uin->pd != NULL && uin->pd->pc != uin->pc)
-         pdfdoc_changed_error(L);
--    i = (GBool) lua_toboolean(L, 2);
-+    i = (bool) lua_toboolean(L, 2);
-     gs =  ((StructElement *) uin->d)->getText(i);
-     if (gs != NULL)
--        lua_pushlstring(L, gs->getCString(), gs->getLength());
-+        lua_pushlstring(L, gs->c_str(), gs->getLength());
+     num = luaL_checkint(L, 2);
+     gen = luaL_checkint(L, 3);
+-    i = ((Catalog *) uin->d)->findPage(num, gen);
++    Ref numgen = {num, gen};
++    i = ((Catalog *) uin->d)->findPage(numgen);
+     if (i > 0)
+         lua_pushinteger(L, i);
      else
-         lua_pushnil(L);
-     return 1;
-@@ -3321,7 +3321,7 @@ static int m_StructElement_findAttribute(lua_State * L)
- {
-     Attribute::Type t;
-     Attribute::Owner o;
--    GBool g;
-+    bool g;
-     udstruct *uin, *uout;
-     const Attribute *a;
-     uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
-@@ -3329,7 +3329,7 @@ static int m_StructElement_findAttribute(lua_State * L)
+@@ -2596,8 +2597,9 @@
          pdfdoc_changed_error(L);
-     t = (Attribute::Type) luaL_checkint(L,1);
-     o = (Attribute::Owner) luaL_checkint(L,2);
--    g = (GBool) lua_toboolean(L, 3);
-+    g = (bool) lua_toboolean(L, 3);
-     a = ((StructElement *) uin->d)->findAttribute(t,g,o);
- 
-     if (a!=NULL){
+     num = luaL_checkint(L, 2);
+     gen = luaL_checkint(L, 3);
++    Ref numgen = {num, gen};
+     if (((PdfDocument *) uin->d)->doc->getCatalog()->isOk()) {
+-        i = ((PdfDocument *) uin->d)->doc->findPage(num, gen);
++        i = ((PdfDocument *) uin->d)->doc->findPage(numgen);
+         if (i > 0)
+             lua_pushinteger(L, i);
+         else
+--- texlive-source/texk/web2c/luatexdir/image/pdftoepdf.w.orig  2019-04-24 09:56:38.406498975 +0000
++++ texlive-source/texk/web2c/luatexdir/image/pdftoepdf.w       2019-04-24 09:56:57.020081327 +0000
+@@ -630,7 +630,7 @@
+         if (link == NULL || !link->isOk())
+             formatted_error("pdf inclusion","invalid destination '%s'",img_pagename(idict));
+         Ref ref = link->getPageRef();
+-        img_pagenum(idict) = catalog->findPage(ref.num, ref.gen);
++        img_pagenum(idict) = catalog->findPage(ref);
+         if (img_pagenum(idict) == 0)
+             formatted_error("pdf inclusion","destination is not a page '%s'",img_pagename(idict));
+         delete link;
diff --git a/gnu/packages/patches/tipp10-fix-compiling.patch b/gnu/packages/patches/tipp10-fix-compiling.patch
index 4c206d4d83..3a34a98b22 100644
--- a/gnu/packages/patches/tipp10-fix-compiling.patch
+++ b/gnu/packages/patches/tipp10-fix-compiling.patch
@@ -204,8 +204,7 @@ https://sources.debian.net/data/main/t/tipp10/2.1.0-2/debian/patches/0001-FixCom
  Name=TIPP10
  Comment=Touch Typing Tutor
  Comment[de]=10-Finger-Schreibtrainer
--Exec=tipp10
-+Exec=/usr/bin/tipp10
+ Exec=tipp10
  Icon=tipp10.png
  Terminal=false
  Type=Application
diff --git a/gnu/packages/patches/twinkle-include-qregexpvalidator.patch b/gnu/packages/patches/twinkle-include-qregexpvalidator.patch
deleted file mode 100755
index 4096cc8712..0000000000
--- a/gnu/packages/patches/twinkle-include-qregexpvalidator.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-Copied from upstream:
-
-https://github.com/LubosD/twinkle/commit/4b42755619011c117a76bdf98e417ebedc47e319
-
-From 4b42755619011c117a76bdf98e417ebedc47e319 Mon Sep 17 00:00:00 2001
-From: Michal Kubecek <mkubecek@suse.cz>
-Date: Wed, 6 Jun 2018 10:07:21 +0200
-Subject: [PATCH] Include <QRegExpValidator> explicitly
-
-Since Qt 5.11, generated ui_getprofilename.h no longer includes QHeaderView
-which breaks the chain that included qvalidator.h in getprofilename.cpp.
-As it feels rather fragile to rely on such indirect includes, let's include
-<QRegExpValidator> explicitly in each file using QRegExpValidator class.
----
- src/gui/diamondcardprofileform.cpp | 1 +
- src/gui/getprofilenameform.cpp     | 2 +-
- src/gui/inviteform.cpp             | 1 +
- src/gui/mphoneform.cpp             | 1 +
- src/gui/numberconversionform.cpp   | 1 +
- src/gui/syssettingsform.cpp        | 1 +
- src/gui/userprofileform.cpp        | 1 +
- src/gui/wizardform.cpp             | 1 +
- 8 files changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/src/gui/diamondcardprofileform.cpp b/src/gui/diamondcardprofileform.cpp
-index 6656909..517180b 100644
---- a/src/gui/diamondcardprofileform.cpp
-+++ b/src/gui/diamondcardprofileform.cpp
-@@ -21,6 +21,7 @@
- 
- #include <QRegExp>
- #include <QValidator>
-+#include <QRegExpValidator>
- #include "gui.h"
- #include "diamondcard.h"
- #include "getprofilenameform.h"
-diff --git a/src/gui/getprofilenameform.cpp b/src/gui/getprofilenameform.cpp
-index 1319e1d..89c715e 100644
---- a/src/gui/getprofilenameform.cpp
-+++ b/src/gui/getprofilenameform.cpp
-@@ -1,7 +1,7 @@
- #include "getprofilenameform.h"
--
- #include <QDir>
- #include <QMessageBox>
-+#include <QRegExpValidator>
- #include "user.h"
- #include "protocol.h"
- 
-diff --git a/src/gui/inviteform.cpp b/src/gui/inviteform.cpp
-index 433fb22..2a5b68d 100644
---- a/src/gui/inviteform.cpp
-+++ b/src/gui/inviteform.cpp
-@@ -7,6 +7,7 @@
- #include "sys_settings.h"
- #include <QRegExp>
- #include <QValidator>
-+#include <QRegExpValidator>
- 
- /*
-     Copyright (C) 2005-2009  Michel de Boer <michel@twinklephone.com>
-diff --git a/src/gui/mphoneform.cpp b/src/gui/mphoneform.cpp
-index 260fda7..c4e3c1d 100644
---- a/src/gui/mphoneform.cpp
-+++ b/src/gui/mphoneform.cpp
-@@ -54,6 +54,7 @@
- #include <QRegExp>
- #include <QValidator>
- #include <QSettings>
-+#include <QRegExpValidator>
- #include "buddyform.h"
- #include "diamondcardprofileform.h"
- #include "osd.h"
-diff --git a/src/gui/numberconversionform.cpp b/src/gui/numberconversionform.cpp
-index f8ae64c..8481a9b 100644
---- a/src/gui/numberconversionform.cpp
-+++ b/src/gui/numberconversionform.cpp
-@@ -1,5 +1,6 @@
- #include "numberconversionform.h"
- 
-+#include <QRegExpValidator>
- #include "gui.h"
- 
- /*
-diff --git a/src/gui/syssettingsform.cpp b/src/gui/syssettingsform.cpp
-index 216af54..355df59 100644
---- a/src/gui/syssettingsform.cpp
-+++ b/src/gui/syssettingsform.cpp
-@@ -28,6 +28,7 @@
- #include "twinkle_config.h"
- #include <QRegExp>
- #include <QValidator>
-+#include <QRegExpValidator>
- #include "syssettingsform.h"
- /*
-  *  Constructs a SysSettingsForm as a child of 'parent', with the
-diff --git a/src/gui/userprofileform.cpp b/src/gui/userprofileform.cpp
-index 28700a6..9ed9209 100644
---- a/src/gui/userprofileform.cpp
-+++ b/src/gui/userprofileform.cpp
-@@ -31,6 +31,7 @@
- #include <QStringList>
- #include "twinkle_config.h"
- #include <QListWidget>
-+#include <QRegExpValidator>
- #include "numberconversionform.h"
- #include "util.h"
- #include "userprofileform.h"
-diff --git a/src/gui/wizardform.cpp b/src/gui/wizardform.cpp
-index 777aa12..f925875 100644
---- a/src/gui/wizardform.cpp
-+++ b/src/gui/wizardform.cpp
-@@ -23,6 +23,7 @@
- #include <QTextStream>
- #include "gui.h"
- #include <QFile>
-+#include <QRegExpValidator>
- #include "wizardform.h"
- 
- #define PROV_NONE	QT_TRANSLATE_NOOP("WizardForm", "None (direct IP to IP calls)")
--- 
-2.17.0
-
diff --git a/gnu/packages/patches/util-linux-tests.patch b/gnu/packages/patches/util-linux-tests.patch
index bb5be66515..ec1671f224 100644
--- a/gnu/packages/patches/util-linux-tests.patch
+++ b/gnu/packages/patches/util-linux-tests.patch
@@ -2,6 +2,8 @@ This test checks whether 'root' is successfully translated to UID/GID 0,
 using 'getpwnam' in libmount.  This doesn't work in the chroot because
 /etc/passwd doesn't contain an entry for 'root' so skip it.
 
+The second test requires that '/sys/dev/block' is present, which is not
+the case inside the build container.
 
 --- util-linux-2.25.2/tests/ts/libmount/optstr	2015-01-23 13:58:41.181151194 +0100
 +++ util-linux-2.25.2/tests/ts/libmount/optstr	2015-01-23 13:58:42.829161716 +0100
@@ -16,3 +18,14 @@ using 'getpwnam' in libmount.  This doesn't work in the chroot because
  ts_init_subtest "deduplicate"
  ts_run $TESTPROG --dedup bbb,ccc,AAA,xxx,AAA=a,AAA=bbb,ddd,AAA=ccc,fff=eee AAA &> $TS_OUTPUT
  ts_finalize_subtest
+--- a/tests/ts/lsblk/lsblk	2019-03-11 21:08:23.734387391 +0100
++++ b/tests/ts/lsblk/lsblk	2019-03-11 21:12:43.635473111 +0100
+@@ -22,6 +22,8 @@
+ 
+ ts_init "$*"
+ 
++ts_skip "/sys/dev/block is not available"
++
+ ts_check_test_command "$TS_CMD_LSBLK"
+ ts_check_prog xz
+ ts_check_prog tar
diff --git a/gnu/packages/patches/weechat-python.patch b/gnu/packages/patches/weechat-python.patch
deleted file mode 100644
index 8182636ecb..0000000000
--- a/gnu/packages/patches/weechat-python.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Get Python LDFLAGS from 'pkg-config'.
-
-The other approach is more complex and gets it wrong: it returns
-"-L/path/to/python/lib/python-2.7.10/lib/python2.7/config -lpython -lwhatever";
-since that config/ sub-directory contains libpython2.7.a, we end up
-statically linking Python in Weechat's python.so, which we do not want.
-
---- weechat-1.3/configure.ac	2015-08-16 08:27:07.000000000 +0200
-+++ weechat-1.3/configure.ac	2015-11-29 18:18:52.975197048 +0100
-@@ -535,29 +535,7 @@ if test "x$enable_python" = "xyes" ; the
-             if test -r "$PYTHON_INCLUDE/Python.h"; then
-                 PYTHON_CFLAGS="-I$PYTHON_INCLUDE"
-                 AC_MSG_RESULT(found)
--                PYTHON_LIB=`$PYTHON -c "import sys, distutils.sysconfig; sys.stdout.write(distutils.sysconfig.get_config_var('LIBPL'))"`
--                PYTHON_LFLAGS="-lpython$PYTHON_VERSION "`$PYTHON -c "import sys, distutils.sysconfig; sys.stdout.write(distutils.sysconfig.get_config_var('LIBS')+' '+distutils.sysconfig.get_config_var('SYSLIBS')+' '+distutils.sysconfig.get_config_var('LINKFORSHARED'))"`
--                AC_MSG_CHECKING(for Python library)
--                if test -r "$PYTHON_LIB/libpython$PYTHON_VERSION.so"; then
--                   PYTHON_LFLAGS="-L$PYTHON_LIB $PYTHON_LFLAGS"
--                   AC_MSG_RESULT(found)
--                elif test -r "$PYTHON_LIB/libpython$PYTHON_VERSION.a"; then
--                   PYTHON_LFLAGS="-L$PYTHON_LIB $PYTHON_LFLAGS"
--                   AC_MSG_RESULT(found)
--                elif test -r "$PYTHON_LIB/libpython$PYTHON_VERSION.dll.a"; then
--                   PYTHON_LFLAGS="-L$PYTHON_LIB $PYTHON_LFLAGS"
--                   AC_MSG_RESULT(found)
--                elif test -r "$PYTHON_SYSPREFIX/lib/libpython$PYTHON_VERSION.so"; then
--                   PYTHON_LFLAGS="-L$PYTHON_SYSPREFIX/lib/ $PYTHON_LFLAGS"
--                   AC_MSG_RESULT(found)
--                else
--                    AC_MSG_WARN([
--*** Python library couldn't be found on your system.
--*** Try to install it with your software package manager.
--*** WeeChat will be built without Python support.])
--                    enable_python="no"
--                    not_found="$not_found python"
--                fi
-+                PYTHON_LFLAGS=`pkg-config python2 --libs`
-             else
-                 AC_MSG_WARN([
- *** Python header files couldn't be found on your system.
diff --git a/gnu/packages/patches/xfce4-session-fix-xflock4.patch b/gnu/packages/patches/xfce4-session-fix-xflock4.patch
deleted file mode 100644
index 74769e4257..0000000000
--- a/gnu/packages/patches/xfce4-session-fix-xflock4.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From cbb9c769316b4d32956a2c78aa01a38b473f0cfc Mon Sep 17 00:00:00 2001
-From: David Thompson <dthompson2@worcester.edu>
-Date: Fri, 30 Oct 2015 08:30:43 -0400
-Subject: [PATCH] xflock4: Do not override PATH with hardcoded value.
-
-The PATH "/bin:/usr/bin" may not be a valid search path on the user's
-machine.  The screen locking program may be in /usr/local/bin or
-elsewhere.  Distros that do not conform to the FHS, such as GuixSD and
-NixOS, will not have their executables in either location.  Thus, we
-simply leave PATH alone.
----
- scripts/xflock4 | 3 ---
- 1 file changed, 3 deletions(-)
-
-diff --git a/scripts/xflock4 b/scripts/xflock4
-index ec4d05d..e7981ac 100644
---- a/scripts/xflock4
-+++ b/scripts/xflock4
-@@ -21,9 +21,6 @@
- #  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- #
- 
--PATH=/bin:/usr/bin
--export PATH
--
- # Lock by xscreensaver or gnome-screensaver, if a respective daemon is running
- for lock_cmd in \
-     "xscreensaver-command -lock" \
--- 
-2.5.0
-