summaryrefslogtreecommitdiff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorLiliana Marie Prikler <liliana.prikler@gmail.com>2024-03-02 08:07:11 +0100
committerLiliana Marie Prikler <liliana.prikler@gmail.com>2024-03-02 08:07:11 +0100
commit3d4fc910f73220f47e5f2459853333a7c83c5d1d (patch)
treed3178f93b78b3629dc7067cef69cf2a95490966d /gnu/packages/patches
parent9160cccd767cdfa55f7a460750c6b0f7544c12eb (diff)
parent4a0549be52f3f46fbce61342d8de30f7b83130c5 (diff)
Merge branch 'master' into emacs-team
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/arpack-ng-propagate-rng-state.patch523
-rw-r--r--gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch110
-rw-r--r--gnu/packages/patches/bind-re-add-attr-constructor-priority.patch57
-rw-r--r--gnu/packages/patches/converseen-hide-non-free-pointers.patch147
-rw-r--r--gnu/packages/patches/coq-fix-envvars.patch53
-rw-r--r--gnu/packages/patches/dynaconf-unvendor-deps.patch172
-rw-r--r--gnu/packages/patches/emacs-yasnippet-fix-tests.patch127
-rw-r--r--gnu/packages/patches/git-filter-repo-generate-doc.patch88
-rw-r--r--gnu/packages/patches/go-github-com-skip2-go-qrcode-fix-tests.patch37
-rw-r--r--gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch78
-rw-r--r--gnu/packages/patches/i3status-rust-enable-unstable-features.patch20
-rw-r--r--gnu/packages/patches/libgeotiff-fix-tests-on-i386.patch35
-rw-r--r--gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch51
-rw-r--r--gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch40
-rw-r--r--gnu/packages/patches/librime-fix-build-with-gcc10.patch41
-rw-r--r--gnu/packages/patches/lugaru-fix-sound.patch32
-rw-r--r--gnu/packages/patches/maturin-no-cross-compile.patch20
-rw-r--r--gnu/packages/patches/notmuch-emacs-test-output.patch89
-rw-r--r--gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch52
-rw-r--r--gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch133
-rw-r--r--gnu/packages/patches/ocaml-dose3-add-unix-dependency.patch25
-rw-r--r--gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch9
-rw-r--r--gnu/packages/patches/python-flint-includes.patch131
-rw-r--r--gnu/packages/patches/python-telingo-fix-comparison.patch19
-rw-r--r--gnu/packages/patches/r-sapa-lapack.patch23
-rw-r--r--gnu/packages/patches/r-sgloptim.patch53
-rw-r--r--gnu/packages/patches/range-v3-build-with-gcc10.patch122
-rw-r--r--gnu/packages/patches/rdkit-unbundle-external-dependencies.patch208
-rw-r--r--gnu/packages/patches/restartd-update-robust.patch295
-rw-r--r--gnu/packages/patches/rust-cargo-edit-remove-ureq.patch33
-rw-r--r--gnu/packages/patches/rust-ring-0.16-missing-files.patch2293
-rw-r--r--gnu/packages/patches/rust-ring-0.16-test-files.patch54
-rw-r--r--gnu/packages/patches/rust-ring-0.17-ring-core.patch496
-rw-r--r--gnu/packages/patches/rust-rspec-1-remove-clippy.patch16
-rw-r--r--gnu/packages/patches/rust-trash-2-update-windows.patch132
-rw-r--r--gnu/packages/patches/rustc-1.54.0-src.patch237
-rw-r--r--gnu/packages/patches/s7-flint-3.patch31
-rw-r--r--gnu/packages/patches/sdcc-disable-non-free-code.patch244
-rw-r--r--gnu/packages/patches/spdlog-fix-tests.patch26
-rw-r--r--gnu/packages/patches/tinydir-fix-cbehave-test.patch16
-rw-r--r--gnu/packages/patches/wlroots-hwdata-fallback.patch46
41 files changed, 2185 insertions, 4229 deletions
diff --git a/gnu/packages/patches/arpack-ng-propagate-rng-state.patch b/gnu/packages/patches/arpack-ng-propagate-rng-state.patch
deleted file mode 100644
index 4466bb8e50..0000000000
--- a/gnu/packages/patches/arpack-ng-propagate-rng-state.patch
+++ /dev/null
@@ -1,523 +0,0 @@
-Fix a bug that manifests while running the test suite of 'python-igraph':
-
- https://github.com/opencollab/arpack-ng/issues/401
- https://github.com/opencollab/arpack-ng/pull/414
-
-From d885b7be4ecdc9c1496f2d6f256f6c0d34962459 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Szabolcs=20Horva=CC=81t?= <szhorvat@gmail.com>
-Date: Sun, 9 Apr 2023 16:36:35 +0200
-Subject: [PATCH] fix: ensure that LAPACK RNG state is propagated
-
- - fixes #401, #410, #411
- - restores 'inits' variable removed in ce2e69a849da1d10dad5d6d3ec4db6120b3ecf50, ensuring that the RNG state is propagated
- - reverts e0d67054f573da351f12a226f7c7cc65a690ef3d to ensure that seed is different on each parallel thread
- - updates seed initialization of parallel pdgetv0/psgetv0 so that they match that of pzgetv0/pcgetv0
----
- PARPACK/SRC/MPI/pcgetv0.f | 48 +++++++++++++++++++++++----------------
- PARPACK/SRC/MPI/pdgetv0.f | 40 ++++++++++++++++++++++++++------
- PARPACK/SRC/MPI/psgetv0.f | 43 ++++++++++++++++++++++++++---------
- PARPACK/SRC/MPI/pzgetv0.f | 48 +++++++++++++++++++++++----------------
- SRC/cgetv0.f | 21 ++++++++++++-----
- SRC/dgetv0.f | 21 ++++++++++++-----
- SRC/sgetv0.f | 21 ++++++++++++-----
- SRC/zgetv0.f | 21 ++++++++++++-----
- 8 files changed, 183 insertions(+), 80 deletions(-)
-
-diff --git a/PARPACK/SRC/MPI/pcgetv0.f b/PARPACK/SRC/MPI/pcgetv0.f
-index 59e3d1658..24fe8a0f1 100644
---- a/PARPACK/SRC/MPI/pcgetv0.f
-+++ b/PARPACK/SRC/MPI/pcgetv0.f
-@@ -176,13 +176,13 @@ subroutine pcgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj, myid, igen
- Real
- & rnorm0
- Complex
- & cnorm, cnorm2
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- Complex
- & cnorm_buf, buf2(1)
-@@ -203,6 +203,12 @@ subroutine pcgetv0
- & ccdotc
- external ccdotc, pscnorm2, slapy2
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -213,26 +219,30 @@ subroutine pcgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-+ if (inits) then
- c
--c %-----------------------------------%
--c | Generate a seed on each processor |
--c | using process id (myid). |
--c | Note: the seed must be between 1 |
--c | and 4095. iseed(4) must be odd. |
--c %-----------------------------------%
-+c %-----------------------------------%
-+c | Generate a seed on each processor |
-+c | using process id (myid). |
-+c | Note: the seed must be between 1 |
-+c | and 4095. iseed(4) must be odd. |
-+c %-----------------------------------%
- c
-- call MPI_COMM_RANK(comm, myid, ierr)
-- igen = 1000 + 2*myid + 1
-- if (igen .gt. 4095) then
-- write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-- end if
-+ call MPI_COMM_RANK(comm, myid, ierr)
-+ igen = 1000 + 2*myid + 1
-+ if (igen .gt. 4095) then
-+ write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-+ end if
-+c
-+ iseed(1) = igen/1000
-+ igen = mod(igen,1000)
-+ iseed(2) = igen/100
-+ igen = mod(igen,100)
-+ iseed(3) = igen/10
-+ iseed(4) = mod(igen,10)
- c
-- iseed(1) = igen/1000
-- igen = mod(igen,1000)
-- iseed(2) = igen/100
-- igen = mod(igen,100)
-- iseed(3) = igen/10
-- iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/PARPACK/SRC/MPI/pdgetv0.f b/PARPACK/SRC/MPI/pdgetv0.f
-index 0f348b820..5a1956997 100644
---- a/PARPACK/SRC/MPI/pdgetv0.f
-+++ b/PARPACK/SRC/MPI/pdgetv0.f
-@@ -177,11 +177,11 @@ subroutine pdgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-- integer idist, iseed(4), iter, msglvl, jj
-+ logical first, inits, orth
-+ integer idist, iseed(4), iter, msglvl, jj, myid, igen
- Double precision
- & rnorm0, buf2(1)
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- Double precision
- & rnorm_buf
-@@ -206,6 +206,12 @@ subroutine pdgetv0
- c
- intrinsic abs, sqrt
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -216,10 +222,30 @@ subroutine pdgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+c
-+c %-----------------------------------%
-+c | Generate a seed on each processor |
-+c | using process id (myid). |
-+c | Note: the seed must be between 1 |
-+c | and 4095. iseed(4) must be odd. |
-+c %-----------------------------------%
-+c
-+ call MPI_COMM_RANK(comm, myid, ierr)
-+ igen = 1000 + 2*myid + 1
-+ if (igen .gt. 4095) then
-+ write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-+ end if
-+c
-+ iseed(1) = igen/1000
-+ igen = mod(igen,1000)
-+ iseed(2) = igen/100
-+ igen = mod(igen,100)
-+ iseed(3) = igen/10
-+ iseed(4) = mod(igen,10)
-+c
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/PARPACK/SRC/MPI/psgetv0.f b/PARPACK/SRC/MPI/psgetv0.f
-index d79a513b2..078e4fa8c 100644
---- a/PARPACK/SRC/MPI/psgetv0.f
-+++ b/PARPACK/SRC/MPI/psgetv0.f
-@@ -177,11 +177,11 @@ subroutine psgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-- integer idist, iseed(4), iter, msglvl, jj
-+ logical first, inits, orth
-+ integer idist, iseed(4), iter, msglvl, jj, myid, igen
- Real
- & rnorm0
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- Real
- & rnorm_buf
-@@ -206,20 +206,41 @@ subroutine psgetv0
- c
- intrinsic abs, sqrt
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
- c
- c
--c %-----------------------------------%
--c | Initialize the seed of the LAPACK |
--c | random number generator |
--c %-----------------------------------%
-+ if (inits) then
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+c %-----------------------------------%
-+c | Generate a seed on each processor |
-+c | using process id (myid). |
-+c | Note: the seed must be between 1 |
-+c | and 4095. iseed(4) must be odd. |
-+c %-----------------------------------%
-+c
-+ call MPI_COMM_RANK(comm, myid, ierr)
-+ igen = 1000 + 2*myid + 1
-+ if (igen .gt. 4095) then
-+ write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-+ end if
-+c
-+ iseed(1) = igen/1000
-+ igen = mod(igen,1000)
-+ iseed(2) = igen/100
-+ igen = mod(igen,100)
-+ iseed(3) = igen/10
-+ iseed(4) = mod(igen,10)
-+c
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/PARPACK/SRC/MPI/pzgetv0.f b/PARPACK/SRC/MPI/pzgetv0.f
-index 731fb319f..94fb705f3 100644
---- a/PARPACK/SRC/MPI/pzgetv0.f
-+++ b/PARPACK/SRC/MPI/pzgetv0.f
-@@ -176,13 +176,13 @@ subroutine pzgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj, myid, igen
- Double precision
- & rnorm0
- Complex*16
- & cnorm, cnorm2
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- Complex*16
- & cnorm_buf, buf2(1)
-@@ -203,6 +203,12 @@ subroutine pzgetv0
- & zzdotc
- external zzdotc , pdznorm2 , dlapy2
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -213,26 +219,30 @@ subroutine pzgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-+ if (inits) then
- c
--c %-----------------------------------%
--c | Generate a seed on each processor |
--c | using process id (myid). |
--c | Note: the seed must be between 1 |
--c | and 4095. iseed(4) must be odd. |
--c %-----------------------------------%
-+c %-----------------------------------%
-+c | Generate a seed on each processor |
-+c | using process id (myid). |
-+c | Note: the seed must be between 1 |
-+c | and 4095. iseed(4) must be odd. |
-+c %-----------------------------------%
- c
-- call MPI_COMM_RANK(comm, myid, ierr)
-- igen = 1000 + 2*myid + 1
-- if (igen .gt. 4095) then
-- write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-- end if
-+ call MPI_COMM_RANK(comm, myid, ierr)
-+ igen = 1000 + 2*myid + 1
-+ if (igen .gt. 4095) then
-+ write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-+ end if
-+c
-+ iseed(1) = igen/1000
-+ igen = mod(igen,1000)
-+ iseed(2) = igen/100
-+ igen = mod(igen,100)
-+ iseed(3) = igen/10
-+ iseed(4) = mod(igen,10)
- c
-- iseed(1) = igen/1000
-- igen = mod(igen,1000)
-- iseed(2) = igen/100
-- igen = mod(igen,100)
-- iseed(3) = igen/10
-- iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/SRC/cgetv0.f b/SRC/cgetv0.f
-index b49e66708..c231eadcb 100644
---- a/SRC/cgetv0.f
-+++ b/SRC/cgetv0.f
-@@ -156,13 +156,13 @@ subroutine cgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj
- Real
- & rnorm0
- Complex
- & cnorm
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- c %----------------------%
- c | External Subroutines |
-@@ -180,6 +180,12 @@ subroutine cgetv0
- & ccdotc
- external ccdotc, scnrm2, slapy2
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -190,10 +196,13 @@ subroutine cgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+ iseed(1) = 1
-+ iseed(2) = 3
-+ iseed(3) = 5
-+ iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/SRC/dgetv0.f b/SRC/dgetv0.f
-index 8be4fa26d..1d6dc01bd 100644
---- a/SRC/dgetv0.f
-+++ b/SRC/dgetv0.f
-@@ -157,11 +157,11 @@ subroutine dgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj
- Double precision
- & rnorm0
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- c %----------------------%
- c | External Subroutines |
-@@ -183,6 +183,12 @@ subroutine dgetv0
- c
- intrinsic abs, sqrt
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -193,10 +199,13 @@ subroutine dgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+ iseed(1) = 1
-+ iseed(2) = 3
-+ iseed(3) = 5
-+ iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/SRC/sgetv0.f b/SRC/sgetv0.f
-index 26130a014..d861b2d6d 100644
---- a/SRC/sgetv0.f
-+++ b/SRC/sgetv0.f
-@@ -157,11 +157,11 @@ subroutine sgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj
- Real
- & rnorm0
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- c %----------------------%
- c | External Subroutines |
-@@ -183,6 +183,12 @@ subroutine sgetv0
- c
- intrinsic abs, sqrt
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -193,10 +199,13 @@ subroutine sgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+ iseed(1) = 1
-+ iseed(2) = 3
-+ iseed(3) = 5
-+ iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/SRC/zgetv0.f b/SRC/zgetv0.f
-index cc13c3cfb..1fbd50851 100644
---- a/SRC/zgetv0.f
-+++ b/SRC/zgetv0.f
-@@ -156,13 +156,13 @@ subroutine zgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj
- Double precision
- & rnorm0
- Complex*16
- & cnorm
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- c %----------------------%
- c | External Subroutines |
-@@ -180,6 +180,12 @@ subroutine zgetv0
- & zzdotc
- external zzdotc, dznrm2, dlapy2
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -190,10 +196,13 @@ subroutine zgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+ iseed(1) = 1
-+ iseed(2) = 3
-+ iseed(3) = 5
-+ iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
diff --git a/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch b/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch
new file mode 100644
index 0000000000..c93a9869ed
--- /dev/null
+++ b/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch
@@ -0,0 +1,110 @@
+Patches taken from the rdkit fork at this commit (there version
+AvalonToolkit_2.0.6-pre.2):
+https://github.com/rdkit/ava-formake/commit/d05bee0382b8f4696b2b4b05b0038fb7d559520a
+
+diff -ur a/src/main/C/common/reaccsio.c b/src/main/C/common/reaccsio.c
+--- a/src/main/C/common/reaccsio.c
++++ b/src/main/C/common/reaccsio.c
+@@ -322,34 +322,49 @@
+ fprintf(fp,"\n");
+ }
+
++#define MAX_BONDLINE_FIELDS 7
++#define BONDLINE_FIELD_LEN 3
++
+ int ReadREACCSBond(Fortran_FILE *fp, struct reaccs_bond_t *bp)
+ {
+- int nitems, i;
+- char buffer[MAX_BUFFER+1];
++ int nitems, i, j, k;
++ int bond_line_len, n_chars, pos;
++ int *ptrarray[MAX_BONDLINE_FIELDS];
++ char c;
++ char buffer[BONDLINE_FIELD_LEN+1];
+
+ if (fp->status != FORTRAN_NORMAL) return(fp->status);
+
+- strncpy(buffer,fp->buffer,MAX_BUFFER);
+- /* zero pad only atom numbers! */
+- for (i=0; i<6; i++) if (buffer[i] == ' ') buffer[i] = '0';
+-
+ bp->stereo_symbol = 0;
+ bp->dummy = 0;
+ bp->topography = 0;
+ bp->reaction_mark = NONE;
+- // make sure spaces are interpreted the Fortran-way
+- for (i=9; i<strlen(buffer) && i<21; i+=3)
+- {
+- if ((i+1)<strlen(buffer) && buffer[i+1]==' ') buffer[i+1] = '0';
+- if ((i+2)<strlen(buffer) && buffer[i+2]==' ') buffer[i+2] = '0';
++ ptrarray[0] = &bp->atoms[0];
++ ptrarray[1] = &bp->atoms[1];
++ ptrarray[2] = &bp->bond_type;
++ ptrarray[3] = &bp->stereo_symbol;
++ ptrarray[4] = &bp->dummy;
++ ptrarray[5] = &bp->topography;
++ ptrarray[6] = &bp->reaction_mark;
++ bond_line_len = strlen(fp->buffer);
++ nitems = bond_line_len ? (bond_line_len - 1) / BONDLINE_FIELD_LEN + 1 : 0;
++ if (nitems > MAX_BONDLINE_FIELDS)
++ nitems = MAX_BONDLINE_FIELDS;
++ for (i = 0; i < nitems; ++i)
++ {
++ pos = i * BONDLINE_FIELD_LEN;
++ memset(buffer, 0, BONDLINE_FIELD_LEN + 1);
++ n_chars = bond_line_len - pos;
++ if (n_chars > BONDLINE_FIELD_LEN)
++ n_chars = BONDLINE_FIELD_LEN;
++ for (j = 0, k = 0; j < n_chars; ++j)
++ {
++ c = fp->buffer[pos + j];
++ if (c != ' ')
++ buffer[k++] = c;
++ }
++ sscanf(buffer, "%3d", ptrarray[i]);
+ }
+- nitems = sscanf(buffer,
+- "%3d%3d%3d%3d%3d%3d%3d",
+- &bp->atoms[0], &bp->atoms[1],
+- &bp->bond_type, &bp->stereo_symbol,
+- &bp->dummy,
+- &bp->topography, &bp->reaction_mark);
+-
+ if (nitems >= 3)
+ {
+ GetBuffer(fp);
+@@ -1582,6 +1597,8 @@
+
+ PrintREACCSMolecule(fp, mp,"");
+
++ fputc('\0', fp);
++ fflush(fp);
+ rewind(fp);
+
+ MolStr = _ReadFile(fp);
+diff -ur a/src/main/C/programs/struchk.c b/src/main/C/programs/struchk.c
+--- a/src/main/C/programs/struchk.c
++++ b/src/main/C/programs/struchk.c
+@@ -1581,6 +1581,22 @@
+
+ if ((result & SIZE_CHECK_FAILED) == 0)
+ {
++ for (i = 0; i < mp->n_bonds; ++i) {
++ for (j = 0; j < 2; ++j) {
++ if (mp->bond_array[i].atoms[j] < 1 || mp->bond_array[i].atoms[j] > mp->n_atoms)
++ {
++ snprintf(msg_buffer, MAXMSG,
++ "%10s : illegal atom # (%d, max allowed is %d) in bond %d",
++ mp->name, mp->bond_array[i].atoms[j], mp->n_atoms, i + 1);
++ AddMsgToList(msg_buffer);
++ result |= SIZE_CHECK_FAILED;
++ }
++ }
++ }
++ }
++
++ if ((result & SIZE_CHECK_FAILED) == 0)
++ {
+ if (convert_atom_texts)
+ {
+ tmp = ConvertAtomAliases(mp);
diff --git a/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch b/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch
deleted file mode 100644
index 33e4f183f6..0000000000
--- a/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 6361de07a35f2e9dc1d7201d6b26ca31da93ee69 Mon Sep 17 00:00:00 2001
-From: Tobias Geerinckx-Rice <me@tobias.gr>
-Date: Thu, 9 Dec 2021 01:07:32 +0100
-Subject: [PATCH] Revert "Remove priority from attribute
- constructor/destructor"
-
-This reverts commit 0340df46ec5897636dd071bc8b5c4272cfa7d7be. It works
-around an irrelevant operating system and breaks compilation on Guix:
-
-mem.c:873: fatal error: RUNTIME_CHECK(((pthread_mutex_lock(((&contextslock))) == 0) ? 0 : 34) == 0) failed
-/gnu/store/…-bash-minimal-5.0.16/bin/bash: line 1: 13768 Aborted ./${fuzzer}
-
-Let's simply revert it for now---there are securities at stake!
----
- lib/isc/include/isc/util.h | 8 ++++----
- lib/isc/lib.c | 4 ++--
- 2 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/lib/isc/include/isc/util.h b/lib/isc/include/isc/util.h
-index f0f7f85fa4..64c26587ac 100644
---- a/lib/isc/include/isc/util.h
-+++ b/lib/isc/include/isc/util.h
-@@ -49,11 +49,11 @@
- #endif /* __GNUC__ */
-
- #if HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR && HAVE_FUNC_ATTRIBUTE_DESTRUCTOR
--#define ISC_CONSTRUCTOR __attribute__((constructor))
--#define ISC_DESTRUCTOR __attribute__((destructor))
-+#define ISC_CONSTRUCTOR(priority) __attribute__((constructor(priority)))
-+#define ISC_DESTRUCTOR(priority) __attribute__((destructor(priority)))
- #elif WIN32
--#define ISC_CONSTRUCTOR
--#define ISC_DESTRUCTOR
-+#define ISC_CONSTRUCTOR(priority)
-+#define ISC_DESTRUCTOR(priority)
- #endif
-
- /*%
-diff --git a/lib/isc/lib.c b/lib/isc/lib.c
-index f3576b2659..2a167fec21 100644
---- a/lib/isc/lib.c
-+++ b/lib/isc/lib.c
-@@ -35,9 +35,9 @@ isc_lib_register(void) {
- }
-
- void
--isc__initialize(void) ISC_CONSTRUCTOR;
-+isc__initialize(void) ISC_CONSTRUCTOR(101);
- void
--isc__shutdown(void) ISC_DESTRUCTOR;
-+isc__shutdown(void) ISC_DESTRUCTOR(101);
-
- void
- isc__initialize(void) {
---
-2.34.0
-
diff --git a/gnu/packages/patches/converseen-hide-non-free-pointers.patch b/gnu/packages/patches/converseen-hide-non-free-pointers.patch
index b4994733cd..9c27cdafe3 100644
--- a/gnu/packages/patches/converseen-hide-non-free-pointers.patch
+++ b/gnu/packages/patches/converseen-hide-non-free-pointers.patch
@@ -2,10 +2,10 @@ Remove pointers to PayPal and Facebook.
Upstream status: Guix-specific, not forwarded upstream.
diff --git a/src/dialoginfo.cpp b/src/dialoginfo.cpp
-index 3302f55..b64f414 100755
+index 52dd628..b37c413 100755
--- a/src/dialoginfo.cpp
+++ b/src/dialoginfo.cpp
-@@ -31,7 +31,6 @@ DialogInfo::DialogInfo(QWidget *parent) :
+@@ -33,7 +33,6 @@ DialogInfo::DialogInfo(QWidget *parent) :
setupUi(this);
connect(pushClose, SIGNAL(clicked()), this, SLOT(close()));
@@ -13,44 +13,99 @@ index 3302f55..b64f414 100755
QString appVersion;
QString magickVersion;
-@@ -63,8 +62,3 @@ void DialogInfo::openFacebookPage()
- QDesktopServices::openUrl(QUrl("https://www.facebook.com/converseen", QUrl::TolerantMode));
+@@ -66,62 +65,4 @@ DialogInfo::DialogInfo(QWidget *parent) :
+ .arg(qtVersionStrTr)
+ .arg(QT_VERSION_STR);
+ labelQtVersion->setText(qt_versionString);
+-
+- // This section generates a Text + Png pixmap icon for the donazion button!
+-
+- QString donateText = tr("Make a Donation!");
+- QString donateDescriptionText = tr("Donate using PayPal, Ko-Fi or Cryptocurrencies.");
+-
+- QString htmlDonationText = QString(R"(
+- <style>
+- table {
+- border-collapse: collapse;
+- }
+- td {
+- text-align: center;
+- vertical-align: middle;
+- padding: 5px;
+- }
+- </style>
+-
+- <table>
+- <tr>
+- <td><img src=':/Images/res/heart.png' width='52' height='52'></td>
+- <td>
+- <span style='font-weight: bold; font-size:18pt; text-align: center;'>%1</span><br />
+- <span style='font-style: italic; font-size:8pt; text-align: center;'>%2</span>
+- </td>
+- </tr>
+- </table>
+- )")
+- .arg(donateText, donateDescriptionText);
+-
+- QTextDocument donateHtmlText;
+- donateHtmlText.setHtml(htmlDonationText);
+-
+- QPixmap pixmapDonationText(donateHtmlText.size().width(), donateHtmlText.size().height());
+- pixmapDonationText.fill( Qt::transparent );
+-
+- QPainter painter( &pixmapDonationText );
+- painter.setRenderHint(QPainter::Antialiasing, true);
+-
+- donateHtmlText.drawContents(&painter, pixmapDonationText.rect());
+-
+- QIcon donateButtonIcon(pixmapDonationText);
+- pushDonatePayPal->setIcon(donateButtonIcon);
+- pushDonatePayPal->setIconSize(pixmapDonationText.rect().size());
+-
+- adjustSize();
+- this->resize(512, 800);
+-}
+-
+-void DialogInfo::openFacebookPage()
+-{
+- QDesktopServices::openUrl(QUrl("https://www.facebook.com/converseen", QUrl::TolerantMode));
}
-
+-
-void DialogInfo::on_pushDonatePayPal_clicked()
-{
-- QDesktopServices::openUrl(QUrl("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HQA6TBT5354FC", QUrl::TolerantMode));
+- QDesktopServices::openUrl(QUrl("https://converseen.fasterland.net/donate/", QUrl::TolerantMode));
-}
-
diff --git a/src/dialoginfo.h b/src/dialoginfo.h
-index 4c13776..f1b7ea3 100755
+index 4d8ba15..ef6afa9 100755
--- a/src/dialoginfo.h
+++ b/src/dialoginfo.h
-@@ -33,7 +33,6 @@ public:
+@@ -32,8 +32,6 @@ public:
+ DialogInfo(QWidget *parent = 0);
private slots:
- void openFacebookPage();
+- void openFacebookPage();
- void on_pushDonatePayPal_clicked();
};
#endif // DIALOGINFO_H
diff --git a/src/mainwindowimpl.cpp b/src/mainwindowimpl.cpp
-index 83a365f..9a44492 100755
+index 71ddc2c..bd4294b 100755
--- a/src/mainwindowimpl.cpp
+++ b/src/mainwindowimpl.cpp
-@@ -162,7 +162,6 @@ void MainWindowImpl::createActions()
+@@ -163,7 +163,6 @@ void MainWindowImpl::createActions()
connect(actionConvert, SIGNAL(triggered()), this, SLOT(elabora()));
connect(actionInfo, SIGNAL(triggered()), this, SLOT(about()));
- connect(actionDonatePaypal, SIGNAL(triggered()), this, SLOT(openPaypalLink()));
connect(actionReportBug, SIGNAL(triggered()), this, SLOT(bugReport()));
- }
-
+ connect(actionCheckForUpdates, SIGNAL(triggered()), this, SLOT(checkForUpdates()));
+ connect(actionHelp, SIGNAL(triggered()), this, SLOT(onlineHelp()));
diff --git a/ui/dialoginfo.ui b/ui/dialoginfo.ui
-index b2c7788..20b9d9d 100755
+index 2878670..0535a85 100755
--- a/ui/dialoginfo.ui
+++ b/ui/dialoginfo.ui
-@@ -254,122 +254,6 @@ p, li { white-space: pre-wrap; }
+@@ -273,146 +273,6 @@ p, li { white-space: pre-wrap; }
</layout>
</widget>
</item>
@@ -69,25 +124,53 @@ index b2c7788..20b9d9d 100755
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
+- <spacer name="horizontalSpacer_4">
+- <property name="orientation">
+- <enum>Qt::Horizontal</enum>
+- </property>
+- <property name="sizeHint" stdset="0">
+- <size>
+- <width>40</width>
+- <height>20</height>
+- </size>
+- </property>
+- </spacer>
+- </item>
+- <item>
- <widget class="QPushButton" name="pushDonatePayPal">
+- <property name="cursor">
+- <cursorShape>PointingHandCursor</cursorShape>
+- </property>
- <property name="text">
- <string/>
- </property>
-- <property name="icon">
-- <iconset resource="../resources.qrc">
-- <normaloff>:/Images/res/btn_donateCC_LG.png</normaloff>:/Images/res/btn_donateCC_LG.png</iconset>
-- </property>
- <property name="iconSize">
- <size>
- <width>150</width>
- <height>50</height>
- </size>
- </property>
+- <property name="autoDefault">
+- <bool>false</bool>
+- </property>
- <property name="flat">
- <bool>true</bool>
- </property>
- </widget>
- </item>
+- <item>
+- <spacer name="horizontalSpacer_5">
+- <property name="orientation">
+- <enum>Qt::Horizontal</enum>
+- </property>
+- <property name="sizeHint" stdset="0">
+- <size>
+- <width>40</width>
+- <height>20</height>
+- </size>
+- </property>
+- </spacer>
+- </item>
- </layout>
- </item>
- </layout>
@@ -141,6 +224,9 @@ index b2c7788..20b9d9d 100755
- <height>32</height>
- </size>
- </property>
+- <property name="autoDefault">
+- <bool>false</bool>
+- </property>
- <property name="flat">
- <bool>true</bool>
- </property>
@@ -163,34 +249,27 @@ index b2c7788..20b9d9d 100755
- </item>
- </layout>
- </item>
-- <item>
-- <widget class="Line" name="line">
-- <property name="orientation">
-- <enum>Qt::Horizontal</enum>
-- </property>
-- </widget>
-- </item>
<item>
- <widget class="QLabel" name="label_2">
- <property name="text">
+ <widget class="Line" name="line">
+ <property name="orientation">
diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui
-index 28df8cc..0ee7f37 100755
+index 24bda6f..e8a072d 100755
--- a/ui/mainwindow.ui
+++ b/ui/mainwindow.ui
-@@ -1334,18 +1334,6 @@ p, li { white-space: pre-wrap; }
- <string>F1</string>
+@@ -1408,18 +1408,6 @@ p, li { white-space: pre-wrap; }
+ <string>&amp;About</string>
</property>
</action>
- <action name="actionDonatePaypal">
- <property name="icon">
- <iconset resource="../resources.qrc">
-- <normaloff>:/Images/res/paypal_mini.png</normaloff>:/Images/res/paypal_mini.png</iconset>
+- <normaloff>:/Images/res/heart.png</normaloff>:/Images/res/heart.png</iconset>
- </property>
- <property name="text">
-- <string>&amp;Donate via Paypal</string>
+- <string>&amp;Donate!</string>
- </property>
- <property name="toolTip">
-- <string>Donate via Paypal</string>
+- <string>Donate via Paypal, Ko-Fi, Cryptocurrencies</string>
- </property>
- </action>
<action name="actionReportBug">
diff --git a/gnu/packages/patches/coq-fix-envvars.patch b/gnu/packages/patches/coq-fix-envvars.patch
deleted file mode 100644
index 6c48224c64..0000000000
--- a/gnu/packages/patches/coq-fix-envvars.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 0e76cda958a4d3e4bcbb96e171c26b6b3478c6c2 Mon Sep 17 00:00:00 2001
-From: Julien Lepiller <julien@lepiller.eu>
-Date: Thu, 10 Feb 2022 16:44:10 +0100
-Subject: [PATCH] Fix environment variable usage.
-
----
- boot/env.ml | 26 +++++++++++++++++++-------
- 1 file changed, 19 insertions(+), 7 deletions(-)
-
-diff --git a/boot/env.ml b/boot/env.ml
-index e8521e7..d834a3a 100644
---- a/boot/env.ml
-+++ b/boot/env.ml
-@@ -32,17 +32,29 @@ let fail_msg =
-
- let fail s = Format.eprintf "%s@\n%!" fail_msg; exit 1
-
-+let path_to_list p =
-+ let sep = if String.equal Sys.os_type "Win32" then ';' else ':' in
-+ String.split_on_char sep p
-+
- (* This code needs to be refactored, for now it is just what used to be in envvars *)
- let guess_coqlib () =
- Util.getenv_else "COQLIB" (fun () ->
- let prelude = "theories/Init/Prelude.vo" in
-- Util.check_file_else
-- ~dir:Coq_config.coqlibsuffix
-- ~file:prelude
-- (fun () ->
-- if Sys.file_exists (Filename.concat Coq_config.coqlib prelude)
-- then Coq_config.coqlib
-- else fail ()))
-+ let coqlibpath = Util.getenv_else "COQLIBPATH" (fun () -> Coq_config.coqlibsuffix) in
-+ let paths = path_to_list coqlibpath in
-+ let valid_paths =
-+ List.filter
-+ (fun dir -> (Util.check_file_else ~dir:dir ~file:prelude (fun () -> "")) <> "")
-+ paths in
-+ match valid_paths with
-+ | [] ->
-+ if Sys.file_exists (Filename.concat Coq_config.coqlib prelude)
-+ then Coq_config.coqlib
-+ else
-+ fail "cannot guess a path for Coq libraries; please use -coqlib option \
-+ or ensure you have installed the package containing Coq's stdlib (coq-stdlib in OPAM) \
-+ If you intend to use Coq without a standard library, the -boot -noinit options must be used."
-+ | p::_ -> p)
-
- (* Build layout uses coqlib = coqcorelib *)
- let guess_coqcorelib lib =
---
-2.34.0
-
diff --git a/gnu/packages/patches/dynaconf-unvendor-deps.patch b/gnu/packages/patches/dynaconf-unvendor-deps.patch
index 550e311363..f816264f4a 100644
--- a/gnu/packages/patches/dynaconf-unvendor-deps.patch
+++ b/gnu/packages/patches/dynaconf-unvendor-deps.patch
@@ -1,45 +1,46 @@
-From 3f7b48195500cbbbbecd3cac2f5308c64004479b Mon Sep 17 00:00:00 2001
+From d3252748b0f9036cb31f4697ebb5c6a494aceaca Mon Sep 17 00:00:00 2001
From: Giacomo Leidi <goodoldpaul@autistici.org>
-Date: Sun, 29 Aug 2021 23:39:27 +0200
+Date: Sun, 14 Jan 2024 12:05:49 +0100
Subject: [PATCH] Use system site dependencies.
-Box was not unvendored because it appears to be heavily patched.
+* Box was not unvendored because it appears to be heavily patched.
+* Tomllib seems to be a backport from Python 3.11, as such it wasn't unvendored.
---
- dynaconf/cli.py | 4 ++--
- dynaconf/default_settings.py | 2 +-
- dynaconf/loaders/env_loader.py | 2 +-
- dynaconf/loaders/toml_loader.py | 2 +-
- dynaconf/loaders/yaml_loader.py | 2 +-
- dynaconf/utils/parse_conf.py | 2 +-
- dynaconf/vendor/box/converters.py | 4 ++--
- dynaconf/vendor/box/from_file.py | 4 ++--
- dynaconf/vendor_src/box/converters.py | 4 ++--
- dynaconf/vendor_src/box/from_file.py | 4 ++--
- tests/test_cli.py | 2 +-
- 11 files changed, 16 insertions(+), 16 deletions(-)
+ dynaconf/cli.py | 4 ++--
+ dynaconf/default_settings.py | 2 +-
+ dynaconf/loaders/env_loader.py | 2 +-
+ dynaconf/loaders/toml_loader.py | 2 +-
+ dynaconf/loaders/yaml_loader.py | 2 +-
+ dynaconf/utils/inspect.py | 2 +-
+ dynaconf/utils/parse_conf.py | 2 +-
+ dynaconf/vendor/box/converters.py | 2 +-
+ dynaconf/vendor/box/from_file.py | 2 +-
+ tests/test_cli.py | 2 +-
+ tests/test_inspect.py | 2 +-
+ 11 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/dynaconf/cli.py b/dynaconf/cli.py
-index 5bb8316..1341a95 100644
+index c0fd489..5739e79 100644
--- a/dynaconf/cli.py
+++ b/dynaconf/cli.py
-@@ -20,8 +20,8 @@ from dynaconf.utils.functional import empty
- from dynaconf.utils.parse_conf import parse_conf_data
+@@ -24,8 +24,8 @@ from dynaconf.utils.parse_conf import parse_conf_data
+ from dynaconf.utils.parse_conf import unparse_conf_data
from dynaconf.validator import ValidationError
from dynaconf.validator import Validator
-from dynaconf.vendor import click
-from dynaconf.vendor import toml
+import click
+import toml
+ from dynaconf.vendor import tomllib
- CWD = Path.cwd()
diff --git a/dynaconf/default_settings.py b/dynaconf/default_settings.py
-index 66601b0..9605fc5 100644
+index 7e8c222..526b01e 100644
--- a/dynaconf/default_settings.py
+++ b/dynaconf/default_settings.py
-@@ -8,7 +8,7 @@ from dynaconf.utils import upperfy
- from dynaconf.utils import warn_deprecations
+@@ -11,7 +11,7 @@ from dynaconf.utils import warn_deprecations
from dynaconf.utils.files import find_file
+ from dynaconf.utils.parse_conf import boolean_fix
from dynaconf.utils.parse_conf import parse_conf_data
-from dynaconf.vendor.dotenv import load_dotenv
+from dotenv import load_dotenv
@@ -47,36 +48,36 @@ index 66601b0..9605fc5 100644
def try_renamed(key, value, older_key, current_key):
diff --git a/dynaconf/loaders/env_loader.py b/dynaconf/loaders/env_loader.py
-index e7b13bd..b034c8a 100644
+index a563b4e..91ac3ae 100644
--- a/dynaconf/loaders/env_loader.py
+++ b/dynaconf/loaders/env_loader.py
-@@ -2,7 +2,7 @@ from os import environ
+@@ -11,7 +11,7 @@ from dynaconf.utils.parse_conf import parse_conf_data
- from dynaconf.utils import upperfy
- from dynaconf.utils.parse_conf import parse_conf_data
--from dynaconf.vendor.dotenv import cli as dotenv_cli
-+from dotenv import cli as dotenv_cli
+ DOTENV_IMPORTED = False
+ with suppress(ImportError, FileNotFoundError):
+- from dynaconf.vendor.dotenv import cli as dotenv_cli
++ from dotenv import cli as dotenv_cli
+ DOTENV_IMPORTED = True
- IDENTIFIER = "env"
diff --git a/dynaconf/loaders/toml_loader.py b/dynaconf/loaders/toml_loader.py
-index 07b973f..d81d675 100644
+index 42db7b3..ba0188b 100644
--- a/dynaconf/loaders/toml_loader.py
+++ b/dynaconf/loaders/toml_loader.py
-@@ -5,7 +5,7 @@ from dynaconf import default_settings
+@@ -7,7 +7,7 @@ from dynaconf import default_settings
from dynaconf.constants import TOML_EXTENSIONS
from dynaconf.loaders.base import BaseLoader
from dynaconf.utils import object_merge
--from dynaconf.vendor import toml
-+import toml
+-from dynaconf.vendor import toml # Backwards compatibility with uiri/toml
++import toml # Backwards compatibility with uiri/toml
+ from dynaconf.vendor import tomllib # New tomllib stdlib on py3.11
- def load(obj, env=None, silent=True, key=None, filename=None):
diff --git a/dynaconf/loaders/yaml_loader.py b/dynaconf/loaders/yaml_loader.py
-index 33c6532..3ef419a 100644
+index 5721681..ab628c2 100644
--- a/dynaconf/loaders/yaml_loader.py
+++ b/dynaconf/loaders/yaml_loader.py
-@@ -7,7 +7,7 @@ from dynaconf.constants import YAML_EXTENSIONS
+@@ -10,7 +10,7 @@ from dynaconf.constants import YAML_EXTENSIONS
from dynaconf.loaders.base import BaseLoader
from dynaconf.utils import object_merge
from dynaconf.utils.parse_conf import try_to_encode
@@ -85,95 +86,84 @@ index 33c6532..3ef419a 100644
# Add support for Dynaconf Lazy values to YAML dumper
yaml.SafeDumper.yaml_representers[
+diff --git a/dynaconf/utils/inspect.py b/dynaconf/utils/inspect.py
+index 21d724e..2933b8f 100644
+--- a/dynaconf/utils/inspect.py
++++ b/dynaconf/utils/inspect.py
+@@ -18,7 +18,7 @@ from dynaconf.loaders.base import SourceMetadata
+ from dynaconf.utils.boxing import DynaBox
+ from dynaconf.utils.functional import empty
+ from dynaconf.vendor.box.box_list import BoxList
+-from dynaconf.vendor.ruamel.yaml import YAML
++from ruamel.yaml import YAML
+
+ if TYPE_CHECKING: # pragma: no cover
+ from dynaconf.base import LazySettings, Settings
diff --git a/dynaconf/utils/parse_conf.py b/dynaconf/utils/parse_conf.py
-index c42b07a..01ccdae 100644
+index 882110e..a262864 100644
--- a/dynaconf/utils/parse_conf.py
+++ b/dynaconf/utils/parse_conf.py
-@@ -9,7 +9,7 @@ from dynaconf.utils import isnamedtupleinstance
- from dynaconf.utils import multi_replace
+@@ -12,7 +12,7 @@ from dynaconf.utils import multi_replace
from dynaconf.utils import recursively_evaluate_lazy_format
from dynaconf.utils.boxing import DynaBox
+ from dynaconf.utils.functional import empty
-from dynaconf.vendor import toml
+import toml
+ from dynaconf.vendor import tomllib
try:
- from jinja2 import Environment
diff --git a/dynaconf/vendor/box/converters.py b/dynaconf/vendor/box/converters.py
-index 93cdcfb..e34c7dc 100644
+index 08694fe..4e84930 100644
--- a/dynaconf/vendor/box/converters.py
+++ b/dynaconf/vendor/box/converters.py
-@@ -7,9 +7,9 @@ _B='utf-8'
- _A=None
- import csv,json,sys,warnings
- from pathlib import Path
--import dynaconf.vendor.ruamel.yaml as yaml
-+import ruamel.yaml as yaml
- from dynaconf.vendor.box.exceptions import BoxError,BoxWarning
--from dynaconf.vendor import toml
-+import toml
- BOX_PARAMETERS='default_box','default_box_attr','conversion_box','frozen_box','camel_killer_box','box_safe_prefix','box_duplicates','ordered_box','default_box_none_transform','box_dots','modify_tuples_box','box_intact_types','box_recast'
- def _exists(filename,create=_E):
- A=filename;B=Path(A)
-diff --git a/dynaconf/vendor/box/from_file.py b/dynaconf/vendor/box/from_file.py
-index daa1137..d75940b 100644
---- a/dynaconf/vendor/box/from_file.py
-+++ b/dynaconf/vendor/box/from_file.py
-@@ -1,8 +1,8 @@
- from json import JSONDecodeError
- from pathlib import Path
- from typing import Union
--from dynaconf.vendor.toml import TomlDecodeError
--from dynaconf.vendor.ruamel.yaml import YAMLError
-+from toml import TomlDecodeError
-+from ruamel.yaml import YAMLError
- from .exceptions import BoxError
- from .box import Box
- from .box_list import BoxList
-diff --git a/dynaconf/vendor_src/box/converters.py b/dynaconf/vendor_src/box/converters.py
-index c9a2293..ae42bf6 100644
---- a/dynaconf/vendor_src/box/converters.py
-+++ b/dynaconf/vendor_src/box/converters.py
-@@ -9,9 +9,9 @@ import sys
+@@ -9,7 +9,7 @@ import sys
import warnings
from pathlib import Path
-import dynaconf.vendor.ruamel.yaml as yaml
+import ruamel.yaml as yaml
from dynaconf.vendor.box.exceptions import BoxError, BoxWarning
--from dynaconf.vendor import toml
-+import toml
-
+ from dynaconf.vendor import tomllib as toml
- BOX_PARAMETERS = ('default_box', 'default_box_attr', 'conversion_box',
-diff --git a/dynaconf/vendor_src/box/from_file.py b/dynaconf/vendor_src/box/from_file.py
-index 2e2a6ad..3f76819 100644
---- a/dynaconf/vendor_src/box/from_file.py
-+++ b/dynaconf/vendor_src/box/from_file.py
-@@ -3,8 +3,8 @@
- from json import JSONDecodeError
+diff --git a/dynaconf/vendor/box/from_file.py b/dynaconf/vendor/box/from_file.py
+index a82ac96..cd01f13 100644
+--- a/dynaconf/vendor/box/from_file.py
++++ b/dynaconf/vendor/box/from_file.py
+@@ -4,7 +4,7 @@ from json import JSONDecodeError
from pathlib import Path
from typing import Union
--from dynaconf.vendor.toml import TomlDecodeError
+ from dynaconf.vendor.tomllib import TOMLDecodeError
-from dynaconf.vendor.ruamel.yaml import YAMLError
-+from toml import TomlDecodeError
+from ruamel.yaml import YAMLError
from .exceptions import BoxError
diff --git a/tests/test_cli.py b/tests/test_cli.py
-index 6693701..df44409 100644
+index c679ae5..9df5f7f 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
-@@ -11,7 +11,7 @@ from dynaconf.cli import main
+@@ -15,7 +15,7 @@ from dynaconf.cli import main
from dynaconf.cli import read_file_in_root_directory
from dynaconf.cli import WRITERS
from dynaconf.utils.files import read_file
-from dynaconf.vendor.click.testing import CliRunner
+from click.testing import CliRunner
+ settings = LazySettings(OPTION_FOR_TESTS=True, environments=True)
- runner = CliRunner()
-
-base-commit: ebf7b17cffd5e08b212948bd8036d580718d5bf8
+diff --git a/tests/test_inspect.py b/tests/test_inspect.py
+index 0819715..96638c1 100644
+--- a/tests/test_inspect.py
++++ b/tests/test_inspect.py
+@@ -18,7 +18,7 @@ from dynaconf.utils.inspect import inspect_settings
+ from dynaconf.utils.inspect import KeyNotFoundError
+ from dynaconf.utils.inspect import OutputFormatError
+ from dynaconf.validator import Validator
+-from dynaconf.vendor.ruamel import yaml
++from ruamel import yaml
+
+
+ def create_file(filename: str, data: str) -> str:
--
-2.32.0
+2.41.0
+
diff --git a/gnu/packages/patches/emacs-yasnippet-fix-tests.patch b/gnu/packages/patches/emacs-yasnippet-fix-tests.patch
deleted file mode 100644
index 5995b0afa4..0000000000
--- a/gnu/packages/patches/emacs-yasnippet-fix-tests.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From 904a058fcf4e1f4985e03f8551eec282ca12ccb5 Mon Sep 17 00:00:00 2001
-From: Philipp Stephani <phst@google.com>
-Date: Mon, 6 Dec 2021 18:50:10 +0100
-Subject: [PATCH] Unbreak unit tests under Emacs 28.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-- Emacs 28 has a new mode ‘lisp-data-mode’ for Lisp data.
-- A test that was temporarily broken passes again.
-- The default for ‘org-adapt-indentation’ has changed.
-- buffer-list may be called with arguments when native-comp is enabled.
-
-2023-08-19 Liliana Marie Prikler <liliana.prikler@gmail.com>
-
- * delete-numberless-inner-snippet-issue-562: Correct value in
- looking-at.
----
- yasnippet-tests.el | 45 ++++++++++++++++++++++++++++-----------------
- 1 file changed, 28 insertions(+), 17 deletions(-)
-
-diff --git a/yasnippet-tests.el b/yasnippet-tests.el
-index f7ca2bb..7618ab7 100644
---- a/yasnippet-tests.el
-+++ b/yasnippet-tests.el
-@@ -1,6 +1,6 @@
- ;;; yasnippet-tests.el --- some yasnippet tests -*- lexical-binding: t -*-
-
--;; Copyright (C) 2012-2015, 2017-2018 Free Software Foundation, Inc.
-+;; Copyright (C) 2012-2015, 2017-2018, 2021 Free Software Foundation, Inc.
-
- ;; Author: João Távora <joaot@siscog.pt>
- ;; Keywords: emulations, convenience
-@@ -289,7 +289,7 @@ attention to case differences."
- (should (looking-at "testblable"))
- (ert-simulate-command '(yas-next-field-or-maybe-expand))
- (ert-simulate-command '(yas-skip-and-clear-field))
-- (should (looking-at "ble"))
-+ (should (looking-at "blable"))
- (should (null (yas-active-snippets)))))
-
- (ert-deftest delete-nested-simple-field-issue-824 ()
-@@ -556,16 +556,19 @@ XXXXX ------------------------"))))
- (yas-mock-insert "foo bar")
- (ert-simulate-command '(yas-next-field))
- (goto-char (point-min))
-- (let ((expected (with-temp-buffer
-- (insert (format (concat "* Test foo bar\n"
-- " " org-property-format "\n"
-- " " org-property-format "\n"
-- " " org-property-format)
-- ":PROPERTIES:" ""
-- ":ID:" "foo bar-after"
-- ":END:" ""))
-- (delete-trailing-whitespace)
-- (buffer-string))))
-+ ;; The default value of `org-adapt-indentation' changed between Org-mode 9.4
-+ ;; and 9.5, so force a specific value.
-+ (let* ((org-adapt-indentation nil)
-+ (expected (with-temp-buffer
-+ (insert (format (concat "* Test foo bar\n"
-+ org-property-format "\n"
-+ org-property-format "\n"
-+ org-property-format)
-+ ":PROPERTIES:" ""
-+ ":ID:" "foo bar-after"
-+ ":END:" ""))
-+ (delete-trailing-whitespace)
-+ (buffer-string))))
- ;; Some org-mode versions leave trailing whitespace, some don't.
- (delete-trailing-whitespace)
- (should (equal expected (buffer-string))))))
-@@ -1195,11 +1198,11 @@ hello ${1:$(when (stringp yas-text) (funcall func yas-text))} foo${1:$$(concat \
- (let ((saved-sym (make-symbol "yas--buffer-list")))
- `(let ((,saved-sym (symbol-function 'buffer-list)))
- (cl-letf (((symbol-function 'buffer-list)
-- (lambda ()
-+ (lambda (&rest args)
- (cl-remove-if (lambda (buf)
- (with-current-buffer buf
- (eq major-mode 'lisp-interaction-mode)))
-- (funcall ,saved-sym)))))
-+ (funcall ,saved-sym args)))))
- ,@body))))
-
-
-@@ -1356,7 +1359,9 @@ hello ${1:$(when (stringp yas-text) (funcall func yas-text))} foo${1:$$(concat \
- ,@(if (fboundp 'prog-mode)
- '(prog-mode))
- emacs-lisp-mode
-- lisp-interaction-mode))
-+ lisp-interaction-mode
-+ ;; `lisp-data-mode' doesn't exist prior to Emacs 28.
-+ ,@(and (fboundp 'lisp-data-mode) '(lisp-data-mode))))
- (observed (yas--modes-to-activate)))
- (should (equal major-mode (car observed)))
- (should (equal (sort expected #'string<) (sort observed #'string<))))))))
-@@ -1384,7 +1389,11 @@ hello ${1:$(when (stringp yas-text) (funcall func yas-text))} foo${1:$$(concat \
- '(prog-mode))
- emacs-lisp-mode
- and-also-this-one
-- lisp-interaction-mode))
-+ lisp-interaction-mode
-+ ;; `lisp-data-mode' doesn't exist prior to
-+ ;; Emacs 28.
-+ ,@(and (fboundp 'lisp-data-mode)
-+ '(lisp-data-mode))))
- (observed (yas--modes-to-activate)))
- (should (equal expected-first
- (cl-subseq observed 0 (length expected-first))))
-@@ -1657,9 +1666,11 @@ TODO: be meaner"
- "Test expansion of snippets in org source blocks."
- ;; org 9+ no longer runs fontification for text-mode, so our hacks
- ;; don't work. Note that old ert doesn't have skipping, so we have
-- ;; to expect failure instead.
-+ ;; to expect failure instead. Starting with Org-mode 9.5 this seems
-+ ;; to work again.
- :expected-result (if (and (fboundp 'org-in-src-block-p)
-- (version< (org-version) "9"))
-+ (or (version< (org-version) "9")
-+ (version<= "9.5" (org-version))))
- :passed :failed)
- (let ((text-mode-hook #'yas-minor-mode))
- (do-yas-org-native-tab-in-source-block "text")))
---
-2.37.2
-
diff --git a/gnu/packages/patches/git-filter-repo-generate-doc.patch b/gnu/packages/patches/git-filter-repo-generate-doc.patch
new file mode 100644
index 0000000000..4535ae5bc4
--- /dev/null
+++ b/gnu/packages/patches/git-filter-repo-generate-doc.patch
@@ -0,0 +1,88 @@
+From 56e6857e71d2b2a2236625f3c8b112bd40a8b164 Mon Sep 17 00:00:00 2001
+From: Josselin Poiret <dev@jpoiret.xyz>
+Date: Fri, 16 Feb 2024 00:21:06 +0800
+Subject: [PATCH] Add documentation generation.
+
+This requires the manpage XSL and asciidoc config files from git 2.41.0.
+
+Modified-by: Hilton Chain <hako@ultrarare.space>
+---
+ Documentation/Makefile | 34 ++++++++++++++++++++++++++++++++++
+ Makefile | 17 +++--------------
+ 2 files changed, 37 insertions(+), 14 deletions(-)
+ create mode 100644 Documentation/Makefile
+
+diff --git a/Documentation/Makefile b/Documentation/Makefile
+new file mode 100644
+index 0000000..d81ffbe
+--- /dev/null
++++ b/Documentation/Makefile
+@@ -0,0 +1,34 @@
++MAN_BASE_URL := $(prefix)/share/doc/git-doc/
++VERSION := $(git log --pretty="%H" -n 1)
++
++ASCIIDOC := asciidoc
++ASCIIDOC_EXTRA :=
++ASCIIDOC_HTML := xhtml11
++ASCIIDOC_DOCBOOK := docbook
++ASCIIDOC_CONF := -f asciidoc.conf
++ASCIIDOC_COMMON := $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
++ -amanmanual='git-filter-repo Manual' -amansource='git-filter-repo $(VERSION)'
++ASCIIDOC_DEPS := asciidoc.conf
++TXT_TO_HTML := $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
++TXT_TO_XML := $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
++MANPAGE_XSL := manpage-normal.xsl
++XMLTO := xmlto
++XMLTO_EXTRA := -m manpage-bold-literal.xsl \
++ --stringparam man.base.url.for.relative.links='$(MAN_BASE_URL)'
++
++manpage-prereqs := $(wildcard manpage*.xsl)
++manpage-cmd := $(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man
++
++%.xml : %.txt $(ASCIIDOC_DEPS)
++ $(TXT_TO_XML) -d manpage -o $@ $<
++
++man1/%.1 : %.xml $(manpage-prereqs)
++ mkdir -p man1
++ $(manpage-cmd) -o man1 $<
++
++html/%.html : %.txt $(ASCIIDOC_DEPS)
++ mkdir -p html
++ $(TXT_TO_HTML) -d manpage -o $@ $<
++
++man: man1/git-filter-repo.1
++html: html/git-filter-repo.html
+diff --git a/Makefile b/Makefile
+index a443450..d965ae5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -20,21 +20,10 @@ test:
+ fixup_locale:
+ sed -ie s%@@LOCALEDIR@@%$(localedir)% git-filter-repo
+
+-# People installing from tarball will already have man1/git-filter-repo.1 and
+-# html/git-filter-repo.html. But let's support people installing from a git
+-# clone too; for them, just cheat and snag a copy of the built docs that I
+-# record in a different branch.
+-snag_docs: Documentation/man1/git-filter-repo.1 Documentation/html/git-filter-repo.html
++doc:
++ $(MAKE) -C Documentation man html
+
+-Documentation/man1/git-filter-repo.1:
+- mkdir -p Documentation/man1
+- git show origin/docs:man1/git-filter-repo.1 >Documentation/man1/git-filter-repo.1
+-
+-Documentation/html/git-filter-repo.html:
+- mkdir -p Documentation/html
+- git show origin/docs:html/git-filter-repo.html >Documentation/html/git-filter-repo.html
+-
+-install: snag_docs #fixup_locale
++install: doc #fixup_locale
+ install -Dm0755 git-filter-repo "$(DESTDIR)/$(bindir)/git-filter-repo"
+ install -dm0755 "$(DESTDIR)/$(pythondir)"
+ ln -sf "$(bindir)/git-filter-repo" "$(DESTDIR)/$(pythondir)/git_filter_repo.py"
+
+base-commit: cbc6535694380d3a3bf3e5c96410d4ce7e8de94f
+--
+2.41.0
+
diff --git a/gnu/packages/patches/go-github-com-skip2-go-qrcode-fix-tests.patch b/gnu/packages/patches/go-github-com-skip2-go-qrcode-fix-tests.patch
new file mode 100644
index 0000000000..631cb0cdab
--- /dev/null
+++ b/gnu/packages/patches/go-github-com-skip2-go-qrcode-fix-tests.patch
@@ -0,0 +1,37 @@
+From dd203f29a36bf518deacbc03e8562b0195c8345f Mon Sep 17 00:00:00 2001
+From: Dominic Martinez <dom@dominicm.dev>
+Date: Mon, 4 Apr 2022 12:06:03 -0400
+Subject: [PATCH] Fix failing qr decode test
+
+First convert integers into runes before performing a string conversion.
+---
+ qrcode_decode_test.go | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/qrcode_decode_test.go b/qrcode_decode_test.go
+index 1f4b1d3..2b0756b 100644
+--- a/qrcode_decode_test.go
++++ b/qrcode_decode_test.go
+@@ -122,7 +122,7 @@ func TestDecodeAllCharacters(t *testing.T) {
+
+ // zbarimg has trouble with null bytes, hence start from ASCII 1.
+ for i := 1; i < 256; i++ {
+- content += string(i)
++ content += string(rune(i))
+ }
+
+ q, err := New(content, Low)
+@@ -154,7 +154,7 @@ func TestDecodeFuzz(t *testing.T) {
+ for j := 0; j < len; j++ {
+ // zbarimg seems to have trouble with special characters, test printable
+ // characters only for now.
+- content += string(32 + r.Intn(94))
++ content += string(rune(32 + r.Intn(94)))
+ }
+
+ for _, level := range []RecoveryLevel{Low, Medium, High, Highest} {
+
+base-commit: da1b6568686e89143e94f980a98bc2dbd5537f13
+--
+2.34.0
+
diff --git a/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch b/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch
deleted file mode 100644
index 436a11ad19..0000000000
--- a/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-diff --git a/configure.ac b/configure.ac
-index 107e6ca..20e9019 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -2,6 +2,7 @@ dnl Guile-Git --- GNU Guile bindings of libgit2
- dnl Copyright © 2016-2018 Erik Edrosa <erik.edrosa@gmail.com>
- dnl Copyright © 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
- dnl Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
-+dnl Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
- dnl
- dnl This file is part of Guile-Git.
- dnl
-@@ -43,15 +44,20 @@ AS_IF([test "x$LIBGIT2_LIBDIR" = "x"], [
- ])
- AC_SUBST([LIBGIT2_LIBDIR])
-
-+dnl Does the 'git_remote_callbacks' struct have a 'remote_ready' field?
-+dnl It was added in 1.2.0, obsoleting 'resolve_url'.
-+AC_CHECK_MEMBER([git_remote_callbacks.remote_ready],
-+ [HAVE_REMOTE_CALLBACKS_REMOTE_READY="#true"],
-+ [HAVE_REMOTE_CALLBACKS_REMOTE_READY="#false"],
-+ [[#include <git2.h>]])
-+AC_SUBST([HAVE_REMOTE_CALLBACKS_REMOTE_READY])
-+
- dnl Does the 'git_remote_callbacks' struct have a 'resolve_url' field?
- dnl It's missing in libgit2 0.28.5, added in 1.0.
--AC_CHECK_MEMBER([git_remote_callbacks.resolve_url], [], [],
-+AC_CHECK_MEMBER([git_remote_callbacks.resolve_url],
-+ [HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#true"],
-+ [HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#false"],
- [[#include <git2.h>]])
--if test "x$ac_cv_member_git_remote_callbacks_resolve_url" = "xyes"; then
-- HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#true"
--else
-- HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#false"
--fi
- AC_SUBST([HAVE_REMOTE_CALLBACKS_RESOLVE_URL])
-
- dnl Those binaries are required for ssh authentication tests.
-diff --git a/git/configuration.scm.in b/git/configuration.scm.in
-index c45f698..64c4360 100644
---- a/git/configuration.scm.in
-+++ b/git/configuration.scm.in
-@@ -19,11 +19,17 @@
-
- (define-module (git configuration)
- #:export (%libgit2
-+ %have-remote-callbacks-remote-ready?
- %have-remote-callbacks-resolve-url?))
-
- (define %libgit2
- "@LIBGIT2_LIBDIR@/libgit2")
-
-+(define %have-remote-callbacks-remote-ready?
-+ ;; True if the 'git_remote_callbacks' struct has a
-+ ;; 'remote_ready' field.
-+ @HAVE_REMOTE_CALLBACKS_REMOTE_READY@)
-+
- (define %have-remote-callbacks-resolve-url?
- ;; True if the 'git_remote_callbacks' struct has a 'resolve_url' field.
- @HAVE_REMOTE_CALLBACKS_RESOLVE_URL@)
-diff --git a/git/structs.scm b/git/structs.scm
-index ca51728..be3d050 100644
---- a/git/structs.scm
-+++ b/git/structs.scm
-@@ -637,6 +637,12 @@ type to 'specified for this to take effect."
- (push-update-reference ,(bs:pointer uint8))
- (push-negotiation ,(bs:pointer uint8))
- (transport ,(bs:pointer uint8))
-+
-+ ;; Added in libgit2 1.2.0.
-+ ,@(if %have-remote-callbacks-remote-ready?
-+ `((remote-ready ,(bs:pointer uint8)))
-+ '())
-+
- (payload ,(bs:pointer uint8))
-
- ;; libgit2 1.0 added this field, which is missing from 0.28.5,
diff --git a/gnu/packages/patches/i3status-rust-enable-unstable-features.patch b/gnu/packages/patches/i3status-rust-enable-unstable-features.patch
deleted file mode 100644
index 535b45d865..0000000000
--- a/gnu/packages/patches/i3status-rust-enable-unstable-features.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From 3006390c0058f06c255d9850327163aebcdc3b40 Mon Sep 17 00:00:00 2001
-From: Petr Hodina <phodina@protonmail.com>
-Date: Mon, 11 Oct 2021 22:35:39 +0200
-Subject: [PATCH] Enable unstable features.
-
-
-diff --git a/src/main.rs b/src/main.rs
-index d9e964b..820e22e 100644
---- a/src/main.rs
-+++ b/src/main.rs
-@@ -1,3 +1,6 @@
-+#![feature(bool_to_option)]
-+#![feature(clamp)]
-+
- #[macro_use]
- mod de;
- #[macro_use]
---
-2.33.0
-
diff --git a/gnu/packages/patches/libgeotiff-fix-tests-on-i386.patch b/gnu/packages/patches/libgeotiff-fix-tests-on-i386.patch
new file mode 100644
index 0000000000..e84f726a3d
--- /dev/null
+++ b/gnu/packages/patches/libgeotiff-fix-tests-on-i386.patch
@@ -0,0 +1,35 @@
+From 9990160268fafb71751d4f3a9ad724df70cb9451 Mon Sep 17 00:00:00 2001
+From: Bas Couwenberg <sebastic@xs4all.nl>
+Date: Fri, 1 Dec 2023 10:35:46 +0100
+Subject: [PATCH] Fix test failure on i386.
+
+---
+https://github.com/OSGeo/libgeotiff/pull/107
+
+ test/testlistgeo | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/test/testlistgeo b/test/testlistgeo
+index 48e92eb..ceec2e6 100755
+--- a/test/testlistgeo
++++ b/test/testlistgeo
+@@ -218,6 +218,9 @@ echo "" >>${OUT}
+ sed "s/ETRS89-extended/ETRS89/g" < ${OUT} > ${OUT}.tmp
+ mv ${OUT}.tmp ${OUT}
+
++sed "s/ProjCenterLongGeoKey: 46.437229 ( 46d26'14.02\"E)/ProjCenterLongGeoKey: 46.437229 ( 46d26'14.03\"E)/" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++
+ sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.normalized
+
+ sed "s/GCS: 4053\/Unspecified datum based upon the International 1924 Authalic Sphere/GCS: 10346\/NSIDC Authalic Sphere/g" < ${OUT} > ${OUT}.tmp
+@@ -230,6 +233,9 @@ mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+ sed "s/Datum: 6053\/Not specified (based on International 1924 Authalic Sphere)/Datum: 1360\/NSIDC International 1924 Authalic Sphere/g" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
+ mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+
++sed "s/ProjCenterLongGeoKey: 46.437229 ( 46d26'14.02\"E)/ProjCenterLongGeoKey: 46.437229 ( 46d26'14.03\"E)/" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
++
+ # do 'diff' with distribution results
+ # after cleaning for avoid spurios result due
+ # to different build dir
diff --git a/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch b/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch
new file mode 100644
index 0000000000..5d381d78e2
--- /dev/null
+++ b/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch
@@ -0,0 +1,51 @@
+From 3806fdab4a17f44641a2113faec778e756e2be3d Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Tue, 29 Aug 2023 19:04:25 +0200
+Subject: [PATCH] Fix 'make check' to pass with PROJ 9.3 (fixes #89)
+
+---
+https://github.com/OSGeo/libgeotiff/pull/90
+
+ test/testlistgeo | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/test/testlistgeo b/test/testlistgeo
+index 9a41e74..48e92eb 100755
+--- a/test/testlistgeo
++++ b/test/testlistgeo
+@@ -218,14 +218,24 @@ echo "" >>${OUT}
+ sed "s/ETRS89-extended/ETRS89/g" < ${OUT} > ${OUT}.tmp
+ mv ${OUT}.tmp ${OUT}
+
+-sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.tmp
++sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.normalized
++
++sed "s/GCS: 4053\/Unspecified datum based upon the International 1924 Authalic Sphere/GCS: 10346\/NSIDC Authalic Sphere/g" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++sed "s/Datum: 6053\/Not specified (based on International 1924 Authalic Sphere)/Datum: 1360\/NSIDC International 1924 Authalic Sphere/g" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++
++sed "s/GCS: 4053\/Unspecified datum based upon the International 1924 Authalic Sphere/GCS: 10346\/NSIDC Authalic Sphere/g" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
++sed "s/Datum: 6053\/Not specified (based on International 1924 Authalic Sphere)/Datum: 1360\/NSIDC International 1924 Authalic Sphere/g" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+
+ # do 'diff' with distribution results
+ # after cleaning for avoid spurios result due
+ # to different build dir
+ sed -e "s/Testing listgeo .*test/Testing listgeo ..\/test/" -i ${OUT}
+ echo "diff ${OUT} with testlistgeo_out.dist"
+-diff -u ${OUT} testlistgeo_out.dist.tmp
++diff -u ${OUT} testlistgeo_out.dist.normalized
+ if [ $? -ne 0 ] ; then
+ echo ""
+ echo "PROBLEMS HAVE OCCURRED"
+@@ -236,7 +246,7 @@ else
+ echo "TEST OK"
+ echo "test file ${OUT} removed"
+ echo
+- rm testlistgeo_out.dist.tmp
++ rm testlistgeo_out.dist.normalized
+ /bin/rm -f ${OUT}
+ exit 0
+ fi
diff --git a/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch b/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch
new file mode 100644
index 0000000000..e9a28d1fcd
--- /dev/null
+++ b/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch
@@ -0,0 +1,40 @@
+From 4f90e57fa1cac7afdd57e5f649775cb24aa15612 Mon Sep 17 00:00:00 2001
+From: Bas Couwenberg <sebastic@xs4all.nl>
+Date: Fri, 1 Dec 2023 08:23:20 +0100
+Subject: [PATCH] Fix test failure with PROJ 9.3.1.
+
+Closes: #104
+---
+https://github.com/OSGeo/libgeotiff/pull/105
+
+ test/testlistgeo | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/test/testlistgeo b/test/testlistgeo
+index 48e92eb..4331cc3 100755
+--- a/test/testlistgeo
++++ b/test/testlistgeo
+@@ -218,6 +218,11 @@ echo "" >>${OUT}
+ sed "s/ETRS89-extended/ETRS89/g" < ${OUT} > ${OUT}.tmp
+ mv ${OUT}.tmp ${OUT}
+
++sed "s/Projection = 15914 (BLM zone 14N (US survey .*))/Projection = 15914 (BLM zone 14N)/g" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++sed "s/Projection = 6753 (Oregon Columbia River West zone (.*))/Projection = 6753 (Oregon Columbia River West zone)/" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++
+ sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.normalized
+
+ sed "s/GCS: 4053\/Unspecified datum based upon the International 1924 Authalic Sphere/GCS: 10346\/NSIDC Authalic Sphere/g" < ${OUT} > ${OUT}.tmp
+@@ -230,6 +235,11 @@ mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+ sed "s/Datum: 6053\/Not specified (based on International 1924 Authalic Sphere)/Datum: 1360\/NSIDC International 1924 Authalic Sphere/g" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
+ mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+
++sed "s/Projection = 15914 (BLM zone 14N (US survey .*))/Projection = 15914 (BLM zone 14N)/" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
++sed "s/Projection = 6753 (Oregon Columbia River West zone (.*))/Projection = 6753 (Oregon Columbia River West zone)/" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
++
+ # do 'diff' with distribution results
+ # after cleaning for avoid spurios result due
+ # to different build dir
diff --git a/gnu/packages/patches/librime-fix-build-with-gcc10.patch b/gnu/packages/patches/librime-fix-build-with-gcc10.patch
deleted file mode 100644
index 49ad011b57..0000000000
--- a/gnu/packages/patches/librime-fix-build-with-gcc10.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From: Felix Gruber <felgru@posteo.net>
-Date: Mon, 6 Sep 2021 19:38:17 +0200
-Subject: [PATCH] Add missing <cmath> includes
-
-Fix a build failure with GCC 10 that manifests like this:
-
-------
-/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc: In member function ‘void rime::ScriptTranslation::PrepareCandidate()’:
-/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc:490:23: error: ‘exp’ was not declared in this scope
- 490 | cand->set_quality(exp(entry->weight) +
- | ^~~
-/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc:504:23: error: ‘exp’ was not declared in this scope
- 504 | cand->set_quality(exp(entry->weight) +
- | ^~~
-make[2]: *** [src/CMakeFiles/rime.dir/build.make:1241: src/CMakeFiles/rime.dir/rime/gear/script_translator.cc.o] Error 1
-------
-
-diff --git a/src/rime/gear/script_translator.cc b/src/rime/gear/script_translator.cc
-index 4a45f05..515c8db 100644
---- a/src/rime/gear/script_translator.cc
-+++ b/src/rime/gear/script_translator.cc
-@@ -7,6 +7,7 @@
- // 2011-07-10 GONG Chen <chen.sst@gmail.com>
- //
- #include <algorithm>
-+#include <cmath>
- #include <stack>
- #include <boost/algorithm/string/join.hpp>
- #include <boost/range/adaptor/reversed.hpp>
-diff --git a/src/rime/gear/table_translator.cc b/src/rime/gear/table_translator.cc
-index 162ac02..dbea76a 100644
---- a/src/rime/gear/table_translator.cc
-+++ b/src/rime/gear/table_translator.cc
-@@ -4,6 +4,7 @@
- //
- // 2011-07-10 GONG Chen <chen.sst@gmail.com>
- //
-+#include <cmath>
- #include <boost/algorithm/string.hpp>
- #include <boost/range/adaptor/reversed.hpp>
- #include <utf8.h>
diff --git a/gnu/packages/patches/lugaru-fix-sound.patch b/gnu/packages/patches/lugaru-fix-sound.patch
new file mode 100644
index 0000000000..742908c977
--- /dev/null
+++ b/gnu/packages/patches/lugaru-fix-sound.patch
@@ -0,0 +1,32 @@
+From 3adfb088eed81fc2c9e40ac55018378d4975f469 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Sun, 28 Jan 2024 19:50:51 -0500
+Subject: [PATCH] audio: Look extension from right, not left.
+
+* Source/Audio/openal_wrapper.cpp (decode_to_pcm): Find extension from
+the right (strrchr), not from the left, to avoid eagerly truncating a
+file name.
+
+Fixes: https://gitlab.com/osslugaru/lugaru/-/issues/124#note_1746570172
+---
+ Source/Audio/openal_wrapper.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/Audio/openal_wrapper.cpp b/Source/Audio/openal_wrapper.cpp
+index cc4fc36..072fcb8 100644
+--- a/Source/Audio/openal_wrapper.cpp
++++ b/Source/Audio/openal_wrapper.cpp
+@@ -316,7 +316,7 @@ static void* decode_to_pcm(const char* _fname, ALenum& format, ALsizei& size, AL
+ // !!! FIXME: if it's not Ogg, we don't have a decoder. I'm lazy. :/
+ char* fname = (char*)alloca(strlen(_fname) + 16);
+ strcpy(fname, _fname);
+- char* ptr = strchr(fname, '.');
++ char* ptr = strrchr(fname, '.');
+ if (ptr) {
+ *ptr = '\0';
+ }
+
+base-commit: 6a58b62858d9c3c3630abf00bf43075f65a09d38
+--
+2.41.0
+
diff --git a/gnu/packages/patches/maturin-no-cross-compile.patch b/gnu/packages/patches/maturin-no-cross-compile.patch
index 7394d0854e..98af33d3c7 100644
--- a/gnu/packages/patches/maturin-no-cross-compile.patch
+++ b/gnu/packages/patches/maturin-no-cross-compile.patch
@@ -2,27 +2,27 @@ Remove dependencies on xwin and zig. We're not offering cross-compilation
options using these crates.
diff --git a/Cargo.toml b/Cargo.toml
-index 6cbdca3..22ea5ef 100644
+index 6704e46..ff126a9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
-@@ -76,16 +76,6 @@ version = "0.1.4"
+@@ -83,16 +83,6 @@ version = "0.1.16"
[dependencies.cargo-options]
- version = "0.6.0"
+ version = "0.7.2"
-[dependencies.cargo-xwin]
--version = "0.14.3"
+-version = "0.16.2"
-optional = true
-default-features = false
-
-[dependencies.cargo-zigbuild]
--version = "0.16.10"
+-version = "0.18.0"
-optional = true
-default-features = false
-
[dependencies.cargo_metadata]
- version = "0.15.3"
+ version = "0.18.0"
-@@ -310,8 +300,6 @@ version = "4.3.0"
+@@ -321,8 +311,6 @@ version = "5.0.0"
[features]
cli-completion = ["dep:clap_complete_command"]
cross-compile = [
@@ -31,7 +31,7 @@ index 6cbdca3..22ea5ef 100644
]
default = [
"full",
-@@ -330,7 +318,6 @@ log = ["tracing-subscriber"]
+@@ -341,7 +329,6 @@ log = ["tracing-subscriber"]
native-tls = [
"dep:native-tls",
"ureq?/native-tls",
@@ -39,7 +39,7 @@ index 6cbdca3..22ea5ef 100644
"dep:rustls-pemfile",
]
password-storage = [
-@@ -340,7 +327,6 @@ password-storage = [
+@@ -351,7 +338,6 @@ password-storage = [
rustls = [
"dep:rustls",
"ureq?/tls",
@@ -47,7 +47,7 @@ index 6cbdca3..22ea5ef 100644
"dep:rustls-pemfile",
]
scaffolding = [
-@@ -358,5 +344,3 @@ upload = [
+@@ -369,5 +355,3 @@ upload = [
"wild",
"dep:dirs",
]
diff --git a/gnu/packages/patches/notmuch-emacs-test-output.patch b/gnu/packages/patches/notmuch-emacs-test-output.patch
deleted file mode 100644
index 3c6d472d6b..0000000000
--- a/gnu/packages/patches/notmuch-emacs-test-output.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From e9e779ead4d703ad423e46c23abd0c9afd7d5ed2 Mon Sep 17 00:00:00 2001
-From: Arjan Adriaanse <arjan@adriaan.se>
-Date: Tue, 15 Aug 2023 00:00:05 +0200
-Subject: [PATCH] test: fix expected output for Emacs 29
-
----
- test/T453-emacs-reply.sh | 1 -
- test/T454-emacs-dont-reply-names.sh | 9 +++------
- .../notmuch-reply-duplicate-4 | 1 -
- 3 files changed, 3 insertions(+), 8 deletions(-)
-
-diff --git a/test/T453-emacs-reply.sh b/test/T453-emacs-reply.sh
-index 0a27d066..de400b85 100755
---- a/test/T453-emacs-reply.sh
-+++ b/test/T453-emacs-reply.sh
-@@ -17,7 +17,6 @@ cat <<EOF > EXPECTED
- From: Notmuch Test Suite <test_suite@notmuchmail.org>
- To: Antoine Beaupré <anarcat@orangeseeds.org>
- Subject: Re: bug: "no top level messages" crash on Zen email loops
--In-Reply-To: <874llc2bkp.fsf@curie.anarc.at>
- Fcc: MAIL_DIR/sent
- --text follows this line--
- Antoine Beaupré <anarcat@orangeseeds.org> writes:
-diff --git a/test/T454-emacs-dont-reply-names.sh b/test/T454-emacs-dont-reply-names.sh
-index 3a770177..9ed4f18b 100755
---- a/test/T454-emacs-dont-reply-names.sh
-+++ b/test/T454-emacs-dont-reply-names.sh
-@@ -17,13 +17,12 @@ test_emacs '(let ((message-dont-reply-to-names "notmuchmail\\|noreply\\|harvard"
- (test-visible-output "OUTPUT-FULL.raw"))'
-
- notmuch_dir_sanitize < OUTPUT-FULL.raw > OUTPUT-FULL
--head -6 OUTPUT-FULL > OUTPUT
-+head -5 OUTPUT-FULL > OUTPUT
-
- cat <<EOF > EXPECTED
- From: Notmuch Test Suite <test_suite@notmuchmail.org>
- To: Mikhail Gusarov <dottedmag@dottedmag.net>
- Subject: Re: [notmuch] Working with Maildir storage?
--In-Reply-To: <20091117203301.GV3165@dottiness.seas.harvard.edu>
- Fcc: MAIL_DIR/sent
- --text follows this line--
- EOF
-@@ -38,14 +37,13 @@ test_emacs '(let ((message-dont-reply-to-names
- (test-visible-output "OUTPUT-FULL-PRED.raw"))'
-
- notmuch_dir_sanitize < OUTPUT-FULL-PRED.raw > OUTPUT-FULL-PRED
--head -7 OUTPUT-FULL-PRED > OUTPUT-PRED
-+head -6 OUTPUT-FULL-PRED > OUTPUT-PRED
-
- cat <<EOF > EXPECTED-PRED
- From: Notmuch Test Suite <test_suite@notmuchmail.org>
- To: Lars Kellogg-Stedman <lars@seas.harvard.edu>
- Cc: notmuch@notmuchmail.org
- Subject: Re: [notmuch] Working with Maildir storage?
--In-Reply-To: <20091117203301.GV3165@dottiness.seas.harvard.edu>
- Fcc: MAIL_DIR/sent
- --text follows this line--
- EOF
-@@ -59,14 +57,13 @@ test_emacs '(let ((message-dont-reply-to-names nil))
- (test-visible-output "OUTPUT-FULL-NIL.raw"))'
-
- notmuch_dir_sanitize < OUTPUT-FULL-NIL.raw > OUTPUT-FULL-NIL
--head -7 OUTPUT-FULL-NIL > OUTPUT-NIL
-+head -6 OUTPUT-FULL-NIL > OUTPUT-NIL
-
- cat <<EOF > EXPECTED-NIL
- From: Notmuch Test Suite <test_suite@notmuchmail.org>
- To: Lars Kellogg-Stedman <lars@seas.harvard.edu>, Mikhail Gusarov <dottedmag@dottedmag.net>
- Cc: notmuch@notmuchmail.org
- Subject: Re: [notmuch] Working with Maildir storage?
--In-Reply-To: <20091117203301.GV3165@dottiness.seas.harvard.edu>
- Fcc: MAIL_DIR/sent
- --text follows this line--
- EOF
-diff --git a/test/emacs-reply.expected-output/notmuch-reply-duplicate-4 b/test/emacs-reply.expected-output/notmuch-reply-duplicate-4
-index 836f77b1..44b8c7a6 100644
---- a/test/emacs-reply.expected-output/notmuch-reply-duplicate-4
-+++ b/test/emacs-reply.expected-output/notmuch-reply-duplicate-4
-@@ -1,7 +1,6 @@
- From: Notmuch Test Suite <test_suite@notmuchmail.org>
- To: Sean Whitton <spwhitton@spwhitton.name>, 916811@bugs.debian.org, 916805@bugs.debian.org, 916807@bugs.debian.org, 916808@bugs.debian.org, 916809@bugs.debian.org, 916811@bugs.debian.org, 916867@bugs.debian.org, 916869@bugs.debian.org, 916872@bugs.debian.org, 916875@bugs.debian.org, 916876@bugs.debian.org
- Subject: Re: [Pkg-emacsen-addons] Bug#916811: Increase severity to 'serious'
--In-Reply-To: <87r2ecrr6x.fsf@zephyr.silentflame.com>
- Fcc: MAIL_DIR/sent
- --text follows this line--
- Sean Whitton <spwhitton@spwhitton.name> writes:
---
-2.41.0
-
diff --git a/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch b/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch
deleted file mode 100644
index 2c344af821..0000000000
--- a/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From aeca7656f499d7f4595319858f242276920e31bb Mon Sep 17 00:00:00 2001
-From: Louis Gesbert <louis.gesbert@ocamlpro.com>
-Date: Sat, 2 Dec 2017 12:51:01 +0100
-Subject: [PATCH] Fix for ocaml 4.06
-
----
- common/criteria_lexer.mll | 8 ++++----
- common/util.ml | 2 +-
- 2 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/common/criteria_lexer.mll b/common/criteria_lexer.mll
-index 71f9178..fc4eae3 100644
---- a/common/criteria_lexer.mll
-+++ b/common/criteria_lexer.mll
-@@ -18,7 +18,7 @@
- let c = Lexing.lexeme_char lexbuf 2 in (* the delimiter can be any character *)
- (* find the terminating delimiter *)
- let endpos =
-- try String.index_from lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) c with
-+ try Bytes.index_from lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) c with
- |Invalid_argument _ ->
- raise (Format822.Syntax_error (
- Format822.error lexbuf "String too short"))
-@@ -27,9 +27,9 @@
- Format822.error lexbuf (Printf.sprintf "cannot find: %c" c)))
- in
- let len = endpos - (lexbuf.lex_start_pos + 3) in
-- let s = String.sub lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) len in
-- lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_start_pos + ((String.length s)+4);
-- s
-+ let s = Bytes.sub lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) len in
-+ lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_start_pos + ((Bytes.length s)+4);
-+ Bytes.to_string s
-
- }
-
-diff --git a/common/util.ml b/common/util.ml
-index 598f266..36ca3d1 100644
---- a/common/util.ml
-+++ b/common/util.ml
-@@ -87,7 +87,7 @@ module MakeMessages(X : sig val label : string end) = struct
- let clean label =
- try
- let s = Filename.chop_extension (Filename.basename label) in
-- String.capitalize s
-+ String.capitalize_ascii s
- with Invalid_argument _ -> label
-
- let create ?(enabled=false) label =
---
-2.11.0
-
diff --git a/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch b/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch
deleted file mode 100644
index 41494e7b3c..0000000000
--- a/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From b5314c20d8e3caf62fe0dc96ad937a2950158b23 Mon Sep 17 00:00:00 2001
-From: Louis Gesbert <louis.gesbert@ocamlpro.com>
-Date: Thu, 2 Mar 2017 12:19:56 +0100
-Subject: [PATCH] Install mli, cmx, etc.
-
----
- Makefile | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 09464ff..5044d7f 100644
---- a/Makefile
-+++ b/Makefile
-@@ -56,7 +56,7 @@ $(DOSELIBS)/cudf.%:
- @for i in _build/cudf/cudf.*; do \
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -67,7 +67,7 @@ $(DOSELIBS)/common.%: common/*.ml common/*.mli
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -78,7 +78,7 @@ $(DOSELIBS)/versioning.%: versioning/*.ml versioning/*.mli
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -88,7 +88,7 @@ $(DOSELIBS)/algo.%: algo/*.ml algo/*.mli $(DOSELIBS)/common.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -98,7 +98,7 @@ $(DOSELIBS)/debian.%: deb/*.ml deb/*.mli $(DOSELIBS)/pef.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -108,7 +108,7 @@ $(DOSELIBS)/opam.%: opam/*.ml opam/*.mli $(DOSELIBS)/pef.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -118,7 +118,7 @@ $(DOSELIBS)/npm.%: npm/*.ml npm/*.mli $(DOSELIBS)/versioning.% $(DOSELIBS)/pef.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -128,7 +128,7 @@ $(DOSELIBS)/rpm.%: rpm/*.ml $(DOSELIBS)/algo.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -138,7 +138,7 @@ $(DOSELIBS)/pef.%: pef/*.ml pef/*.mli
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -148,7 +148,7 @@ $(DOSELIBS)/csw.%: opencsw/*.ml $(DOSELIBS)/versioning.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -158,7 +158,7 @@ $(DOSELIBS)/doseparse.%: $(DOSELIBS)/pef.% $(DOSELIBS)/debian.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx $(DOSELIBS)/*.ml ; \
-+ rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.ml ; \
- fi ; \
- done
-
-@@ -168,7 +168,7 @@ $(DOSELIBS)/doseparseNoRpm.%: $(DOSELIBS)/pef.% $(DOSELIBS)/debian.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ;\
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ;\
-+ rm -f $(DOSELIBS)/*.mlpack ;\
- fi ; \
- done
-
-@@ -223,7 +223,7 @@ INSTALL_STUFF_ = META
- INSTALL_STUFF_ += $(wildcard _build/doselibs/*.cma _build/doselibs/*.cmi)
- INSTALL_STUFF_ += $(wildcard _build/doselibs/*.cmxa _build/doselibs/*.cmxs)
- INSTALL_STUFF_ += $(wildcard _build/doselibs/*.a)
--#INSTALL_STUFF_ += $(wildcard _build/*/*.mli)
-+INSTALL_STUFF_ += $(wildcard _build/doselibs/*.mli) $(wildcard _build/doselibs/*.cmti) $(wildcard _build/doselibs/*.cmx)
- INSTALL_STUFF_ += $(wildcard _build/rpm/*.so)
-
- exclude_cudf = $(wildcard _build/doselibs/*cudf* _build/cudf/*)
---
-2.11.0
-
diff --git a/gnu/packages/patches/ocaml-dose3-add-unix-dependency.patch b/gnu/packages/patches/ocaml-dose3-add-unix-dependency.patch
deleted file mode 100644
index d2cc44c784..0000000000
--- a/gnu/packages/patches/ocaml-dose3-add-unix-dependency.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From b94cf24739818e5aff397e0a83b19ea32dc81f42 Mon Sep 17 00:00:00 2001
-From: Louis Gesbert <louis.gesbert@ocamlpro.com>
-Date: Tue, 6 Feb 2018 10:15:45 +0100
-Subject: [PATCH 3/3] Add "unix" as dependency to dose3.common in META.in
-
----
- META.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/META.in b/META.in
-index aa2cd8d..0f9d337 100644
---- a/META.in
-+++ b/META.in
-@@ -8,7 +8,7 @@ package "common" (
- version = "@PACKAGE_VERSION@"
- archive(byte) = "common.cma"
- archive(native) = "common.cmxa"
--requires = "extlib, re.pcre, cudf, @ZIP@, @BZ2@"
-+requires = "extlib, re.pcre, cudf, unix, @ZIP@, @BZ2@"
- )
-
- package "algo" (
---
-2.11.0
-
diff --git a/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch b/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch
deleted file mode 100644
index 84b6a3b81b..0000000000
--- a/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch
+++ /dev/null
@@ -1,9 +0,0 @@
---- a/configure
-+++ b/configure
-@@ -6552,6 +6552,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
- $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
- fi
--
--
--make printconf
diff --git a/gnu/packages/patches/python-flint-includes.patch b/gnu/packages/patches/python-flint-includes.patch
deleted file mode 100644
index c0cfe94a04..0000000000
--- a/gnu/packages/patches/python-flint-includes.patch
+++ /dev/null
@@ -1,131 +0,0 @@
-The following patch, authored by Andreas Enge, looks for the flint include
-files in the correct subdirectory.
-
-diff -u -r python-flint-old/src/flint.pxd python-flint-new/src/flint.pxd
---- python-flint-old/src/flint.pxd 2019-03-19 10:26:11.055748626 +0100
-+++ python-flint-new/src/flint.pxd 2019-03-19 10:35:23.269341203 +0100
-@@ -27,7 +27,7 @@
-
- ctypedef long fmpz_struct
-
--cdef extern from "flint.h":
-+cdef extern from "flint/flint.h":
- ctypedef void * flint_rand_t
- void flint_randinit(flint_rand_t state)
- void flint_randclear(flint_rand_t state)
-@@ -35,7 +35,7 @@
- long flint_get_num_threads()
- void flint_cleanup()
-
--cdef extern from "nmod_vec.h":
-+cdef extern from "flint/nmod_vec.h":
- ctypedef struct nmod_t:
- mp_limb_t n
- mp_limb_t ninv
-@@ -47,7 +47,7 @@
- mp_limb_t nmod_mul(mp_limb_t a, mp_limb_t b, nmod_t mod)
- mp_limb_t nmod_div(mp_limb_t a, mp_limb_t b, nmod_t mod)
-
--cdef extern from "nmod_poly.h":
-+cdef extern from "flint/nmod_poly.h":
- ctypedef struct nmod_poly_struct:
- mp_ptr coeffs
- long alloc
-@@ -129,7 +129,7 @@
- void nmod_poly_factor_init(nmod_poly_factor_t fac)
- void nmod_poly_factor_clear(nmod_poly_factor_t fac)
-
--cdef extern from "nmod_mat.h":
-+cdef extern from "flint/nmod_mat.h":
- ctypedef struct nmod_mat_struct:
- mp_limb_t * entries
- long r
-@@ -178,7 +178,7 @@
- long nmod_mat_rref(nmod_mat_t A)
- long nmod_mat_nullspace(nmod_mat_t X, nmod_mat_t A)
-
--cdef extern from "fmpz.h":
-+cdef extern from "flint/fmpz.h":
- ctypedef fmpz_struct fmpz_t[1]
- int COEFF_IS_MPZ(fmpz_struct v)
- void fmpz_init(fmpz_t op)
-@@ -268,7 +268,7 @@
- void fmpz_rfac_uiui(fmpz_t r, ulong x, ulong n)
- void fmpz_primorial(fmpz_t res, ulong n)
-
--cdef extern from "fmpz_factor.h":
-+cdef extern from "flint/fmpz_factor.h":
- ctypedef struct fmpz_factor_struct:
- int sign
- fmpz_struct * p
-@@ -280,7 +280,7 @@
- void fmpz_factor_clear(fmpz_factor_t factor)
- void fmpz_factor(fmpz_factor_t factor, fmpz_t n)
-
--cdef extern from "fmpz_poly.h":
-+cdef extern from "flint/fmpz_poly.h":
- ctypedef struct fmpz_poly_struct:
- fmpz_struct * coeffs
- long alloc
-@@ -390,14 +390,14 @@
- void fmpz_poly_cos_minpoly(fmpz_poly_t, ulong)
- void fmpz_poly_swinnerton_dyer(fmpz_poly_t, ulong)
-
--cdef extern from "fmpz_poly_factor.h":
-+cdef extern from "flint/fmpz_poly_factor.h":
- void fmpz_poly_factor_init(fmpz_poly_factor_t fac)
- void fmpz_poly_factor_clear(fmpz_poly_factor_t fac)
- void fmpz_poly_factor_zassenhaus(fmpz_poly_factor_t fac, fmpz_poly_t G)
- void fmpz_poly_factor(fmpz_poly_factor_t fac, fmpz_poly_t G)
- void fmpz_poly_factor_squarefree(fmpz_poly_factor_t fac, fmpz_poly_t G)
-
--cdef extern from "fmpz_mat.h":
-+cdef extern from "flint/fmpz_mat.h":
- ctypedef struct fmpz_mat_struct:
- fmpz_struct * entries
- long r
-@@ -448,7 +448,7 @@
- void fmpz_mat_snf(fmpz_mat_t S, const fmpz_mat_t A)
- int fmpz_mat_is_in_snf(const fmpz_mat_t A)
-
--cdef extern from "fmpz_lll.h":
-+cdef extern from "flint/fmpz_lll.h":
- ctypedef struct fmpz_lll_struct:
- double delta
- double eta
-@@ -461,7 +461,7 @@
- void fmpz_lll(fmpz_mat_t B, fmpz_mat_t U, const fmpz_lll_t fl)
-
-
--cdef extern from "fmpq.h":
-+cdef extern from "flint/fmpq.h":
- ctypedef struct fmpq_struct:
- fmpz_struct num
- fmpz_struct den
-@@ -506,7 +506,7 @@
- void fmpq_next_signed_minimal(fmpq_t res, fmpq_t x)
- void fmpq_harmonic_ui(fmpq_t res, ulong n)
-
--cdef extern from "fmpq_poly.h":
-+cdef extern from "flint/fmpq_poly.h":
- ctypedef struct fmpq_poly_struct:
- fmpz_struct * coeffs
- fmpz_t den
-@@ -620,7 +620,7 @@
- void fmpq_poly_compose_series(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, long n)
- void fmpq_poly_revert_series(fmpq_poly_t res, fmpq_poly_t poly1, long n)
-
--cdef extern from "fmpq_mat.h":
-+cdef extern from "flint/fmpq_mat.h":
- ctypedef struct fmpq_mat_struct:
- fmpq_struct * entries
- long r
-@@ -672,7 +672,7 @@
- long fmpq_mat_rref(fmpq_mat_t B, fmpq_mat_t A)
- void fmpq_mat_transpose(fmpq_mat_t B, fmpq_mat_t A)
-
--cdef extern from "arith.h":
-+cdef extern from "flint/arith.h":
- void arith_number_of_partitions(fmpz_t res, ulong n)
- int arith_moebius_mu(fmpz_t n)
- void arith_divisor_sigma(fmpz_t v, fmpz_t n, ulong k)
diff --git a/gnu/packages/patches/python-telingo-fix-comparison.patch b/gnu/packages/patches/python-telingo-fix-comparison.patch
deleted file mode 100644
index 6d05048dcb..0000000000
--- a/gnu/packages/patches/python-telingo-fix-comparison.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: source/telingo/transformers/head.py
-===================================================================
---- source.orig/telingo/transformers/head.py
-+++ source/telingo/transformers/head.py
-@@ -564,10 +564,12 @@ class HeadTransformer:
- cond = []
- diff = _ast.BinaryOperation(loc, _ast.BinaryOperator.Minus, param, shift)
- if lhs.ast_type != _ast.ASTType.SymbolicTerm or lhs.symbol.type != _clingo.SymbolType.Number or lhs.symbol.number > 0:
-- cond.append(_ast.Literal(loc, _ast.Sign.NoSign, _ast.Comparison(_ast.ComparisonOperator.LessEqual, lhs, diff)))
-+ cond.append(_ast.Literal(loc, _ast.Sign.NoSign,
-+ _ast.Comparison(lhs, [_ast.Guard(_ast.ComparisonOperator.LessEqual, diff)])))
-
- if rhs.ast_type != _ast.ASTType.SymbolicTerm or rhs.symbol.type != _clingo.SymbolType.Supremum:
-- cond.append(_ast.Literal(loc, _ast.Sign.NoSign, _ast.Comparison(_ast.ComparisonOperator.LessEqual, diff, rhs)))
-+ cond.append(_ast.Literal(loc, _ast.Sign.NoSign,
-+ _ast.Comparison(diff, [_ast.Guard(_ast.ComparisonOperator.LessEqual, rhs)])))
-
- elems.extend([_ast.ConditionalLiteral(loc, _ast.Literal(loc, _ast.Sign.NoSign, head), cond) for head in heads])
-
diff --git a/gnu/packages/patches/r-sapa-lapack.patch b/gnu/packages/patches/r-sapa-lapack.patch
new file mode 100644
index 0000000000..1911b133c5
--- /dev/null
+++ b/gnu/packages/patches/r-sapa-lapack.patch
@@ -0,0 +1,23 @@
+From 5eb1faf8ee2eac3057ef55c99dd3083242559b9e Mon Sep 17 00:00:00 2001
+From: dbpercival <dbpercival@gmail.com>
+Date: Sat, 8 Jul 2023 16:26:35 -0700
+Subject: [PATCH] Update sapa_lapack.c
+
+Stephen's suggested change
+---
+ src/sapa_lapack.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sapa_lapack.c b/src/sapa_lapack.c
+index eff4851..a520e33 100644
+--- a/src/sapa_lapack.c
++++ b/src/sapa_lapack.c
+@@ -102,7 +102,7 @@ SEXP R_sapa_dpss(SEXP nsample, SEXP ntaper, SEXP bandwidth)
+ ISPLIT,
+ WORK1,
+ IWORK1,
+- &INFO);
++ &INFO FCONE FCONE);
+ // if (INFO != 0)
+ // error(_("error code %d from LAPACK routine '%s'"), info, "dstebz");
+
diff --git a/gnu/packages/patches/r-sgloptim.patch b/gnu/packages/patches/r-sgloptim.patch
new file mode 100644
index 0000000000..efba2c7013
--- /dev/null
+++ b/gnu/packages/patches/r-sgloptim.patch
@@ -0,0 +1,53 @@
+From cb9a15eb9d558b2b4b67f9e6806b394f65bff01f Mon Sep 17 00:00:00 2001
+From: Dirk Eddelbuettel <edd@debian.org>
+Date: Wed, 30 Nov 2022 20:15:42 -0600
+Subject: [PATCH] Simplify includes and only include RcppArmadillo.h
+
+---
+ inst/include/sgl.h | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
+
+diff --git a/inst/include/sgl.h b/inst/include/sgl.h
+index a36011e..869a295 100644
+--- a/inst/include/sgl.h
++++ b/inst/include/sgl.h
+@@ -21,13 +21,12 @@
+
+ #define R_NO_REMAP
+
++//R, Rcpp, RcppArmadillo
++#include <RcppArmadillo.h>
++
+ //Progress monitor
+ #include <progress.hpp>
+
+-//Rcpp ect
+-#include <RcppCommon.h>
+-#include <Rconfig.h>
+-#include <RcppArmadilloConfig.h>
+
+ // Debugging
+ #ifdef SGL_DEBUG
+@@ -45,8 +44,10 @@
+ #else
+ // Do no debugging
+ #define ARMA_NO_DEBUG
++#ifndef NDEBUG
+ #define NDEBUG
+ #endif
++#endif
+
+ // Registration helper macros
+ #define STR_VALUE(x) #x
+@@ -59,11 +60,6 @@
+
+ #define CALL_METHOD(METHOD, MODULE, ARGS) {GET_STR_VALUE(FUN_NAME(METHOD,MODULE)), (DL_FUNC) &r_ ## MODULE ## _ ## METHOD, ARGS}
+
+-//Support for xl matrices
+-//#define ARMA_64BIT_WORD
+-
+-#include <armadillo>
+-#include <Rcpp.h>
+
+ //Boost
+ #include <boost/math/special_functions/fpclassify.hpp>
diff --git a/gnu/packages/patches/range-v3-build-with-gcc10.patch b/gnu/packages/patches/range-v3-build-with-gcc10.patch
deleted file mode 100644
index a5d5b33523..0000000000
--- a/gnu/packages/patches/range-v3-build-with-gcc10.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 0487cca29e352e8f16bbd91fda38e76e39a0ed28 Mon Sep 17 00:00:00 2001
-From: Louis Dionne <ldionne.2@gmail.com>
-Date: Tue, 15 Jun 2021 14:40:01 -0400
-Subject: [PATCH] Work around broken integration with latest libc++. (#1635)
-
-* Work around broken integration with latest libc++.
-
-In newer versions of libc++, the base template of std::iterator_traits
-provides a member typedef called __primary_template which is an alias
-to the std::iterator_traits specialization itself. This fix works with
-both the old version of libc++ and the new one.
-
-Fixes issue #1633.
-
-* Fix is_std_iterator_traits_specialized_v on MSVC
-
-It used to pretend that std::iterator_traits<T*> is a user-defined
-specialization, which isn't the case. This is due to MSVC's
-iterator_traits<T*> specialization not posing as the base template.
----
- include/std/detail/associated_types.hpp | 22 +++++++++++-----
- test/CMakeLists.txt | 1 +
- test/bug1633.cpp | 34 +++++++++++++++++++++++++
- 3 files changed, 51 insertions(+), 6 deletions(-)
- create mode 100644 test/bug1633.cpp
-
-diff --git a/include/std/detail/associated_types.hpp b/include/std/detail/associated_types.hpp
-index b642166d4..449a3f91c 100644
---- a/include/std/detail/associated_types.hpp
-+++ b/include/std/detail/associated_types.hpp
-@@ -265,11 +265,22 @@ namespace ranges
- template<typename I>
- char is_std_iterator_traits_specialized_impl_(void *);
- #elif defined(_LIBCPP_VERSION)
-- template<typename I, bool B>
-- char (
-- &is_std_iterator_traits_specialized_impl_(std::__iterator_traits<I, B> *))[2];
-+ // In older versions of libc++, the base template inherits from std::__iterator_traits<typename, bool>.
-+ template<template<typename, bool> class IteratorTraitsBase, typename I, bool B>
-+ char (&libcpp_iterator_traits_base_impl(IteratorTraitsBase<I, B> *))[2];
-+ template<template<typename, bool> class IteratorTraitsBase, typename I>
-+ char libcpp_iterator_traits_base_impl(void *);
-+
-+ // In newer versions, the base template has only one template parameter and provides the
-+ // __primary_template typedef which aliases the iterator_traits specialization.
-+ template<template<typename> class, typename I>
-+ char (&libcpp_iterator_traits_base_impl(typename std::iterator_traits<I>::__primary_template *))[2];
-+ template<template<typename> class, typename I>
-+ char libcpp_iterator_traits_base_impl(void *);
-+
- template<typename I>
-- char is_std_iterator_traits_specialized_impl_(void *);
-+ auto is_std_iterator_traits_specialized_impl_(std::iterator_traits<I>* traits)
-+ -> decltype(libcpp_iterator_traits_base_impl<std::__iterator_traits, I>(traits));
- #elif defined(_MSVC_STL_VERSION)
- template<typename I>
- char (&is_std_iterator_traits_specialized_impl_(
-@@ -287,14 +298,13 @@ namespace ranges
- RANGES_INLINE_VAR constexpr bool is_std_iterator_traits_specialized_v =
- 1 == sizeof(is_std_iterator_traits_specialized_impl_<I>(
- static_cast<std::iterator_traits<I> *>(nullptr)));
--
-+#endif
- // The standard iterator_traits<T *> specialization(s) do not count
- // as user-specialized. This will no longer be necessary in C++20.
- // This helps with `T volatile*` and `void *`.
- template<typename T>
- RANGES_INLINE_VAR constexpr bool is_std_iterator_traits_specialized_v<T *> =
- false;
--#endif
- } // namespace detail
- /// \endcond
- } // namespace ranges
-diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
-index 889f314af..2c2b7c09c 100644
---- a/test/CMakeLists.txt
-+++ b/test/CMakeLists.txt
-@@ -19,3 +19,4 @@ rv3_add_test(test.bug474 bug474 bug474.cpp)
- rv3_add_test(test.bug566 bug566 bug566.cpp)
- rv3_add_test(test.bug1322 bug1322 bug1322.cpp)
- rv3_add_test(test.bug1335 bug1335 bug1335.cpp)
-+rv3_add_test(test.bug1633 bug1633 bug1633.cpp)
-diff --git a/test/bug1633.cpp b/test/bug1633.cpp
-new file mode 100644
-index 000000000..be52420ad
---- /dev/null
-+++ b/test/bug1633.cpp
-@@ -0,0 +1,34 @@
-+// Range v3 library
-+//
-+// Use, modification and distribution is subject to the
-+// Boost Software License, Version 1.0. (See accompanying
-+// file LICENSE_1_0.txt or copy at
-+// http://www.boost.org/LICENSE_1_0.txt)
-+//
-+// Project home: https://github.com/ericniebler/range-v3
-+
-+#include <cstddef>
-+#include <iterator>
-+#include <range/v3/iterator.hpp>
-+
-+struct X { };
-+
-+namespace std {
-+ template<> struct iterator_traits<X> { };
-+}
-+
-+struct Y {
-+ using difference_type = std::ptrdiff_t;
-+ using value_type = int;
-+ using pointer = int*;
-+ using reference = int&;
-+ using iterator_category = std::forward_iterator_tag;
-+};
-+
-+static_assert(ranges::detail::is_std_iterator_traits_specialized_v<X>, "");
-+static_assert(!ranges::detail::is_std_iterator_traits_specialized_v<Y>, "");
-+static_assert(!ranges::detail::is_std_iterator_traits_specialized_v<int*>, "");
-+
-+int main()
-+{
-+}
diff --git a/gnu/packages/patches/rdkit-unbundle-external-dependencies.patch b/gnu/packages/patches/rdkit-unbundle-external-dependencies.patch
index 8ee0611d3b..e22ff57ee0 100644
--- a/gnu/packages/patches/rdkit-unbundle-external-dependencies.patch
+++ b/gnu/packages/patches/rdkit-unbundle-external-dependencies.patch
@@ -58,99 +58,82 @@ diff --git a/External/AvalonTools/CMakeLists.txt b/External/AvalonTools/CMakeLis
index 3e31195fc..314ba35b5 100644
--- a/External/AvalonTools/CMakeLists.txt
+++ b/External/AvalonTools/CMakeLists.txt
-@@ -2,107 +2,14 @@ if(NOT RDK_BUILD_AVALON_SUPPORT)
+@@ -2,90 +2,8 @@ if(NOT RDK_BUILD_AVALON_SUPPORT)
return()
endif(NOT RDK_BUILD_AVALON_SUPPORT)
+-set(AVALON_VERSION "2.0.5-pre.3")
-if(NOT DEFINED AVALONTOOLS_DIR)
-- set(AVALONTOOLS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SourceDistribution")
-- set(fileToPatch "${CMAKE_CURRENT_SOURCE_DIR}/SourceDistribution/common/reaccsio.c")
+- set(AVALONTOOLS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ava-formake-AvalonToolkit_${AVALON_VERSION}")
+- set(fileToCheck "${AVALONTOOLS_DIR}/src/main/C/common/reaccsio.c")
- set(needDownload "TRUE")
-- if(EXISTS "${fileToPatch}")
-- file(READ "${fileToPatch}" buffer)
-- if("${buffer}" MATCHES "//MyFree\\(\\(char \\*\\)tempdir\\);")
-- set(needDownload "FALSE")
-- endif()
+- if(EXISTS "${fileToCheck}")
+- set(needDownload "FALSE")
- endif()
-else()
- string(REGEX REPLACE "\\\\" "/" AVALONTOOLS_DIR ${AVALONTOOLS_DIR})
- set(needDownload "FALSE")
-endif()
-
--set(AVALON_SRC_PATH ${AVALONTOOLS_DIR}/common)
+-set(AVALON_SRC_PATH "${AVALONTOOLS_DIR}/src/main/C")
+-set(AVALON_COMMON_PATH "${AVALON_SRC_PATH}/common")
+-set(AVALON_INCLUDE_PATH "${AVALON_SRC_PATH}/include")
+-set(AVALON_PROGRAMS_PATH "${AVALON_SRC_PATH}/programs")
-
-if(needDownload)
- if(NOT DEFINED AVALONTOOLS_URL)
-- set(AVALONTOOLS_URL "https://sourceforge.net/projects/avalontoolkit/files/AvalonToolkit_1.2/AvalonToolkit_1.2.0.source.tar")
+- set(AVALONTOOLS_URL "https://github.com/rdkit/ava-formake/archive/refs/tags/AvalonToolkit_${AVALON_VERSION}.tar.gz")
- endif()
- if(NOT DEFINED AVALONTOOLS_MD5SUM)
-- set(AVALONTOOLS_MD5SUM "092a94f421873f038aa67d4a6cc8cb54")
+- set(AVALONTOOLS_MD5SUM "7a20c25a7e79f3344e0f9f49afa03351")
- endif()
- if(NOT DEFINED AVALONTOOLS_BASE)
- string(REGEX REPLACE "^.*/" "" AVALONTOOLS_BASE "${AVALONTOOLS_URL}")
- endif()
- downloadAndCheckMD5(${AVALONTOOLS_URL} "${CMAKE_CURRENT_SOURCE_DIR}/${AVALONTOOLS_BASE}" ${AVALONTOOLS_MD5SUM})
-- execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf
-- ${CMAKE_CURRENT_SOURCE_DIR}/AvalonToolkit_1.2.0.source.tar
+- execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf
+- ${CMAKE_CURRENT_SOURCE_DIR}/AvalonToolkit_${AVALON_VERSION}.tar.gz
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-- # apply patch to AvalonTools
-- configure_file("${fileToPatch}" "${fileToPatch}.orig" COPYONLY)
-- file(READ "${fileToPatch}" buffer)
-- string(REGEX REPLACE "MyFree\\(\\(char \\*\\)tempdir\\);"
-- "//MyFree((char *)tempdir);" buffer "${buffer}")
-- file(WRITE "${fileToPatch}" "${buffer}")
--endif()
-
- if (MSVC)
- add_definitions("/D_CRT_SECURE_NO_WARNINGS")
- add_compile_options(/wd4224 /wd4101 /wd4018 /wd4996 /wd4244 /wd4305 /wd4013 /wd4146 /wd4334 /wd4715 /wd4715 /nologo)
- endif(MSVC)
-
--set(avalon_clib_srcs ${AVALON_SRC_PATH}/layout.c
-- ${AVALON_SRC_PATH}/symboltable.c
-- ${AVALON_SRC_PATH}/patclean.c
-- ${AVALON_SRC_PATH}/utilities.c
-- ${AVALON_SRC_PATH}/symbol_lists.c
-- ${AVALON_SRC_PATH}/stereo.c
-- ${AVALON_SRC_PATH}/set.c
-- ${AVALON_SRC_PATH}/perceive.c
-- ${AVALON_SRC_PATH}/local.c
-- ${AVALON_SRC_PATH}/graph.c
-- ${AVALON_SRC_PATH}/geometry.c
-- ${AVALON_SRC_PATH}/forio.c
-- ${AVALON_SRC_PATH}/depictutil.c
-- ${AVALON_SRC_PATH}/denormal.c
-- ${AVALON_SRC_PATH}/casutils.c
-- ${AVALON_SRC_PATH}/ssmatch.c
-- ${AVALON_SRC_PATH}/rtutils.c
-- ${AVALON_SRC_PATH}/smi2mol.c
-- ${AVALON_SRC_PATH}/didepict.c
-- ${AVALON_SRC_PATH}/pattern.c
-- ${AVALON_SRC_PATH}/canonizer.c
-- ${AVALON_SRC_PATH}/aacheck.c
-- ${AVALON_SRC_PATH}/fixcharges.c
-- ${AVALON_SRC_PATH}/struchk.c
-- ${AVALON_SRC_PATH}/reaccsio.c
-- ${AVALON_SRC_PATH}/hashcode.c
-- )
--
--# we need this to ensure that builds continue
--# to work on linux systems with older versions
--# of glibc when we're building with gcc-4.1.
--# Without this flag, we'll endup requiring
--# glibc 2.7.
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-- add_definitions(-D_GNU_SOURCE=1)
-endif()
-
--if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-return-type -Wno-implicit-function-declaration -Wno-absolute-value -Wno-parentheses -Wno-logical-op-parentheses -Wno-dangling-else -Wno-format")
+-if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+- add_compile_options(-Wno-format-security -Wformat=0 -Wstringop-overflow=0 -Wformat-overflow=0 -Wno-unused-result )
-endif()
--if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result -Wformat-overflow=0 -Wformat=0 -Wno-format-security -Wno-implicit-function-declaration")
+-if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
+- add_compile_options(-Wno-absolute-value -Wno-return-type -Wno-tautological-overlap-compare)
-endif()
+-if (MSVC)
+- add_definitions("/D_CRT_SECURE_NO_WARNINGS")
+- add_compile_options(/wd4018 /wd4101 /wd4146 /wd4334 /wd4477 /wd4715 /wd4716 /wd4996 /nologo)
+-endif(MSVC)
-
--
+-set(avalon_clib_srcs ${AVALON_COMMON_PATH}/layout.c
+- ${AVALON_COMMON_PATH}/symboltable.c
+- ${AVALON_COMMON_PATH}/patclean.c
+- ${AVALON_COMMON_PATH}/utilities.c
+- ${AVALON_COMMON_PATH}/symbol_lists.c
+- ${AVALON_COMMON_PATH}/stereo.c
+- ${AVALON_COMMON_PATH}/set.c
+- ${AVALON_COMMON_PATH}/perceive.c
+- ${AVALON_COMMON_PATH}/local.c
+- ${AVALON_COMMON_PATH}/graph.c
+- ${AVALON_COMMON_PATH}/geometry.c
+- ${AVALON_COMMON_PATH}/forio.c
+- ${AVALON_COMMON_PATH}/depictutil.c
+- ${AVALON_COMMON_PATH}/denormal.c
+- ${AVALON_COMMON_PATH}/casutils.c
+- ${AVALON_COMMON_PATH}/ssmatch.c
+- ${AVALON_COMMON_PATH}/rtutils.c
+- ${AVALON_COMMON_PATH}/smi2mol.c
+- ${AVALON_COMMON_PATH}/didepict.c
+- ${AVALON_COMMON_PATH}/pattern.c
+- ${AVALON_COMMON_PATH}/canonizer.c
+- ${AVALON_COMMON_PATH}/aacheck.c
+- ${AVALON_COMMON_PATH}/fixcharges.c
+- ${AVALON_PROGRAMS_PATH}/struchk.c
+- ${AVALON_COMMON_PATH}/reaccsio.c
+- ${AVALON_COMMON_PATH}/hashcode.c
+- )
-
-rdkit_library(avalon_clib ${avalon_clib_srcs})
-target_compile_definitions(avalon_clib PRIVATE RDKIT_AVALONLIB_BUILD)
@@ -159,11 +142,11 @@ index 3e31195fc..314ba35b5 100644
-endif()
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
--include_directories(${AVALON_SRC_PATH})
+-include_directories(${AVALON_INCLUDE_PATH})
-
rdkit_library(AvalonLib AvalonTools.cpp SHARED
- LINK_LIBRARIES avalon_clib SubstructMatch FileParsers SmilesParse GraphMol DataStructs )
-+ LINK_LIBRARIES -lavalontoolkit SubstructMatch FileParsers SmilesParse GraphMol DataStructs )
++ LINK_LIBRARIES -lavalon4rdkit SubstructMatch FileParsers SmilesParse GraphMol DataStructs )
target_compile_definitions(AvalonLib PRIVATE RDKIT_AVALONLIB_BUILD)
rdkit_headers(AvalonTools.h DEST GraphMol)
rdkit_test(testAvalonLib1 test1.cpp
@@ -278,7 +261,7 @@ diff --git a/External/RingFamilies/CMakeLists.txt b/External/RingFamilies/CMakeL
index 08dd1fe04..66ecd5834 100644
--- a/External/RingFamilies/CMakeLists.txt
+++ b/External/RingFamilies/CMakeLists.txt
-@@ -1,47 +1,6 @@
+@@ -1,47 +1,7 @@
-add_custom_target(ringdecomposerlib_support ALL)
-
if(NOT RDK_USE_URF)
@@ -324,10 +307,9 @@ index 08dd1fe04..66ecd5834 100644
-rdkit_headers(${URFLIB_DIR}/RingDecomposerLib.h DEST "")
-
-
--set(RDK_URF_LIBS RingDecomposerLib
-- CACHE STRING "the libraries for the URF calculation" FORCE)
+rdkit_library(RingDecomposerLib dummy.cpp SHARED LINK_LIBRARIES -lRingDecomposerLib)
-+set(RDK_URF_LIBS RingDecomposerLib CACHE STRING "" FORCE)
+ set(RDK_URF_LIBS RingDecomposerLib
+ CACHE STRING "the libraries for the URF calculation" FORCE)
diff --git a/External/RingFamilies/dummy.cpp b/External/RingFamilies/dummy.cpp
new file mode 100644
index 000000000..e69de29bb
@@ -335,40 +317,60 @@ diff --git a/External/YAeHMOP/CMakeLists.txt b/External/YAeHMOP/CMakeLists.txt
index f1027b3bd..8bee2f910 100644
--- a/External/YAeHMOP/CMakeLists.txt
+++ b/External/YAeHMOP/CMakeLists.txt
-@@ -18,32 +18,8 @@ endif()
+@@ -4,52 +4,7 @@ endif(NOT RDK_BUILD_YAEHMOP_SUPPORT)
- include_directories( ${RDKit_ExternalDir}/YAeHMOP )
+ add_definitions(-DRDK_BUILD_YAEHMOP_SUPPORT)
--ExternalProject_Add(yaehmop_project
-- GIT_REPOSITORY https://github.com/greglandrum/yaehmop.git
-- GIT_TAG master
-- UPDATE_COMMAND ""
-- PATCH_COMMAND ""
-- PREFIX ${CMAKE_CURRENT_SOURCE_DIR}
-- SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/yaehmop"
-- SOURCE_SUBDIR "tightbind"
-- CMAKE_ARGS -DUSE_BLAS_LAPACK=OFF -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-- TEST_COMMAND "")
--
--include_directories(${PROJECT_BINARY_DIR}/include)
--link_directories(${PROJECT_BINARY_DIR}/lib)
--link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/yaehmop_project-build)
+-if(NOT DEFINED YAEHMOP_DIR)
+- set(YAEHMOP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/yaehmop")
+-endif()
+-
+-if(NOT EXISTS "${YAEHMOP_DIR}/tightbind/bind.h")
+- set(RELEASE_NO "2023.03.1")
+- set(MD5 "e6450f13e02c54d024233b993c3c7ff6")
+- downloadAndCheckMD5("https://github.com/greglandrum/yaehmop/archive/refs/tags/v${RELEASE_NO}.tar.gz"
+- "${CMAKE_CURRENT_SOURCE_DIR}/yaehmop-${RELEASE_NO}.tar.gz" ${MD5})
+- execute_process(COMMAND ${CMAKE_COMMAND} -E tar zxf
+- ${CMAKE_CURRENT_SOURCE_DIR}/yaehmop-${RELEASE_NO}.tar.gz
+- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+-
+- file(RENAME "yaehmop-${RELEASE_NO}" "${YAEHMOP_DIR}")
+-else()
+- message("-- Found YAeHMOP source in ${YAEHMOP_DIR}")
+-endif()
+-
+-set(yaehmop_INCLUDE_DIRS ${YAEHMOP_DIR}/..
+- CACHE STRING "yaehmop Include File" FORCE)
+-include_directories(${yaehmop_INCLUDE_DIRS})
+-
+-if(CMAKE_COMPILER_IS_GNUCXX AND NOT CYGWIN)
+- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+-endif()
+-if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+-endif()
+-
+-# bring in the eHT code, but skip the targets (we'll get yaehmop_eht anyway because it's a dependency)
+-add_subdirectory(yaehmop/tightbind EXCLUDE_FROM_ALL True)
+-
+-# set install dir for the yaehmop library:
+-INSTALL(TARGETS yaehmop_eht EXPORT rdkit-targets
+- DESTINATION ${RDKit_LibDir}/${RDKLIB_DEST}
+- COMPONENT runtime )
+-
+-
+-
-
-set(EHT_PARAM_FILE ${CMAKE_CURRENT_SOURCE_DIR}/yaehmop/tightbind/eht_parms.dat )
-install(FILES ${EHT_PARAM_FILE}
- DESTINATION ${RDKit_ShareDir}/Data
- COMPONENT data)
-
--message("YAeHMOP include_dirs: ${PROJECT_BINARY_DIR}/include")
--message("YAeHMOP link_dirs: ${PROJECT_BINARY_DIR}/lib ${CMAKE_CURRENT_SOURCE_DIR}/src/yaehmop_project-build")
--
-rdkit_library(EHTLib EHTTools.cpp SHARED LINK_LIBRARIES yaehmop_eht GraphMol )
+rdkit_library(EHTLib EHTTools.cpp SHARED LINK_LIBRARIES -lyaehmop_eht GraphMol )
target_compile_definitions(EHTLib PRIVATE RDKIT_EHTLIB_BUILD)
--add_dependencies(EHTLib yaehmop_project)
rdkit_headers(EHTTools.h DEST GraphMol)
rdkit_catch_test(testEHTLib1 test1.cpp
- LINK_LIBRARIES EHTLib FileParsers SmilesParse )
diff --git a/External/YAeHMOP/EHTTools.cpp b/External/YAeHMOP/EHTTools.cpp
index 7a229f51f..71033dc5c 100644
--- a/External/YAeHMOP/EHTTools.cpp
@@ -382,3 +384,23 @@ index 7a229f51f..71033dc5c 100644
}
namespace RDKit {
+@@ -160,4 +160,4 @@ bool runMol(const ROMol &mol, EHTResults &results, int confId,
+ }
+
+ } // end of namespace EHTTools
+-} // end of namespace RDKit
+\ No newline at end of file
++} // end of namespace RDKit
+diff --git a/External/YAeHMOP/Wrap/CMakeLists.txt b/External/YAeHMOP/Wrap/CMakeLists.txt
+index 759a9f360..114d24532 100644
+--- a/External/YAeHMOP/Wrap/CMakeLists.txt
++++ b/External/YAeHMOP/Wrap/CMakeLists.txt
+@@ -4,6 +4,8 @@ rdkit_python_extension(rdEHTTools
+ DEST Chem
+ LINK_LIBRARIES
+ EHTLib )
++
++target_include_directories(rdEHTTools PRIVATE ${RDKit_ExternalDir}/YAeHMOP)
+
+ add_pytest(pyEHTTools
+ ${CMAKE_CURRENT_SOURCE_DIR}/testEHTTools.py)
diff --git a/gnu/packages/patches/restartd-update-robust.patch b/gnu/packages/patches/restartd-update-robust.patch
new file mode 100644
index 0000000000..d279ebd8ff
--- /dev/null
+++ b/gnu/packages/patches/restartd-update-robust.patch
@@ -0,0 +1,295 @@
+From 01cd2d15a9bf1109e0e71b3e31b835d63dcf9cd8 Mon Sep 17 00:00:00 2001
+From: Maxime Devos <maximedevos@telenet.be>, Yin Kangkai <yinkangkai@xiaomi.com>, Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Subject: [PATCH]
+
+Fix segfault when run as normal user
+
+Also exit immediately when "restartd -h"
+Signed-off-by: Yin Kangkai <yinkangkai@xiaomi.com>
+
+Fix build with gcc-10
+
+Bug: https://bugs.debian.org/957761
+Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+
+Handle memory allocation failures.
+
+This makes the code a little more robust.
+Signed-off-by: Maxime Devos <maximedevos@telenet.be>
+
+Handle fopen failures.
+
+This makes the code a little more robust. What if /var/run does not
+exist, or we do not have permission to open
+/var/run/restartd.pid (EPERM?) due to SELinux misconfiguration?
+Signed-off-by: Maxime Devos <maximedevos@telenet.be>
+
+Handle printf and fprintf failures.
+
+This makes the code a little more robust. What if the write was
+refused to the underlying device being removed?
+
+The --help, debug and stderr printfs were ignored because there error
+handling does not appear important to me.
+Signed-off-by: Maxime Devos <maximedevos@telenet.be>
+
+Handle fclose failures when writing.
+
+This makes the code a little more robust. What if a quotum is exceeded?
+Signed-off-by: Maxime Devos <maximedevos@telenet.be>
+---
+ config.c | 19 +++++++++----
+ config.h | 14 ++++++----
+ restartd.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++-------
+ 3 files changed, 92 insertions(+), 21 deletions(-)
+
+diff --git a/config.c b/config.c
+index f307b8a..5cc0271 100644
+--- a/config.c
++++ b/config.c
+@@ -57,7 +57,11 @@ int read_config(void)
+ config_process_number = 0;
+
+ line1 = (char *) malloc(MAX_LINE_LENGTH);
++ if (!line1)
++ oom_failure();
+ line2 = (char *) malloc(MAX_LINE_LENGTH);
++ if (!line2)
++ oom_failure();
+
+ if ((config_fd = fopen(config_file, "rt")) == NULL) {
+ fprintf(stderr, "Error at opening config file: %s\n", config_file);
+@@ -155,11 +159,16 @@ void dump_config(void) {
+ int i;
+
+ for(i=0; i<config_process_number; i++) {
+- printf("ID=%d\n name=%s\n regexp=%s\n running=%s\n not_running=%s\n", i,
+- config_process[i].name,
+- config_process[i].regexp,
+- config_process[i].running,
+- config_process[i].not_running);
++ if (printf("ID=%d\n name=%s\n regexp=%s\n running=%s\n not_running=%s\n", i,
++ config_process[i].name,
++ config_process[i].regexp,
++ config_process[i].running,
++ config_process[i].not_running) < 0) {
++ /* Maybe stdout points to a file and a file system quotum was exceeded? */
++ fprintf(stderr, "Failed to dump the configuration. Exiting.\n");
++ syslog(LOG_ERR, "Failed to dump the configuration. Exiting.");
++ exit(1);
++ }
+ }
+
+ }
+diff --git a/config.h b/config.h
+index fabaa2b..2ba1cbe 100644
+--- a/config.h
++++ b/config.h
+@@ -1,6 +1,7 @@
+ /* restartd - Process checker and/or restarter daemon
+ * Copyright (C) 2000-2002 Tibor Koleszar <oldw@debian.org>
+ * Copyright (C) 2006 Aurélien GÉRÔME <ag@roxor.cx>
++ * Copyright (C) 2022 Maxime Devos <maximedevos@telenet.be>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+@@ -25,12 +26,12 @@
+
+ #define DEFAULT_CONFIG "/etc/restartd.conf"
+
+-int debug;
+-int config_process_number;
+-int check_interval;
+-int foreground;
+-struct config_process_type *config_process;
+-char *config_file;
++extern int debug;
++extern int config_process_number;
++extern int check_interval;
++extern int foreground;
++extern struct config_process_type *config_process;
++extern char *config_file;
+
+ typedef struct config_process_type {
+ char name[64];
+@@ -43,5 +44,6 @@ typedef struct config_process_type {
+
+ int read_config(/* char *config_file */);
+ void dump_config(void);
++void oom_failure(void);
+
+ #endif /* RESTARTD_CONFIG_H */
+diff --git a/restartd.c b/restartd.c
+index 2aa720c..aa74334 100644
+--- a/restartd.c
++++ b/restartd.c
+@@ -1,6 +1,7 @@
+ /* restartd - Process checker and/or restarter daemon
+ * Copyright (C) 2000-2002 Tibor Koleszar <oldw@debian.org>
+ * Copyright (C) 2006 Aurélien GÉRÔME <ag@roxor.cx>
++ * Copyright (C) 2022 Maxime Devos <maximedevos@telenet.be>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+@@ -35,6 +36,13 @@
+
+ #include "config.h"
+
++int debug;
++int config_process_number;
++int check_interval;
++int foreground;
++struct config_process_type *config_process;
++char *config_file;
++
+ /* SIGTERM & SIGHUP handler */
+ void got_signal(int sig)
+ {
+@@ -52,6 +60,17 @@ void got_signal(int sig)
+ }
+ }
+
++/* Ignoring out-of-memory failures is risky on systems without virtual memory
++ where additionally at address 0 there is actually something important
++ mapped. Additionally, while often on Linux the OOM killer will kill processes
++ where an OOM happens, this is not always the case and there exist other systems
++ without an OOM killer (e.g. the Hurd). */
++void oom_failure()
++{
++ syslog(LOG_ERR, "Failed to allocate memory. Exiting.");
++ exit(1);
++}
++
+ int main(int argc, char *argv[])
+ {
+ DIR *procdir_id;
+@@ -75,15 +94,21 @@ int main(int argc, char *argv[])
+
+ /* Options */
+ config_file = strdup(DEFAULT_CONFIG);
++ if (!config_file)
++ oom_failure();
++
+ list_only = 0;
+
+ for(i = 0; i < argc; i++) {
+ if (!strcmp(argv[i], "-c") || !strcmp(argv[i], "--config")) {
+ config_file = strdup(argv[i + 1]);
++ if (!config_file)
++ oom_failure();
+ }
+ if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) {
+ printf("restard %s - Copyright 2000-2002 Tibor Koleszar <oldw@debian.org>\n"
+- " Copyright 2006 Aurélien GÉRÔME <ag@roxor.cx>\n",
++ " Copyright 2006 Aurélien GÉRÔME <ag@roxor.cx>\n"
++ " Copyright 2022 Maxime Devos <maximedevos@telenet.be>\n",
+ VERSION);
+ exit(0);
+ }
+@@ -118,10 +143,13 @@ int main(int argc, char *argv[])
+ " -i <interval_sec>: the check interval in second\n"
+ " -l : list configuration options\n"
+ " -h : help\n\n", VERSION);
++ exit(0);
+ }
+ }
+
+ config_process = malloc(sizeof(struct config_process_type) * 128);
++ if (!config_process)
++ oom_failure();
+
+ read_config();
+ if (list_only) {
+@@ -133,9 +161,17 @@ int main(int argc, char *argv[])
+ config_process_number);
+
+ procdir_dirent = malloc(sizeof(struct dirent));
++ if (!procdir_dirent)
++ oom_failure();
+ proc_cmdline_str = (char *) malloc(1024);
++ if (!proc_cmdline_str)
++ oom_failure();
+ proc_cmdline_name = (char *) malloc(1024);
++ if (!proc_cmdline_name)
++ oom_failure();
+ regc = malloc(1024);
++ if (!regc)
++ oom_failure();
+
+ /* Catch signals */
+ signal(SIGTERM, got_signal);
+@@ -187,8 +223,19 @@ int main(int argc, char *argv[])
+ }
+
+ out_proc = fopen("/var/run/restartd.pid", "wt");
+- fprintf(out_proc, "%d", getpid());
+- fclose(out_proc);
++ if (!out_proc) {
++ syslog(LOG_ERR, "Failed to open /var/run/restartd.pid");
++ return -1;
++ }
++ if (fprintf(out_proc, "%d", getpid()) < 0) {
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd.pid. Exiting.");
++ return -1;
++ }
++ if (fclose(out_proc) < 0) { /* errors can happen when flushing the buffer */
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd.pid. Exiting.");
++ return -1;
++ }
++
+
+ while(1) {
+ if ((procdir_id = opendir("/proc")) == NULL) {
+@@ -237,16 +284,23 @@ int main(int argc, char *argv[])
+ now = time(NULL);
+
+ out_proc = fopen("/var/run/restartd", "wt");
++ if (!out_proc) {
++ syslog(LOG_ERR, "Failed to open /var/run/restartd.pid");
++ return -1;
++ }
+
+- fprintf(out_proc, "%s\n", ctime(&now));
++ if (fprintf(out_proc, "%s\n", ctime(&now)) < 0) {
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd. Exiting.");
++ return -1;
++ }
+
+ for(i=0; i<config_process_number; i++) {
+ if (strlen(config_process[i].processes) > 0) {
+ if (strlen(config_process[i].running) > 0) {
+ strcpy(config_process[i].status, "running");
+- syslog(LOG_INFO, "%s is running, executing '%s'",
++ /* syslog(LOG_INFO, "%s is running, executing '%s'",
+ config_process[i].name,
+- config_process[i].running);
++ config_process[i].running); */
+ system(config_process[i].running);
+ } else {
+ strcpy(config_process[i].status, "running");
+@@ -267,12 +321,18 @@ int main(int argc, char *argv[])
+ strcpy(config_process[i].status, "not running");
+ }
+
+- fprintf(out_proc, "%-12s %-12s %s\n",
+- config_process[i].name, config_process[i].status,
+- config_process[i].processes);
++ if (fprintf(out_proc, "%-12s %-12s %s\n",
++ config_process[i].name, config_process[i].status,
++ config_process[i].processes) < 0) {
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd. Exiting.");
++ return -1;
++ }
+ }
+
+- fclose(out_proc);
++ if (fclose(out_proc) < 0) {
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd.pid. Exiting.");
++ return -1;
++ }
+
+ sleep(check_interval);
+ }
+--
+2.37.3
+
diff --git a/gnu/packages/patches/rust-cargo-edit-remove-ureq.patch b/gnu/packages/patches/rust-cargo-edit-remove-ureq.patch
new file mode 100644
index 0000000000..99c58103c7
--- /dev/null
+++ b/gnu/packages/patches/rust-cargo-edit-remove-ureq.patch
@@ -0,0 +1,33 @@
+This is modeled after the upstream commit which removes ureq as a dependency.
+
+diff --git a/Cargo.toml b/Cargo.toml
+index 5a787e1..27171c7 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -201,26 +201,3 @@ test-external-apis = []
+ upgrade = ["cli"]
+ vendored-libgit2 = ["git2/vendored-libgit2"]
+ vendored-openssl = ["git2/vendored-openssl"]
+-
+-[target."cfg(any(target_arch = \"x86_64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"aarch64\"))".dependencies.ureq]
+-version = "2.7.1"
+-features = [
+- "tls",
+- "json",
+- "socks",
+- "socks-proxy",
+-]
+-default-features = false
+-
+-[target."cfg(not(any(target_arch = \"x86_64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"aarch64\")))".dependencies.native-tls]
+-version = "^0.2"
+-
+-[target."cfg(not(any(target_arch = \"x86_64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"aarch64\")))".dependencies.ureq]
+-version = "2.7.1"
+-features = [
+- "native-tls",
+- "json",
+- "socks",
+- "socks-proxy",
+-]
+-default-features = false
diff --git a/gnu/packages/patches/rust-ring-0.16-missing-files.patch b/gnu/packages/patches/rust-ring-0.16-missing-files.patch
deleted file mode 100644
index fa2f94a801..0000000000
--- a/gnu/packages/patches/rust-ring-0.16-missing-files.patch
+++ /dev/null
@@ -1,2293 +0,0 @@
-These 4 files exist in the git repository for rust-ring, and are from
-the same commit where 0.16.20 is taken from. They were not added to the
-include list in Cargo.toml, so they were not added to the tarball.
-
----
- crypto/curve25519/make_curve25519_tables.py | 222 +++++
- crypto/fipsmodule/aes/asm/vpaes-armv7.pl | 896 ++++++++++++++++++
- crypto/fipsmodule/aes/asm/vpaes-armv8.pl | 837 ++++++++++++++++
- .../fipsmodule/modes/asm/ghash-neon-armv8.pl | 294 ++++++
- 4 files changed, 2249 insertions(+)
- create mode 100755 crypto/curve25519/make_curve25519_tables.py
- create mode 100644 crypto/fipsmodule/aes/asm/vpaes-armv7.pl
- create mode 100755 crypto/fipsmodule/aes/asm/vpaes-armv8.pl
- create mode 100644 crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
-
-diff --git a/crypto/curve25519/make_curve25519_tables.py b/crypto/curve25519/make_curve25519_tables.py
-new file mode 100755
-index 0000000..50dee2a
---- /dev/null
-+++ b/crypto/curve25519/make_curve25519_tables.py
-@@ -0,0 +1,222 @@
-+#!/usr/bin/env python
-+# coding=utf-8
-+# Copyright (c) 2020, Google Inc.
-+#
-+# Permission to use, copy, modify, and/or distribute this software for any
-+# purpose with or without fee is hereby granted, provided that the above
-+# copyright notice and this permission notice appear in all copies.
-+#
-+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-+# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-+# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+
-+import StringIO
-+import subprocess
-+
-+# Base field Z_p
-+p = 2**255 - 19
-+
-+def modp_inv(x):
-+ return pow(x, p-2, p)
-+
-+# Square root of -1
-+modp_sqrt_m1 = pow(2, (p-1) // 4, p)
-+
-+# Compute corresponding x-coordinate, with low bit corresponding to
-+# sign, or return None on failure
-+def recover_x(y, sign):
-+ if y >= p:
-+ return None
-+ x2 = (y*y-1) * modp_inv(d*y*y+1)
-+ if x2 == 0:
-+ if sign:
-+ return None
-+ else:
-+ return 0
-+
-+ # Compute square root of x2
-+ x = pow(x2, (p+3) // 8, p)
-+ if (x*x - x2) % p != 0:
-+ x = x * modp_sqrt_m1 % p
-+ if (x*x - x2) % p != 0:
-+ return None
-+
-+ if (x & 1) != sign:
-+ x = p - x
-+ return x
-+
-+# Curve constant
-+d = -121665 * modp_inv(121666) % p
-+
-+# Base point
-+g_y = 4 * modp_inv(5) % p
-+g_x = recover_x(g_y, 0)
-+
-+# Points are represented as affine tuples (x, y).
-+
-+def point_add(P, Q):
-+ x1, y1 = P
-+ x2, y2 = Q
-+ x3 = ((x1*y2 + y1*x2) * modp_inv(1 + d*x1*x2*y1*y2)) % p
-+ y3 = ((y1*y2 + x1*x2) * modp_inv(1 - d*x1*x2*y1*y2)) % p
-+ return (x3, y3)
-+
-+# Computes Q = s * P
-+def point_mul(s, P):
-+ Q = (0, 1) # Neutral element
-+ while s > 0:
-+ if s & 1:
-+ Q = point_add(Q, P)
-+ P = point_add(P, P)
-+ s >>= 1
-+ return Q
-+
-+def to_bytes(x):
-+ ret = bytearray(32)
-+ for i in range(len(ret)):
-+ ret[i] = x % 256
-+ x >>= 8
-+ assert x == 0
-+ return ret
-+
-+def to_ge_precomp(P):
-+ # typedef struct {
-+ # fe_loose yplusx;
-+ # fe_loose yminusx;
-+ # fe_loose xy2d;
-+ # } ge_precomp;
-+ x, y = P
-+ return ((y + x) % p, (y - x) % p, (x * y * 2 * d) % p)
-+
-+def to_base_25_5(x):
-+ limbs = (26, 25, 26, 25, 26, 25, 26, 25, 26, 25)
-+ ret = []
-+ for l in limbs:
-+ ret.append(x & ((1<<l) - 1))
-+ x >>= l
-+ assert x == 0
-+ return ret
-+
-+def to_base_51(x):
-+ ret = []
-+ for _ in range(5):
-+ ret.append(x & ((1<<51) - 1))
-+ x >>= 51
-+ assert x == 0
-+ return ret
-+
-+def to_literal(x):
-+ ret = "{{\n#if defined(BORINGSSL_CURVE25519_64BIT)\n"
-+ ret += ", ".join(map(str, to_base_51(x)))
-+ ret += "\n#else\n"
-+ ret += ", ".join(map(str, to_base_25_5(x)))
-+ ret += "\n#endif\n}}"
-+ return ret
-+
-+def main():
-+ d2 = (2 * d) % p
-+
-+ small_precomp = bytearray()
-+ for i in range(1, 16):
-+ s = (i&1) | ((i&2) << (64-1)) | ((i&4) << (128-2)) | ((i&8) << (192-3))
-+ P = point_mul(s, (g_x, g_y))
-+ small_precomp += to_bytes(P[0])
-+ small_precomp += to_bytes(P[1])
-+
-+ large_precomp = []
-+ for i in range(32):
-+ large_precomp.append([])
-+ for j in range(8):
-+ P = point_mul((j + 1) << (i * 8), (g_x, g_y))
-+ large_precomp[-1].append(to_ge_precomp(P))
-+
-+ bi_precomp = []
-+ for i in range(8):
-+ P = point_mul(2*i + 1, (g_x, g_y))
-+ bi_precomp.append(to_ge_precomp(P))
-+
-+
-+ buf = StringIO.StringIO()
-+ buf.write("""/* Copyright (c) 2020, Google Inc.
-+ *
-+ * Permission to use, copy, modify, and/or distribute this software for any
-+ * purpose with or without fee is hereby granted, provided that the above
-+ * copyright notice and this permission notice appear in all copies.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-+
-+// This file is generated from
-+// ./make_curve25519_tables.py > curve25519_tables.h
-+
-+
-+static const fe d = """)
-+ buf.write(to_literal(d))
-+ buf.write(""";
-+
-+static const fe sqrtm1 = """)
-+ buf.write(to_literal(modp_sqrt_m1))
-+ buf.write(""";
-+
-+static const fe d2 = """)
-+ buf.write(to_literal(d2))
-+ buf.write(""";
-+
-+#if defined(OPENSSL_SMALL)
-+
-+// This block of code replaces the standard base-point table with a much smaller
-+// one. The standard table is 30,720 bytes while this one is just 960.
-+//
-+// This table contains 15 pairs of group elements, (x, y), where each field
-+// element is serialised with |fe_tobytes|. If |i| is the index of the group
-+// element then consider i+1 as a four-bit number: (i₀, i₁, i₂, i₃) (where i₀
-+// is the most significant bit). The value of the group element is then:
-+// (i₀×2^192 + i₁×2^128 + i₂×2^64 + i₃)G, where G is the generator.
-+static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {""")
-+ for i, b in enumerate(small_precomp):
-+ buf.write("0x%02x, " % b)
-+ buf.write("""
-+};
-+
-+#else
-+
-+// k25519Precomp[i][j] = (j+1)*256^i*B
-+static const ge_precomp k25519Precomp[32][8] = {
-+""")
-+ for child in large_precomp:
-+ buf.write("{\n")
-+ for val in child:
-+ buf.write("{\n")
-+ for term in val:
-+ buf.write(to_literal(term) + ",\n")
-+ buf.write("},\n")
-+ buf.write("},\n")
-+ buf.write("""};
-+
-+#endif // OPENSSL_SMALL
-+
-+// Bi[i] = (2*i+1)*B
-+static const ge_precomp Bi[8] = {
-+""")
-+ for val in bi_precomp:
-+ buf.write("{\n")
-+ for term in val:
-+ buf.write(to_literal(term) + ",\n")
-+ buf.write("},\n")
-+ buf.write("""};
-+""")
-+
-+ proc = subprocess.Popen(["clang-format"], stdin=subprocess.PIPE)
-+ proc.communicate(buf.getvalue())
-+
-+if __name__ == "__main__":
-+ main()
-diff --git a/crypto/fipsmodule/aes/asm/vpaes-armv7.pl b/crypto/fipsmodule/aes/asm/vpaes-armv7.pl
-new file mode 100644
-index 0000000..d36a97a
---- /dev/null
-+++ b/crypto/fipsmodule/aes/asm/vpaes-armv7.pl
-@@ -0,0 +1,896 @@
-+#! /usr/bin/env perl
-+# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-+#
-+# Licensed under the OpenSSL license (the "License"). You may not use
-+# this file except in compliance with the License. You can obtain a copy
-+# in the file LICENSE in the source distribution or at
-+# https://www.openssl.org/source/license.html
-+
-+
-+######################################################################
-+## Constant-time SSSE3 AES core implementation.
-+## version 0.1
-+##
-+## By Mike Hamburg (Stanford University), 2009
-+## Public domain.
-+##
-+## For details see http://shiftleft.org/papers/vector_aes/ and
-+## http://crypto.stanford.edu/vpaes/.
-+##
-+######################################################################
-+# Adapted from the original x86_64 version and <appro@openssl.org>'s ARMv8
-+# version.
-+#
-+# armv7, aarch64, and x86_64 differ in several ways:
-+#
-+# * x86_64 SSSE3 instructions are two-address (destination operand is also a
-+# source), while NEON is three-address (destination operand is separate from
-+# two sources).
-+#
-+# * aarch64 has 32 SIMD registers available, while x86_64 and armv7 have 16.
-+#
-+# * x86_64 instructions can take memory references, while ARM is a load/store
-+# architecture. This means we sometimes need a spare register.
-+#
-+# * aarch64 and x86_64 have 128-bit byte shuffle instructions (tbl and pshufb),
-+# while armv7 only has a 64-bit byte shuffle (vtbl).
-+#
-+# This means this armv7 version must be a mix of both aarch64 and x86_64
-+# implementations. armv7 and aarch64 have analogous SIMD instructions, so we
-+# base the instructions on aarch64. However, we cannot use aarch64's register
-+# allocation. x86_64's register count matches, but x86_64 is two-address.
-+# vpaes-armv8.pl already accounts for this in the comments, which use
-+# three-address AVX instructions instead of the original SSSE3 ones. We base
-+# register usage on these comments, which are preserved in this file.
-+#
-+# This means we do not use separate input and output registers as in aarch64 and
-+# cannot pin as many constants in the preheat functions. However, the load/store
-+# architecture means we must still deviate from x86_64 in places.
-+#
-+# Next, we account for the byte shuffle instructions. vtbl takes 64-bit source
-+# and destination and 128-bit table. Fortunately, armv7 also allows addressing
-+# upper and lower halves of each 128-bit register. The lower half of q{N} is
-+# d{2*N}. The upper half is d{2*N+1}. Instead of the following non-existent
-+# instruction,
-+#
-+# vtbl.8 q0, q1, q2 @ Index each of q2's 16 bytes into q1. Store in q0.
-+#
-+# we write:
-+#
-+# vtbl.8 d0, q1, d4 @ Index each of d4's 8 bytes into q1. Store in d0.
-+# vtbl.8 d1, q1, d5 @ Index each of d5's 8 bytes into q1. Store in d1.
-+#
-+# For readability, we write d0 and d1 as q0#lo and q0#hi, respectively and
-+# post-process before outputting. (This is adapted from ghash-armv4.pl.) Note,
-+# however, that destination (q0) and table (q1) registers may no longer match.
-+# We adjust the register usage from x86_64 to avoid this. (Unfortunately, the
-+# two-address pshufb always matched these operands, so this is common.)
-+#
-+# This file also runs against the limit of ARMv7's ADR pseudo-instruction. ADR
-+# expands to an ADD or SUB of the pc register to find an address. That immediate
-+# must fit in ARM's encoding scheme: 8 bits of constant and 4 bits of rotation.
-+# This means larger values must be more aligned.
-+#
-+# ARM additionally has two encodings, ARM and Thumb mode. Our assembly files may
-+# use either encoding (do we actually need to support this?). In ARM mode, the
-+# distances get large enough to require 16-byte alignment. Moving constants
-+# closer to their use resolves most of this, but common constants in
-+# _vpaes_consts are used by the whole file. Affected ADR instructions must be
-+# placed at 8 mod 16 (the pc register is 8 ahead). Instructions with this
-+# constraint have been commented.
-+#
-+# For details on ARM's immediate value encoding scheme, see
-+# https://alisdair.mcdiarmid.org/arm-immediate-value-encoding/
-+#
-+# Finally, a summary of armv7 and aarch64 SIMD syntax differences:
-+#
-+# * armv7 prefixes SIMD instructions with 'v', while aarch64 does not.
-+#
-+# * armv7 SIMD registers are named like q0 (and d0 for the half-width ones).
-+# aarch64 names registers like v0, and denotes half-width operations in an
-+# instruction suffix (see below).
-+#
-+# * aarch64 embeds size and lane information in register suffixes. v0.16b is
-+# 16 bytes, v0.8h is eight u16s, v0.4s is four u32s, and v0.2d is two u64s.
-+# armv7 embeds the total size in the register name (see above) and the size of
-+# each element in an instruction suffix, which may look like vmov.i8,
-+# vshr.u8, or vtbl.8, depending on instruction.
-+
-+use strict;
-+
-+my $flavour = shift;
-+my $output;
-+while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
-+
-+$0 =~ m/(.*[\/\\])[^\/\\]+$/;
-+my $dir=$1;
-+my $xlate;
-+( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-+( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
-+die "can't locate arm-xlate.pl";
-+
-+open OUT,"| \"$^X\" $xlate $flavour $output";
-+*STDOUT=*OUT;
-+
-+my $code = "";
-+
-+$code.=<<___;
-+.syntax unified
-+
-+.arch armv7-a
-+.fpu neon
-+
-+#if defined(__thumb2__)
-+.thumb
-+#else
-+.code 32
-+#endif
-+
-+.text
-+
-+.type _vpaes_consts,%object
-+.align 7 @ totally strategic alignment
-+_vpaes_consts:
-+.Lk_mc_forward: @ mc_forward
-+ .quad 0x0407060500030201, 0x0C0F0E0D080B0A09
-+ .quad 0x080B0A0904070605, 0x000302010C0F0E0D
-+ .quad 0x0C0F0E0D080B0A09, 0x0407060500030201
-+ .quad 0x000302010C0F0E0D, 0x080B0A0904070605
-+.Lk_mc_backward:@ mc_backward
-+ .quad 0x0605040702010003, 0x0E0D0C0F0A09080B
-+ .quad 0x020100030E0D0C0F, 0x0A09080B06050407
-+ .quad 0x0E0D0C0F0A09080B, 0x0605040702010003
-+ .quad 0x0A09080B06050407, 0x020100030E0D0C0F
-+.Lk_sr: @ sr
-+ .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908
-+ .quad 0x030E09040F0A0500, 0x0B06010C07020D08
-+ .quad 0x0F060D040B020900, 0x070E050C030A0108
-+ .quad 0x0B0E0104070A0D00, 0x0306090C0F020508
-+
-+@
-+@ "Hot" constants
-+@
-+.Lk_inv: @ inv, inva
-+ .quad 0x0E05060F0D080180, 0x040703090A0B0C02
-+ .quad 0x01040A060F0B0780, 0x030D0E0C02050809
-+.Lk_ipt: @ input transform (lo, hi)
-+ .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808
-+ .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81
-+.Lk_sbo: @ sbou, sbot
-+ .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878
-+ .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA
-+.Lk_sb1: @ sb1u, sb1t
-+ .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF
-+ .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544
-+.Lk_sb2: @ sb2u, sb2t
-+ .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A
-+ .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD
-+
-+.asciz "Vector Permutation AES for ARMv7 NEON, Mike Hamburg (Stanford University)"
-+.size _vpaes_consts,.-_vpaes_consts
-+.align 6
-+___
-+
-+{
-+my ($inp,$out,$key) = map("r$_", (0..2));
-+
-+my ($invlo,$invhi) = map("q$_", (10..11));
-+my ($sb1u,$sb1t,$sb2u,$sb2t) = map("q$_", (12..15));
-+
-+$code.=<<___;
-+@@
-+@@ _aes_preheat
-+@@
-+@@ Fills q9-q15 as specified below.
-+@@
-+.type _vpaes_preheat,%function
-+.align 4
-+_vpaes_preheat:
-+ adr r10, .Lk_inv
-+ vmov.i8 q9, #0x0f @ .Lk_s0F
-+ vld1.64 {q10,q11}, [r10]! @ .Lk_inv
-+ add r10, r10, #64 @ Skip .Lk_ipt, .Lk_sbo
-+ vld1.64 {q12,q13}, [r10]! @ .Lk_sb1
-+ vld1.64 {q14,q15}, [r10] @ .Lk_sb2
-+ bx lr
-+
-+@@
-+@@ _aes_encrypt_core
-+@@
-+@@ AES-encrypt q0.
-+@@
-+@@ Inputs:
-+@@ q0 = input
-+@@ q9-q15 as in _vpaes_preheat
-+@@ [$key] = scheduled keys
-+@@
-+@@ Output in q0
-+@@ Clobbers q1-q5, r8-r11
-+@@ Preserves q6-q8 so you get some local vectors
-+@@
-+@@
-+.type _vpaes_encrypt_core,%function
-+.align 4
-+_vpaes_encrypt_core:
-+ mov r9, $key
-+ ldr r8, [$key,#240] @ pull rounds
-+ adr r11, .Lk_ipt
-+ @ vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo
-+ @ vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi
-+ vld1.64 {q2, q3}, [r11]
-+ adr r11, .Lk_mc_forward+16
-+ vld1.64 {q5}, [r9]! @ vmovdqu (%r9), %xmm5 # round0 key
-+ vand q1, q0, q9 @ vpand %xmm9, %xmm0, %xmm1
-+ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0
-+ vtbl.8 q1#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm2, %xmm1
-+ vtbl.8 q1#hi, {q2}, q1#hi
-+ vtbl.8 q2#lo, {q3}, q0#lo @ vpshufb %xmm0, %xmm3, %xmm2
-+ vtbl.8 q2#hi, {q3}, q0#hi
-+ veor q0, q1, q5 @ vpxor %xmm5, %xmm1, %xmm0
-+ veor q0, q0, q2 @ vpxor %xmm2, %xmm0, %xmm0
-+
-+ @ .Lenc_entry ends with a bnz instruction which is normally paired with
-+ @ subs in .Lenc_loop.
-+ tst r8, r8
-+ b .Lenc_entry
-+
-+.align 4
-+.Lenc_loop:
-+ @ middle of middle round
-+ add r10, r11, #0x40
-+ vtbl.8 q4#lo, {$sb1t}, q2#lo @ vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u
-+ vtbl.8 q4#hi, {$sb1t}, q2#hi
-+ vld1.64 {q1}, [r11]! @ vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[]
-+ vtbl.8 q0#lo, {$sb1u}, q3#lo @ vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t
-+ vtbl.8 q0#hi, {$sb1u}, q3#hi
-+ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ vtbl.8 q5#lo, {$sb2t}, q2#lo @ vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u
-+ vtbl.8 q5#hi, {$sb2t}, q2#hi
-+ veor q0, q0, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ vtbl.8 q2#lo, {$sb2u}, q3#lo @ vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t
-+ vtbl.8 q2#hi, {$sb2u}, q3#hi
-+ vld1.64 {q4}, [r10] @ vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
-+ vtbl.8 q3#lo, {q0}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm3 # 0 = B
-+ vtbl.8 q3#hi, {q0}, q1#hi
-+ veor q2, q2, q5 @ vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A
-+ @ Write to q5 instead of q0, so the table and destination registers do
-+ @ not overlap.
-+ vtbl.8 q5#lo, {q0}, q4#lo @ vpshufb %xmm4, %xmm0, %xmm0 # 3 = D
-+ vtbl.8 q5#hi, {q0}, q4#hi
-+ veor q3, q3, q2 @ vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B
-+ vtbl.8 q4#lo, {q3}, q1#lo @ vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C
-+ vtbl.8 q4#hi, {q3}, q1#hi
-+ @ Here we restore the original q0/q5 usage.
-+ veor q0, q5, q3 @ vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D
-+ and r11, r11, #~(1<<6) @ and \$0x30, %r11 # ... mod 4
-+ veor q0, q0, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D
-+ subs r8, r8, #1 @ nr--
-+
-+.Lenc_entry:
-+ @ top of round
-+ vand q1, q0, q9 @ vpand %xmm0, %xmm9, %xmm1 # 0 = k
-+ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ vtbl.8 q5#lo, {$invhi}, q1#lo @ vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k
-+ vtbl.8 q5#hi, {$invhi}, q1#hi
-+ veor q1, q1, q0 @ vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ vtbl.8 q3#lo, {$invlo}, q0#lo @ vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ vtbl.8 q3#hi, {$invlo}, q0#hi
-+ vtbl.8 q4#lo, {$invlo}, q1#lo @ vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ vtbl.8 q4#hi, {$invlo}, q1#hi
-+ veor q3, q3, q5 @ vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ vtbl.8 q2#lo, {$invlo}, q3#lo @ vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak
-+ vtbl.8 q2#hi, {$invlo}, q3#hi
-+ vtbl.8 q3#lo, {$invlo}, q4#lo @ vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak
-+ vtbl.8 q3#hi, {$invlo}, q4#hi
-+ veor q2, q2, q1 @ vpxor %xmm1, %xmm2, %xmm2 # 2 = io
-+ veor q3, q3, q0 @ vpxor %xmm0, %xmm3, %xmm3 # 3 = jo
-+ vld1.64 {q5}, [r9]! @ vmovdqu (%r9), %xmm5
-+ bne .Lenc_loop
-+
-+ @ middle of last round
-+ add r10, r11, #0x80
-+
-+ adr r11, .Lk_sbo
-+ @ Read to q1 instead of q4, so the vtbl.8 instruction below does not
-+ @ overlap table and destination registers.
-+ vld1.64 {q1}, [r11]! @ vmovdqa -0x60(%r10), %xmm4 # 3 : sbou
-+ vld1.64 {q0}, [r11] @ vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16
-+ vtbl.8 q4#lo, {q1}, q2#lo @ vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou
-+ vtbl.8 q4#hi, {q1}, q2#hi
-+ vld1.64 {q1}, [r10] @ vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[]
-+ @ Write to q2 instead of q0 below, to avoid overlapping table and
-+ @ destination registers.
-+ vtbl.8 q2#lo, {q0}, q3#lo @ vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t
-+ vtbl.8 q2#hi, {q0}, q3#hi
-+ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ veor q2, q2, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ @ Here we restore the original q0/q2 usage.
-+ vtbl.8 q0#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm0
-+ vtbl.8 q0#hi, {q2}, q1#hi
-+ bx lr
-+.size _vpaes_encrypt_core,.-_vpaes_encrypt_core
-+
-+.globl GFp_vpaes_encrypt
-+.type GFp_vpaes_encrypt,%function
-+.align 4
-+GFp_vpaes_encrypt:
-+ @ _vpaes_encrypt_core uses r8-r11. Round up to r7-r11 to maintain stack
-+ @ alignment.
-+ stmdb sp!, {r7-r11,lr}
-+ @ _vpaes_encrypt_core uses q4-q5 (d8-d11), which are callee-saved.
-+ vstmdb sp!, {d8-d11}
-+
-+ vld1.64 {q0}, [$inp]
-+ bl _vpaes_preheat
-+ bl _vpaes_encrypt_core
-+ vst1.64 {q0}, [$out]
-+
-+ vldmia sp!, {d8-d11}
-+ ldmia sp!, {r7-r11, pc} @ return
-+.size GFp_vpaes_encrypt,.-GFp_vpaes_encrypt
-+___
-+}
-+{
-+my ($inp,$bits,$out,$dir)=("r0","r1","r2","r3");
-+my ($rcon,$s0F,$invlo,$invhi,$s63) = map("q$_",(8..12));
-+
-+$code.=<<___;
-+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-+@@ @@
-+@@ AES key schedule @@
-+@@ @@
-+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-+
-+@ This function diverges from both x86_64 and armv7 in which constants are
-+@ pinned. x86_64 has a common preheat function for all operations. aarch64
-+@ separates them because it has enough registers to pin nearly all constants.
-+@ armv7 does not have enough registers, but needing explicit loads and stores
-+@ also complicates using x86_64's register allocation directly.
-+@
-+@ We pin some constants for convenience and leave q14 and q15 free to load
-+@ others on demand.
-+
-+@
-+@ Key schedule constants
-+@
-+.type _vpaes_key_consts,%object
-+.align 4
-+_vpaes_key_consts:
-+.Lk_rcon: @ rcon
-+ .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81
-+
-+.Lk_opt: @ output transform
-+ .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808
-+ .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0
-+.Lk_deskew: @ deskew tables: inverts the sbox's "skew"
-+ .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A
-+ .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77
-+.size _vpaes_key_consts,.-_vpaes_key_consts
-+
-+.type _vpaes_key_preheat,%function
-+.align 4
-+_vpaes_key_preheat:
-+ adr r11, .Lk_rcon
-+ vmov.i8 $s63, #0x5b @ .Lk_s63
-+ adr r10, .Lk_inv @ Must be aligned to 8 mod 16.
-+ vmov.i8 $s0F, #0x0f @ .Lk_s0F
-+ vld1.64 {$invlo,$invhi}, [r10] @ .Lk_inv
-+ vld1.64 {$rcon}, [r11] @ .Lk_rcon
-+ bx lr
-+.size _vpaes_key_preheat,.-_vpaes_key_preheat
-+
-+.type _vpaes_schedule_core,%function
-+.align 4
-+_vpaes_schedule_core:
-+ @ We only need to save lr, but ARM requires an 8-byte stack alignment,
-+ @ so save an extra register.
-+ stmdb sp!, {r3,lr}
-+
-+ bl _vpaes_key_preheat @ load the tables
-+
-+ adr r11, .Lk_ipt @ Must be aligned to 8 mod 16.
-+ vld1.64 {q0}, [$inp]! @ vmovdqu (%rdi), %xmm0 # load key (unaligned)
-+
-+ @ input transform
-+ @ Use q4 here rather than q3 so .Lschedule_am_decrypting does not
-+ @ overlap table and destination.
-+ vmov q4, q0 @ vmovdqa %xmm0, %xmm3
-+ bl _vpaes_schedule_transform
-+ adr r10, .Lk_sr @ Must be aligned to 8 mod 16.
-+ vmov q7, q0 @ vmovdqa %xmm0, %xmm7
-+
-+ add r8, r8, r10
-+
-+ @ encrypting, output zeroth round key after transform
-+ vst1.64 {q0}, [$out] @ vmovdqu %xmm0, (%rdx)
-+
-+ @ *ring*: Decryption removed.
-+
-+.Lschedule_go:
-+ cmp $bits, #192 @ cmp \$192, %esi
-+ bhi .Lschedule_256
-+ @ 128: fall though
-+
-+@@
-+@@ .schedule_128
-+@@
-+@@ 128-bit specific part of key schedule.
-+@@
-+@@ This schedule is really simple, because all its parts
-+@@ are accomplished by the subroutines.
-+@@
-+.Lschedule_128:
-+ mov $inp, #10 @ mov \$10, %esi
-+
-+.Loop_schedule_128:
-+ bl _vpaes_schedule_round
-+ subs $inp, $inp, #1 @ dec %esi
-+ beq .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle @ write output
-+ b .Loop_schedule_128
-+
-+@@
-+@@ .aes_schedule_256
-+@@
-+@@ 256-bit specific part of key schedule.
-+@@
-+@@ The structure here is very similar to the 128-bit
-+@@ schedule, but with an additional "low side" in
-+@@ q6. The low side's rounds are the same as the
-+@@ high side's, except no rcon and no rotation.
-+@@
-+.align 4
-+.Lschedule_256:
-+ vld1.64 {q0}, [$inp] @ vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned)
-+ bl _vpaes_schedule_transform @ input transform
-+ mov $inp, #7 @ mov \$7, %esi
-+
-+.Loop_schedule_256:
-+ bl _vpaes_schedule_mangle @ output low result
-+ vmov q6, q0 @ vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6
-+
-+ @ high round
-+ bl _vpaes_schedule_round
-+ subs $inp, $inp, #1 @ dec %esi
-+ beq .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle
-+
-+ @ low round. swap xmm7 and xmm6
-+ vdup.32 q0, q0#hi[1] @ vpshufd \$0xFF, %xmm0, %xmm0
-+ vmov.i8 q4, #0
-+ vmov q5, q7 @ vmovdqa %xmm7, %xmm5
-+ vmov q7, q6 @ vmovdqa %xmm6, %xmm7
-+ bl _vpaes_schedule_low_round
-+ vmov q7, q5 @ vmovdqa %xmm5, %xmm7
-+
-+ b .Loop_schedule_256
-+
-+@@
-+@@ .aes_schedule_mangle_last
-+@@
-+@@ Mangler for last round of key schedule
-+@@ Mangles q0
-+@@ when encrypting, outputs out(q0) ^ 63
-+@@ when decrypting, outputs unskew(q0)
-+@@
-+@@ Always called right before return... jumps to cleanup and exits
-+@@
-+.align 4
-+.Lschedule_mangle_last:
-+ @ schedule last round key from xmm0
-+ adr r11, .Lk_deskew @ lea .Lk_deskew(%rip),%r11 # prepare to deskew
-+
-+ @ encrypting
-+ vld1.64 {q1}, [r8] @ vmovdqa (%r8,%r10),%xmm1
-+ adr r11, .Lk_opt @ lea .Lk_opt(%rip), %r11 # prepare to output transform
-+ add $out, $out, #32 @ add \$32, %rdx
-+ vmov q2, q0
-+ vtbl.8 q0#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm0 # output permute
-+ vtbl.8 q0#hi, {q2}, q1#hi
-+
-+.Lschedule_mangle_last_dec:
-+ sub $out, $out, #16 @ add \$-16, %rdx
-+ veor q0, q0, $s63 @ vpxor .Lk_s63(%rip), %xmm0, %xmm0
-+ bl _vpaes_schedule_transform @ output transform
-+ vst1.64 {q0}, [$out] @ vmovdqu %xmm0, (%rdx) # save last key
-+
-+ @ cleanup
-+ veor q0, q0, q0 @ vpxor %xmm0, %xmm0, %xmm0
-+ veor q1, q1, q1 @ vpxor %xmm1, %xmm1, %xmm1
-+ veor q2, q2, q2 @ vpxor %xmm2, %xmm2, %xmm2
-+ veor q3, q3, q3 @ vpxor %xmm3, %xmm3, %xmm3
-+ veor q4, q4, q4 @ vpxor %xmm4, %xmm4, %xmm4
-+ veor q5, q5, q5 @ vpxor %xmm5, %xmm5, %xmm5
-+ veor q6, q6, q6 @ vpxor %xmm6, %xmm6, %xmm6
-+ veor q7, q7, q7 @ vpxor %xmm7, %xmm7, %xmm7
-+ ldmia sp!, {r3,pc} @ return
-+.size _vpaes_schedule_core,.-_vpaes_schedule_core
-+
-+@@
-+@@ .aes_schedule_round
-+@@
-+@@ Runs one main round of the key schedule on q0, q7
-+@@
-+@@ Specifically, runs subbytes on the high dword of q0
-+@@ then rotates it by one byte and xors into the low dword of
-+@@ q7.
-+@@
-+@@ Adds rcon from low byte of q8, then rotates q8 for
-+@@ next rcon.
-+@@
-+@@ Smears the dwords of q7 by xoring the low into the
-+@@ second low, result into third, result into highest.
-+@@
-+@@ Returns results in q7 = q0.
-+@@ Clobbers q1-q4, r11.
-+@@
-+.type _vpaes_schedule_round,%function
-+.align 4
-+_vpaes_schedule_round:
-+ @ extract rcon from xmm8
-+ vmov.i8 q4, #0 @ vpxor %xmm4, %xmm4, %xmm4
-+ vext.8 q1, $rcon, q4, #15 @ vpalignr \$15, %xmm8, %xmm4, %xmm1
-+ vext.8 $rcon, $rcon, $rcon, #15 @ vpalignr \$15, %xmm8, %xmm8, %xmm8
-+ veor q7, q7, q1 @ vpxor %xmm1, %xmm7, %xmm7
-+
-+ @ rotate
-+ vdup.32 q0, q0#hi[1] @ vpshufd \$0xFF, %xmm0, %xmm0
-+ vext.8 q0, q0, q0, #1 @ vpalignr \$1, %xmm0, %xmm0, %xmm0
-+
-+ @ fall through...
-+
-+ @ low round: same as high round, but no rotation and no rcon.
-+_vpaes_schedule_low_round:
-+ @ The x86_64 version pins .Lk_sb1 in %xmm13 and .Lk_sb1+16 in %xmm12.
-+ @ We pin other values in _vpaes_key_preheat, so load them now.
-+ adr r11, .Lk_sb1
-+ vld1.64 {q14,q15}, [r11]
-+
-+ @ smear xmm7
-+ vext.8 q1, q4, q7, #12 @ vpslldq \$4, %xmm7, %xmm1
-+ veor q7, q7, q1 @ vpxor %xmm1, %xmm7, %xmm7
-+ vext.8 q4, q4, q7, #8 @ vpslldq \$8, %xmm7, %xmm4
-+
-+ @ subbytes
-+ vand q1, q0, $s0F @ vpand %xmm9, %xmm0, %xmm1 # 0 = k
-+ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ veor q7, q7, q4 @ vpxor %xmm4, %xmm7, %xmm7
-+ vtbl.8 q2#lo, {$invhi}, q1#lo @ vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k
-+ vtbl.8 q2#hi, {$invhi}, q1#hi
-+ veor q1, q1, q0 @ vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ vtbl.8 q3#lo, {$invlo}, q0#lo @ vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ vtbl.8 q3#hi, {$invlo}, q0#hi
-+ veor q3, q3, q2 @ vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ vtbl.8 q4#lo, {$invlo}, q1#lo @ vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ vtbl.8 q4#hi, {$invlo}, q1#hi
-+ veor q7, q7, $s63 @ vpxor .Lk_s63(%rip), %xmm7, %xmm7
-+ vtbl.8 q3#lo, {$invlo}, q3#lo @ vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak
-+ vtbl.8 q3#hi, {$invlo}, q3#hi
-+ veor q4, q4, q2 @ vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ vtbl.8 q2#lo, {$invlo}, q4#lo @ vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak
-+ vtbl.8 q2#hi, {$invlo}, q4#hi
-+ veor q3, q3, q1 @ vpxor %xmm1, %xmm3, %xmm3 # 2 = io
-+ veor q2, q2, q0 @ vpxor %xmm0, %xmm2, %xmm2 # 3 = jo
-+ vtbl.8 q4#lo, {q15}, q3#lo @ vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou
-+ vtbl.8 q4#hi, {q15}, q3#hi
-+ vtbl.8 q1#lo, {q14}, q2#lo @ vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t
-+ vtbl.8 q1#hi, {q14}, q2#hi
-+ veor q1, q1, q4 @ vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output
-+
-+ @ add in smeared stuff
-+ veor q0, q1, q7 @ vpxor %xmm7, %xmm1, %xmm0
-+ veor q7, q1, q7 @ vmovdqa %xmm0, %xmm7
-+ bx lr
-+.size _vpaes_schedule_round,.-_vpaes_schedule_round
-+
-+@@
-+@@ .aes_schedule_transform
-+@@
-+@@ Linear-transform q0 according to tables at [r11]
-+@@
-+@@ Requires that q9 = 0x0F0F... as in preheat
-+@@ Output in q0
-+@@ Clobbers q1, q2, q14, q15
-+@@
-+.type _vpaes_schedule_transform,%function
-+.align 4
-+_vpaes_schedule_transform:
-+ vld1.64 {q14,q15}, [r11] @ vmovdqa (%r11), %xmm2 # lo
-+ @ vmovdqa 16(%r11), %xmm1 # hi
-+ vand q1, q0, $s0F @ vpand %xmm9, %xmm0, %xmm1
-+ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0
-+ vtbl.8 q2#lo, {q14}, q1#lo @ vpshufb %xmm1, %xmm2, %xmm2
-+ vtbl.8 q2#hi, {q14}, q1#hi
-+ vtbl.8 q0#lo, {q15}, q0#lo @ vpshufb %xmm0, %xmm1, %xmm0
-+ vtbl.8 q0#hi, {q15}, q0#hi
-+ veor q0, q0, q2 @ vpxor %xmm2, %xmm0, %xmm0
-+ bx lr
-+.size _vpaes_schedule_transform,.-_vpaes_schedule_transform
-+
-+@@
-+@@ .aes_schedule_mangle
-+@@
-+@@ Mangles q0 from (basis-transformed) standard version
-+@@ to our version.
-+@@
-+@@ On encrypt,
-+@@ xor with 0x63
-+@@ multiply by circulant 0,1,1,1
-+@@ apply shiftrows transform
-+@@
-+@@ On decrypt,
-+@@ xor with 0x63
-+@@ multiply by "inverse mixcolumns" circulant E,B,D,9
-+@@ deskew
-+@@ apply shiftrows transform
-+@@
-+@@
-+@@ Writes out to [r2], and increments or decrements it
-+@@ Keeps track of round number mod 4 in r8
-+@@ Preserves q0
-+@@ Clobbers q1-q5
-+@@
-+.type _vpaes_schedule_mangle,%function
-+.align 4
-+_vpaes_schedule_mangle:
-+ tst $dir, $dir
-+ vmov q4, q0 @ vmovdqa %xmm0, %xmm4 # save xmm0 for later
-+ adr r11, .Lk_mc_forward @ Must be aligned to 8 mod 16.
-+ vld1.64 {q5}, [r11] @ vmovdqa .Lk_mc_forward(%rip),%xmm5
-+
-+ @ encrypting
-+ @ Write to q2 so we do not overlap table and destination below.
-+ veor q2, q0, $s63 @ vpxor .Lk_s63(%rip), %xmm0, %xmm4
-+ add $out, $out, #16 @ add \$16, %rdx
-+ vtbl.8 q4#lo, {q2}, q5#lo @ vpshufb %xmm5, %xmm4, %xmm4
-+ vtbl.8 q4#hi, {q2}, q5#hi
-+ vtbl.8 q1#lo, {q4}, q5#lo @ vpshufb %xmm5, %xmm4, %xmm1
-+ vtbl.8 q1#hi, {q4}, q5#hi
-+ vtbl.8 q3#lo, {q1}, q5#lo @ vpshufb %xmm5, %xmm1, %xmm3
-+ vtbl.8 q3#hi, {q1}, q5#hi
-+ veor q4, q4, q1 @ vpxor %xmm1, %xmm4, %xmm4
-+ vld1.64 {q1}, [r8] @ vmovdqa (%r8,%r10), %xmm1
-+ veor q3, q3, q4 @ vpxor %xmm4, %xmm3, %xmm3
-+
-+.Lschedule_mangle_both:
-+ @ Write to q2 so table and destination do not overlap.
-+ vtbl.8 q2#lo, {q3}, q1#lo @ vpshufb %xmm1, %xmm3, %xmm3
-+ vtbl.8 q2#hi, {q3}, q1#hi
-+ add r8, r8, #64-16 @ add \$-16, %r8
-+ and r8, r8, #~(1<<6) @ and \$0x30, %r8
-+ vst1.64 {q2}, [$out] @ vmovdqu %xmm3, (%rdx)
-+ bx lr
-+.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
-+
-+.globl GFp_vpaes_set_encrypt_key
-+.type GFp_vpaes_set_encrypt_key,%function
-+.align 4
-+GFp_vpaes_set_encrypt_key:
-+ stmdb sp!, {r7-r11, lr}
-+ vstmdb sp!, {d8-d15}
-+
-+ lsr r9, $bits, #5 @ shr \$5,%eax
-+ add r9, r9, #5 @ \$5,%eax
-+ str r9, [$out,#240] @ mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5;
-+
-+ mov $dir, #0 @ mov \$0,%ecx
-+ mov r8, #0x30 @ mov \$0x30,%r8d
-+ bl _vpaes_schedule_core
-+ eor r0, r0, r0
-+
-+ vldmia sp!, {d8-d15}
-+ ldmia sp!, {r7-r11, pc} @ return
-+.size GFp_vpaes_set_encrypt_key,.-GFp_vpaes_set_encrypt_key
-+___
-+}
-+
-+{
-+my ($out, $inp) = map("r$_", (0..1));
-+my ($s0F, $s63, $s63_raw, $mc_forward) = map("q$_", (9..12));
-+
-+$code .= <<___;
-+
-+@ Additional constants for converting to bsaes.
-+.type _vpaes_convert_consts,%object
-+.align 4
-+_vpaes_convert_consts:
-+@ .Lk_opt_then_skew applies skew(opt(x)) XOR 0x63, where skew is the linear
-+@ transform in the AES S-box. 0x63 is incorporated into the low half of the
-+@ table. This was computed with the following script:
-+@
-+@ def u64s_to_u128(x, y):
-+@ return x | (y << 64)
-+@ def u128_to_u64s(w):
-+@ return w & ((1<<64)-1), w >> 64
-+@ def get_byte(w, i):
-+@ return (w >> (i*8)) & 0xff
-+@ def apply_table(table, b):
-+@ lo = b & 0xf
-+@ hi = b >> 4
-+@ return get_byte(table[0], lo) ^ get_byte(table[1], hi)
-+@ def opt(b):
-+@ table = [
-+@ u64s_to_u128(0xFF9F4929D6B66000, 0xF7974121DEBE6808),
-+@ u64s_to_u128(0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0),
-+@ ]
-+@ return apply_table(table, b)
-+@ def rot_byte(b, n):
-+@ return 0xff & ((b << n) | (b >> (8-n)))
-+@ def skew(x):
-+@ return (x ^ rot_byte(x, 1) ^ rot_byte(x, 2) ^ rot_byte(x, 3) ^
-+@ rot_byte(x, 4))
-+@ table = [0, 0]
-+@ for i in range(16):
-+@ table[0] |= (skew(opt(i)) ^ 0x63) << (i*8)
-+@ table[1] |= skew(opt(i<<4)) << (i*8)
-+@ print("\t.quad\t0x%016x, 0x%016x" % u128_to_u64s(table[0]))
-+@ print("\t.quad\t0x%016x, 0x%016x" % u128_to_u64s(table[1]))
-+.Lk_opt_then_skew:
-+ .quad 0x9cb8436798bc4763, 0x6440bb9f6044bf9b
-+ .quad 0x1f30062936192f00, 0xb49bad829db284ab
-+
-+@ void GFp_vpaes_encrypt_key_to_bsaes(AES_KEY *bsaes, const AES_KEY *vpaes);
-+.globl GFp_vpaes_encrypt_key_to_bsaes
-+.type GFp_vpaes_encrypt_key_to_bsaes,%function
-+.align 4
-+GFp_vpaes_encrypt_key_to_bsaes:
-+ stmdb sp!, {r11, lr}
-+
-+ @ See _vpaes_schedule_core for the key schedule logic. In particular,
-+ @ _vpaes_schedule_transform(.Lk_ipt) (section 2.2 of the paper),
-+ @ _vpaes_schedule_mangle (section 4.3), and .Lschedule_mangle_last
-+ @ contain the transformations not in the bsaes representation. This
-+ @ function inverts those transforms.
-+ @
-+ @ Note also that bsaes-armv7.pl expects aes-armv4.pl's key
-+ @ representation, which does not match the other aes_nohw_*
-+ @ implementations. The ARM aes_nohw_* stores each 32-bit word
-+ @ byteswapped, as a convenience for (unsupported) big-endian ARM, at the
-+ @ cost of extra REV and VREV32 operations in little-endian ARM.
-+
-+ vmov.i8 $s0F, #0x0f @ Required by _vpaes_schedule_transform
-+ adr r2, .Lk_mc_forward @ Must be aligned to 8 mod 16.
-+ add r3, r2, 0x90 @ .Lk_sr+0x10-.Lk_mc_forward = 0x90 (Apple's toolchain doesn't support the expression)
-+
-+ vld1.64 {$mc_forward}, [r2]
-+ vmov.i8 $s63, #0x5b @ .Lk_s63 from vpaes-x86_64
-+ adr r11, .Lk_opt @ Must be aligned to 8 mod 16.
-+ vmov.i8 $s63_raw, #0x63 @ .LK_s63 without .Lk_ipt applied
-+
-+ @ vpaes stores one fewer round count than bsaes, but the number of keys
-+ @ is the same.
-+ ldr r2, [$inp,#240]
-+ add r2, r2, #1
-+ str r2, [$out,#240]
-+
-+ @ The first key is transformed with _vpaes_schedule_transform(.Lk_ipt).
-+ @ Invert this with .Lk_opt.
-+ vld1.64 {q0}, [$inp]!
-+ bl _vpaes_schedule_transform
-+ vrev32.8 q0, q0
-+ vst1.64 {q0}, [$out]!
-+
-+ @ The middle keys have _vpaes_schedule_transform(.Lk_ipt) applied,
-+ @ followed by _vpaes_schedule_mangle. _vpaes_schedule_mangle XORs 0x63,
-+ @ multiplies by the circulant 0,1,1,1, then applies ShiftRows.
-+.Loop_enc_key_to_bsaes:
-+ vld1.64 {q0}, [$inp]!
-+
-+ @ Invert the ShiftRows step (see .Lschedule_mangle_both). Note we cycle
-+ @ r3 in the opposite direction and start at .Lk_sr+0x10 instead of 0x30.
-+ @ We use r3 rather than r8 to avoid a callee-saved register.
-+ vld1.64 {q1}, [r3]
-+ vtbl.8 q2#lo, {q0}, q1#lo
-+ vtbl.8 q2#hi, {q0}, q1#hi
-+ add r3, r3, #16
-+ and r3, r3, #~(1<<6)
-+ vmov q0, q2
-+
-+ @ Handle the last key differently.
-+ subs r2, r2, #1
-+ beq .Loop_enc_key_to_bsaes_last
-+
-+ @ Multiply by the circulant. This is its own inverse.
-+ vtbl.8 q1#lo, {q0}, $mc_forward#lo
-+ vtbl.8 q1#hi, {q0}, $mc_forward#hi
-+ vmov q0, q1
-+ vtbl.8 q2#lo, {q1}, $mc_forward#lo
-+ vtbl.8 q2#hi, {q1}, $mc_forward#hi
-+ veor q0, q0, q2
-+ vtbl.8 q1#lo, {q2}, $mc_forward#lo
-+ vtbl.8 q1#hi, {q2}, $mc_forward#hi
-+ veor q0, q0, q1
-+
-+ @ XOR and finish.
-+ veor q0, q0, $s63
-+ bl _vpaes_schedule_transform
-+ vrev32.8 q0, q0
-+ vst1.64 {q0}, [$out]!
-+ b .Loop_enc_key_to_bsaes
-+
-+.Loop_enc_key_to_bsaes_last:
-+ @ The final key does not have a basis transform (note
-+ @ .Lschedule_mangle_last inverts the original transform). It only XORs
-+ @ 0x63 and applies ShiftRows. The latter was already inverted in the
-+ @ loop. Note that, because we act on the original representation, we use
-+ @ $s63_raw, not $s63.
-+ veor q0, q0, $s63_raw
-+ vrev32.8 q0, q0
-+ vst1.64 {q0}, [$out]
-+
-+ @ Wipe registers which contained key material.
-+ veor q0, q0, q0
-+ veor q1, q1, q1
-+ veor q2, q2, q2
-+
-+ ldmia sp!, {r11, pc} @ return
-+.size GFp_vpaes_encrypt_key_to_bsaes,.-GFp_vpaes_encrypt_key_to_bsaes
-+___
-+}
-+
-+{
-+# Register-passed parameters.
-+my ($inp, $out, $len, $key) = map("r$_", 0..3);
-+# Temporaries. _vpaes_encrypt_core already uses r8..r11, so overlap $ivec and
-+# $tmp. $ctr is r7 because it must be preserved across calls.
-+my ($ctr, $ivec, $tmp) = map("r$_", 7..9);
-+
-+# void vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len,
-+# const AES_KEY *key, const uint8_t ivec[16]);
-+$code .= <<___;
-+.globl GFp_vpaes_ctr32_encrypt_blocks
-+.type GFp_vpaes_ctr32_encrypt_blocks,%function
-+.align 4
-+GFp_vpaes_ctr32_encrypt_blocks:
-+ mov ip, sp
-+ stmdb sp!, {r7-r11, lr}
-+ @ This function uses q4-q7 (d8-d15), which are callee-saved.
-+ vstmdb sp!, {d8-d15}
-+
-+ cmp $len, #0
-+ @ $ivec is passed on the stack.
-+ ldr $ivec, [ip]
-+ beq .Lctr32_done
-+
-+ @ _vpaes_encrypt_core expects the key in r2, so swap $len and $key.
-+ mov $tmp, $key
-+ mov $key, $len
-+ mov $len, $tmp
-+___
-+my ($len, $key) = ($key, $len);
-+$code .= <<___;
-+
-+ @ Load the IV and counter portion.
-+ ldr $ctr, [$ivec, #12]
-+ vld1.8 {q7}, [$ivec]
-+
-+ bl _vpaes_preheat
-+ rev $ctr, $ctr @ The counter is big-endian.
-+
-+.Lctr32_loop:
-+ vmov q0, q7
-+ vld1.8 {q6}, [$inp]! @ Load input ahead of time
-+ bl _vpaes_encrypt_core
-+ veor q0, q0, q6 @ XOR input and result
-+ vst1.8 {q0}, [$out]!
-+ subs $len, $len, #1
-+ @ Update the counter.
-+ add $ctr, $ctr, #1
-+ rev $tmp, $ctr
-+ vmov.32 q7#hi[1], $tmp
-+ bne .Lctr32_loop
-+
-+.Lctr32_done:
-+ vldmia sp!, {d8-d15}
-+ ldmia sp!, {r7-r11, pc} @ return
-+.size GFp_vpaes_ctr32_encrypt_blocks,.-GFp_vpaes_ctr32_encrypt_blocks
-+___
-+}
-+
-+foreach (split("\n",$code)) {
-+ s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo;
-+ print $_,"\n";
-+}
-+
-+close STDOUT;
-diff --git a/crypto/fipsmodule/aes/asm/vpaes-armv8.pl b/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
-new file mode 100755
-index 0000000..b31bbb8
---- /dev/null
-+++ b/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
-@@ -0,0 +1,837 @@
-+#! /usr/bin/env perl
-+# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-+#
-+# Licensed under the OpenSSL license (the "License"). You may not use
-+# this file except in compliance with the License. You can obtain a copy
-+# in the file LICENSE in the source distribution or at
-+# https://www.openssl.org/source/license.html
-+
-+
-+######################################################################
-+## Constant-time SSSE3 AES core implementation.
-+## version 0.1
-+##
-+## By Mike Hamburg (Stanford University), 2009
-+## Public domain.
-+##
-+## For details see http://shiftleft.org/papers/vector_aes/ and
-+## http://crypto.stanford.edu/vpaes/.
-+##
-+######################################################################
-+# ARMv8 NEON adaptation by <appro@openssl.org>
-+#
-+# Reason for undertaken effort is that there is at least one popular
-+# SoC based on Cortex-A53 that doesn't have crypto extensions.
-+#
-+# CBC enc ECB enc/dec(*) [bit-sliced enc/dec]
-+# Cortex-A53 21.5 18.1/20.6 [17.5/19.8 ]
-+# Cortex-A57 36.0(**) 20.4/24.9(**) [14.4/16.6 ]
-+# X-Gene 45.9(**) 45.8/57.7(**) [33.1/37.6(**) ]
-+# Denver(***) 16.6(**) 15.1/17.8(**) [8.80/9.93 ]
-+# Apple A7(***) 22.7(**) 10.9/14.3 [8.45/10.0 ]
-+# Mongoose(***) 26.3(**) 21.0/25.0(**) [13.3/16.8 ]
-+#
-+# (*) ECB denotes approximate result for parallelizable modes
-+# such as CBC decrypt, CTR, etc.;
-+# (**) these results are worse than scalar compiler-generated
-+# code, but it's constant-time and therefore preferred;
-+# (***) presented for reference/comparison purposes;
-+
-+$flavour = shift;
-+while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
-+
-+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-+( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-+( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
-+die "can't locate arm-xlate.pl";
-+
-+open OUT,"| \"$^X\" $xlate $flavour $output";
-+*STDOUT=*OUT;
-+
-+$code.=<<___;
-+#include <GFp/arm_arch.h>
-+
-+.section .rodata
-+
-+.type _vpaes_consts,%object
-+.align 7 // totally strategic alignment
-+_vpaes_consts:
-+.Lk_mc_forward: // mc_forward
-+ .quad 0x0407060500030201, 0x0C0F0E0D080B0A09
-+ .quad 0x080B0A0904070605, 0x000302010C0F0E0D
-+ .quad 0x0C0F0E0D080B0A09, 0x0407060500030201
-+ .quad 0x000302010C0F0E0D, 0x080B0A0904070605
-+.Lk_mc_backward:// mc_backward
-+ .quad 0x0605040702010003, 0x0E0D0C0F0A09080B
-+ .quad 0x020100030E0D0C0F, 0x0A09080B06050407
-+ .quad 0x0E0D0C0F0A09080B, 0x0605040702010003
-+ .quad 0x0A09080B06050407, 0x020100030E0D0C0F
-+.Lk_sr: // sr
-+ .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908
-+ .quad 0x030E09040F0A0500, 0x0B06010C07020D08
-+ .quad 0x0F060D040B020900, 0x070E050C030A0108
-+ .quad 0x0B0E0104070A0D00, 0x0306090C0F020508
-+
-+//
-+// "Hot" constants
-+//
-+.Lk_inv: // inv, inva
-+ .quad 0x0E05060F0D080180, 0x040703090A0B0C02
-+ .quad 0x01040A060F0B0780, 0x030D0E0C02050809
-+.Lk_ipt: // input transform (lo, hi)
-+ .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808
-+ .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81
-+.Lk_sbo: // sbou, sbot
-+ .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878
-+ .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA
-+.Lk_sb1: // sb1u, sb1t
-+ .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF
-+ .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544
-+.Lk_sb2: // sb2u, sb2t
-+ .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A
-+ .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD
-+
-+//
-+// Key schedule constants
-+//
-+.Lk_dksd: // decryption key schedule: invskew x*D
-+ .quad 0xFEB91A5DA3E44700, 0x0740E3A45A1DBEF9
-+ .quad 0x41C277F4B5368300, 0x5FDC69EAAB289D1E
-+.Lk_dksb: // decryption key schedule: invskew x*B
-+ .quad 0x9A4FCA1F8550D500, 0x03D653861CC94C99
-+ .quad 0x115BEDA7B6FC4A00, 0xD993256F7E3482C8
-+.Lk_dkse: // decryption key schedule: invskew x*E + 0x63
-+ .quad 0xD5031CCA1FC9D600, 0x53859A4C994F5086
-+ .quad 0xA23196054FDC7BE8, 0xCD5EF96A20B31487
-+.Lk_dks9: // decryption key schedule: invskew x*9
-+ .quad 0xB6116FC87ED9A700, 0x4AED933482255BFC
-+ .quad 0x4576516227143300, 0x8BB89FACE9DAFDCE
-+
-+.Lk_rcon: // rcon
-+ .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81
-+
-+.Lk_opt: // output transform
-+ .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808
-+ .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0
-+.Lk_deskew: // deskew tables: inverts the sbox's "skew"
-+ .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A
-+ .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77
-+
-+.asciz "Vector Permutation AES for ARMv8, Mike Hamburg (Stanford University)"
-+.size _vpaes_consts,.-_vpaes_consts
-+.align 6
-+
-+.text
-+___
-+
-+{
-+my ($inp,$out,$key) = map("x$_",(0..2));
-+
-+my ($invlo,$invhi,$iptlo,$ipthi,$sbou,$sbot) = map("v$_.16b",(18..23));
-+my ($sb1u,$sb1t,$sb2u,$sb2t) = map("v$_.16b",(24..27));
-+my ($sb9u,$sb9t,$sbdu,$sbdt,$sbbu,$sbbt,$sbeu,$sbet)=map("v$_.16b",(24..31));
-+
-+$code.=<<___;
-+##
-+## _aes_preheat
-+##
-+## Fills register %r10 -> .aes_consts (so you can -fPIC)
-+## and %xmm9-%xmm15 as specified below.
-+##
-+.type _vpaes_encrypt_preheat,%function
-+.align 4
-+_vpaes_encrypt_preheat:
-+ adrp x10, :pg_hi21:.Lk_inv
-+ add x10, x10, :lo12:.Lk_inv
-+ movi v17.16b, #0x0f
-+ ld1 {v18.2d-v19.2d}, [x10],#32 // .Lk_inv
-+ ld1 {v20.2d-v23.2d}, [x10],#64 // .Lk_ipt, .Lk_sbo
-+ ld1 {v24.2d-v27.2d}, [x10] // .Lk_sb1, .Lk_sb2
-+ ret
-+.size _vpaes_encrypt_preheat,.-_vpaes_encrypt_preheat
-+
-+##
-+## _aes_encrypt_core
-+##
-+## AES-encrypt %xmm0.
-+##
-+## Inputs:
-+## %xmm0 = input
-+## %xmm9-%xmm15 as in _vpaes_preheat
-+## (%rdx) = scheduled keys
-+##
-+## Output in %xmm0
-+## Clobbers %xmm1-%xmm5, %r9, %r10, %r11, %rax
-+## Preserves %xmm6 - %xmm8 so you get some local vectors
-+##
-+##
-+.type _vpaes_encrypt_core,%function
-+.align 4
-+_vpaes_encrypt_core:
-+ mov x9, $key
-+ ldr w8, [$key,#240] // pull rounds
-+ adrp x11, :pg_hi21:.Lk_mc_forward+16
-+ add x11, x11, :lo12:.Lk_mc_forward+16
-+ // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo
-+ ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key
-+ and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1
-+ ushr v0.16b, v7.16b, #4 // vpsrlb \$4, %xmm0, %xmm0
-+ tbl v1.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1
-+ // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi
-+ tbl v2.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2
-+ eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0
-+ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0
-+ b .Lenc_entry
-+
-+.align 4
-+.Lenc_loop:
-+ // middle of middle round
-+ add x10, x11, #0x40
-+ tbl v4.16b, {$sb1t}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u
-+ ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[]
-+ tbl v0.16b, {$sb1u}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t
-+ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ tbl v5.16b, {$sb2t}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ tbl v2.16b, {$sb2u}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t
-+ ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
-+ tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B
-+ eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A
-+ tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D
-+ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B
-+ tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C
-+ eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D
-+ and x11, x11, #~(1<<6) // and \$0x30, %r11 # ... mod 4
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D
-+ sub w8, w8, #1 // nr--
-+
-+.Lenc_entry:
-+ // top of round
-+ and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k
-+ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ tbl v5.16b, {$invhi}, v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k
-+ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ tbl v3.16b, {$invlo}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ tbl v4.16b, {$invlo}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ tbl v2.16b, {$invlo}, v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak
-+ tbl v3.16b, {$invlo}, v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak
-+ eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io
-+ eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo
-+ ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5
-+ cbnz w8, .Lenc_loop
-+
-+ // middle of last round
-+ add x10, x11, #0x80
-+ // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo
-+ // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16
-+ tbl v4.16b, {$sbou}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou
-+ ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[]
-+ tbl v0.16b, {$sbot}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t
-+ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0
-+ ret
-+.size _vpaes_encrypt_core,.-_vpaes_encrypt_core
-+
-+.globl GFp_vpaes_encrypt
-+.type GFp_vpaes_encrypt,%function
-+.align 4
-+GFp_vpaes_encrypt:
-+ AARCH64_SIGN_LINK_REGISTER
-+ stp x29,x30,[sp,#-16]!
-+ add x29,sp,#0
-+
-+ ld1 {v7.16b}, [$inp]
-+ bl _vpaes_encrypt_preheat
-+ bl _vpaes_encrypt_core
-+ st1 {v0.16b}, [$out]
-+
-+ ldp x29,x30,[sp],#16
-+ AARCH64_VALIDATE_LINK_REGISTER
-+ ret
-+.size GFp_vpaes_encrypt,.-GFp_vpaes_encrypt
-+
-+.type _vpaes_encrypt_2x,%function
-+.align 4
-+_vpaes_encrypt_2x:
-+ mov x9, $key
-+ ldr w8, [$key,#240] // pull rounds
-+ adrp x11, :pg_hi21:.Lk_mc_forward+16
-+ add x11, x11, :lo12:.Lk_mc_forward+16
-+ // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo
-+ ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key
-+ and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1
-+ ushr v0.16b, v14.16b, #4 // vpsrlb \$4, %xmm0, %xmm0
-+ and v9.16b, v15.16b, v17.16b
-+ ushr v8.16b, v15.16b, #4
-+ tbl v1.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1
-+ tbl v9.16b, {$iptlo}, v9.16b
-+ // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi
-+ tbl v2.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2
-+ tbl v10.16b, {$ipthi}, v8.16b
-+ eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0
-+ eor v8.16b, v9.16b, v16.16b
-+ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0
-+ eor v8.16b, v8.16b, v10.16b
-+ b .Lenc_2x_entry
-+
-+.align 4
-+.Lenc_2x_loop:
-+ // middle of middle round
-+ add x10, x11, #0x40
-+ tbl v4.16b, {$sb1t}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u
-+ tbl v12.16b, {$sb1t}, v10.16b
-+ ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[]
-+ tbl v0.16b, {$sb1u}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t
-+ tbl v8.16b, {$sb1u}, v11.16b
-+ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ eor v12.16b, v12.16b, v16.16b
-+ tbl v5.16b, {$sb2t}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u
-+ tbl v13.16b, {$sb2t}, v10.16b
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ eor v8.16b, v8.16b, v12.16b
-+ tbl v2.16b, {$sb2u}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t
-+ tbl v10.16b, {$sb2u}, v11.16b
-+ ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
-+ tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B
-+ tbl v11.16b, {v8.16b}, v1.16b
-+ eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A
-+ eor v10.16b, v10.16b, v13.16b
-+ tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D
-+ tbl v8.16b, {v8.16b}, v4.16b
-+ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B
-+ eor v11.16b, v11.16b, v10.16b
-+ tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C
-+ tbl v12.16b, {v11.16b},v1.16b
-+ eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D
-+ eor v8.16b, v8.16b, v11.16b
-+ and x11, x11, #~(1<<6) // and \$0x30, %r11 # ... mod 4
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D
-+ eor v8.16b, v8.16b, v12.16b
-+ sub w8, w8, #1 // nr--
-+
-+.Lenc_2x_entry:
-+ // top of round
-+ and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k
-+ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ and v9.16b, v8.16b, v17.16b
-+ ushr v8.16b, v8.16b, #4
-+ tbl v5.16b, {$invhi},v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k
-+ tbl v13.16b, {$invhi},v9.16b
-+ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ eor v9.16b, v9.16b, v8.16b
-+ tbl v3.16b, {$invlo},v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ tbl v11.16b, {$invlo},v8.16b
-+ tbl v4.16b, {$invlo},v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ tbl v12.16b, {$invlo},v9.16b
-+ eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ eor v11.16b, v11.16b, v13.16b
-+ eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ eor v12.16b, v12.16b, v13.16b
-+ tbl v2.16b, {$invlo},v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak
-+ tbl v10.16b, {$invlo},v11.16b
-+ tbl v3.16b, {$invlo},v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak
-+ tbl v11.16b, {$invlo},v12.16b
-+ eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io
-+ eor v10.16b, v10.16b, v9.16b
-+ eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo
-+ eor v11.16b, v11.16b, v8.16b
-+ ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5
-+ cbnz w8, .Lenc_2x_loop
-+
-+ // middle of last round
-+ add x10, x11, #0x80
-+ // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo
-+ // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16
-+ tbl v4.16b, {$sbou}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou
-+ tbl v12.16b, {$sbou}, v10.16b
-+ ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[]
-+ tbl v0.16b, {$sbot}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t
-+ tbl v8.16b, {$sbot}, v11.16b
-+ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ eor v12.16b, v12.16b, v16.16b
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ eor v8.16b, v8.16b, v12.16b
-+ tbl v0.16b, {v0.16b},v1.16b // vpshufb %xmm1, %xmm0, %xmm0
-+ tbl v1.16b, {v8.16b},v1.16b
-+ ret
-+.size _vpaes_encrypt_2x,.-_vpaes_encrypt_2x
-+___
-+}
-+{
-+my ($inp,$bits,$out,$dir)=("x0","w1","x2","w3");
-+my ($invlo,$invhi,$iptlo,$ipthi,$rcon) = map("v$_.16b",(18..21,8));
-+
-+$code.=<<___;
-+########################################################
-+## ##
-+## AES key schedule ##
-+## ##
-+########################################################
-+.type _vpaes_key_preheat,%function
-+.align 4
-+_vpaes_key_preheat:
-+ adrp x10, :pg_hi21:.Lk_inv
-+ add x10, x10, :lo12:.Lk_inv
-+ movi v16.16b, #0x5b // .Lk_s63
-+ adrp x11, :pg_hi21:.Lk_sb1
-+ add x11, x11, :lo12:.Lk_sb1
-+ movi v17.16b, #0x0f // .Lk_s0F
-+ ld1 {v18.2d-v21.2d}, [x10] // .Lk_inv, .Lk_ipt
-+ adrp x10, :pg_hi21:.Lk_dksd
-+ add x10, x10, :lo12:.Lk_dksd
-+ ld1 {v22.2d-v23.2d}, [x11] // .Lk_sb1
-+ adrp x11, :pg_hi21:.Lk_mc_forward
-+ add x11, x11, :lo12:.Lk_mc_forward
-+ ld1 {v24.2d-v27.2d}, [x10],#64 // .Lk_dksd, .Lk_dksb
-+ ld1 {v28.2d-v31.2d}, [x10],#64 // .Lk_dkse, .Lk_dks9
-+ ld1 {v8.2d}, [x10] // .Lk_rcon
-+ ld1 {v9.2d}, [x11] // .Lk_mc_forward[0]
-+ ret
-+.size _vpaes_key_preheat,.-_vpaes_key_preheat
-+
-+.type _vpaes_schedule_core,%function
-+.align 4
-+_vpaes_schedule_core:
-+ AARCH64_SIGN_LINK_REGISTER
-+ stp x29, x30, [sp,#-16]!
-+ add x29,sp,#0
-+
-+ bl _vpaes_key_preheat // load the tables
-+
-+ ld1 {v0.16b}, [$inp],#16 // vmovdqu (%rdi), %xmm0 # load key (unaligned)
-+
-+ // input transform
-+ mov v3.16b, v0.16b // vmovdqa %xmm0, %xmm3
-+ bl _vpaes_schedule_transform
-+ mov v7.16b, v0.16b // vmovdqa %xmm0, %xmm7
-+
-+ adrp x10, :pg_hi21:.Lk_sr // lea .Lk_sr(%rip),%r10
-+ add x10, x10, :lo12:.Lk_sr
-+
-+ add x8, x8, x10
-+
-+ // encrypting, output zeroth round key after transform
-+ st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx)
-+
-+ cmp $bits, #192 // cmp \$192, %esi
-+ b.hi .Lschedule_256
-+ b.eq .Lschedule_192
-+ // 128: fall though
-+
-+##
-+## .schedule_128
-+##
-+## 128-bit specific part of key schedule.
-+##
-+## This schedule is really simple, because all its parts
-+## are accomplished by the subroutines.
-+##
-+.Lschedule_128:
-+ mov $inp, #10 // mov \$10, %esi
-+
-+.Loop_schedule_128:
-+ sub $inp, $inp, #1 // dec %esi
-+ bl _vpaes_schedule_round
-+ cbz $inp, .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle // write output
-+ b .Loop_schedule_128
-+
-+##
-+## .aes_schedule_192
-+##
-+## 192-bit specific part of key schedule.
-+##
-+## The main body of this schedule is the same as the 128-bit
-+## schedule, but with more smearing. The long, high side is
-+## stored in %xmm7 as before, and the short, low side is in
-+## the high bits of %xmm6.
-+##
-+## This schedule is somewhat nastier, however, because each
-+## round produces 192 bits of key material, or 1.5 round keys.
-+## Therefore, on each cycle we do 2 rounds and produce 3 round
-+## keys.
-+##
-+.align 4
-+.Lschedule_192:
-+ sub $inp, $inp, #8
-+ ld1 {v0.16b}, [$inp] // vmovdqu 8(%rdi),%xmm0 # load key part 2 (very unaligned)
-+ bl _vpaes_schedule_transform // input transform
-+ mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save short part
-+ eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 # clear 4
-+ ins v6.d[0], v4.d[0] // vmovhlps %xmm4, %xmm6, %xmm6 # clobber low side with zeros
-+ mov $inp, #4 // mov \$4, %esi
-+
-+.Loop_schedule_192:
-+ sub $inp, $inp, #1 // dec %esi
-+ bl _vpaes_schedule_round
-+ ext v0.16b, v6.16b, v0.16b, #8 // vpalignr \$8,%xmm6,%xmm0,%xmm0
-+ bl _vpaes_schedule_mangle // save key n
-+ bl _vpaes_schedule_192_smear
-+ bl _vpaes_schedule_mangle // save key n+1
-+ bl _vpaes_schedule_round
-+ cbz $inp, .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle // save key n+2
-+ bl _vpaes_schedule_192_smear
-+ b .Loop_schedule_192
-+
-+##
-+## .aes_schedule_256
-+##
-+## 256-bit specific part of key schedule.
-+##
-+## The structure here is very similar to the 128-bit
-+## schedule, but with an additional "low side" in
-+## %xmm6. The low side's rounds are the same as the
-+## high side's, except no rcon and no rotation.
-+##
-+.align 4
-+.Lschedule_256:
-+ ld1 {v0.16b}, [$inp] // vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned)
-+ bl _vpaes_schedule_transform // input transform
-+ mov $inp, #7 // mov \$7, %esi
-+
-+.Loop_schedule_256:
-+ sub $inp, $inp, #1 // dec %esi
-+ bl _vpaes_schedule_mangle // output low result
-+ mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6
-+
-+ // high round
-+ bl _vpaes_schedule_round
-+ cbz $inp, .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle
-+
-+ // low round. swap xmm7 and xmm6
-+ dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0
-+ movi v4.16b, #0
-+ mov v5.16b, v7.16b // vmovdqa %xmm7, %xmm5
-+ mov v7.16b, v6.16b // vmovdqa %xmm6, %xmm7
-+ bl _vpaes_schedule_low_round
-+ mov v7.16b, v5.16b // vmovdqa %xmm5, %xmm7
-+
-+ b .Loop_schedule_256
-+
-+##
-+## .aes_schedule_mangle_last
-+##
-+## Mangler for last round of key schedule
-+## Mangles %xmm0
-+## when encrypting, outputs out(%xmm0) ^ 63
-+## when decrypting, outputs unskew(%xmm0)
-+##
-+## Always called right before return... jumps to cleanup and exits
-+##
-+.align 4
-+.Lschedule_mangle_last:
-+ // schedule last round key from xmm0
-+ adrp x11, :pg_hi21:.Lk_deskew // lea .Lk_deskew(%rip),%r11 # prepare to deskew
-+ add x11, x11, :lo12:.Lk_deskew
-+
-+ cbnz $dir, .Lschedule_mangle_last_dec
-+
-+ // encrypting
-+ ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10),%xmm1
-+ adrp x11, :pg_hi21:.Lk_opt // lea .Lk_opt(%rip), %r11 # prepare to output transform
-+ add x11, x11, :lo12:.Lk_opt
-+ add $out, $out, #32 // add \$32, %rdx
-+ tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 # output permute
-+
-+.Lschedule_mangle_last_dec:
-+ ld1 {v20.2d-v21.2d}, [x11] // reload constants
-+ sub $out, $out, #16 // add \$-16, %rdx
-+ eor v0.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm0
-+ bl _vpaes_schedule_transform // output transform
-+ st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx) # save last key
-+
-+ // cleanup
-+ eor v0.16b, v0.16b, v0.16b // vpxor %xmm0, %xmm0, %xmm0
-+ eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1
-+ eor v2.16b, v2.16b, v2.16b // vpxor %xmm2, %xmm2, %xmm2
-+ eor v3.16b, v3.16b, v3.16b // vpxor %xmm3, %xmm3, %xmm3
-+ eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4
-+ eor v5.16b, v5.16b, v5.16b // vpxor %xmm5, %xmm5, %xmm5
-+ eor v6.16b, v6.16b, v6.16b // vpxor %xmm6, %xmm6, %xmm6
-+ eor v7.16b, v7.16b, v7.16b // vpxor %xmm7, %xmm7, %xmm7
-+ ldp x29, x30, [sp],#16
-+ AARCH64_VALIDATE_LINK_REGISTER
-+ ret
-+.size _vpaes_schedule_core,.-_vpaes_schedule_core
-+
-+##
-+## .aes_schedule_192_smear
-+##
-+## Smear the short, low side in the 192-bit key schedule.
-+##
-+## Inputs:
-+## %xmm7: high side, b a x y
-+## %xmm6: low side, d c 0 0
-+## %xmm13: 0
-+##
-+## Outputs:
-+## %xmm6: b+c+d b+c 0 0
-+## %xmm0: b+c+d b+c b a
-+##
-+.type _vpaes_schedule_192_smear,%function
-+.align 4
-+_vpaes_schedule_192_smear:
-+ movi v1.16b, #0
-+ dup v0.4s, v7.s[3]
-+ ins v1.s[3], v6.s[2] // vpshufd \$0x80, %xmm6, %xmm1 # d c 0 0 -> c 0 0 0
-+ ins v0.s[0], v7.s[2] // vpshufd \$0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a
-+ eor v6.16b, v6.16b, v1.16b // vpxor %xmm1, %xmm6, %xmm6 # -> c+d c 0 0
-+ eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1
-+ eor v6.16b, v6.16b, v0.16b // vpxor %xmm0, %xmm6, %xmm6 # -> b+c+d b+c b a
-+ mov v0.16b, v6.16b // vmovdqa %xmm6, %xmm0
-+ ins v6.d[0], v1.d[0] // vmovhlps %xmm1, %xmm6, %xmm6 # clobber low side with zeros
-+ ret
-+.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
-+
-+##
-+## .aes_schedule_round
-+##
-+## Runs one main round of the key schedule on %xmm0, %xmm7
-+##
-+## Specifically, runs subbytes on the high dword of %xmm0
-+## then rotates it by one byte and xors into the low dword of
-+## %xmm7.
-+##
-+## Adds rcon from low byte of %xmm8, then rotates %xmm8 for
-+## next rcon.
-+##
-+## Smears the dwords of %xmm7 by xoring the low into the
-+## second low, result into third, result into highest.
-+##
-+## Returns results in %xmm7 = %xmm0.
-+## Clobbers %xmm1-%xmm4, %r11.
-+##
-+.type _vpaes_schedule_round,%function
-+.align 4
-+_vpaes_schedule_round:
-+ // extract rcon from xmm8
-+ movi v4.16b, #0 // vpxor %xmm4, %xmm4, %xmm4
-+ ext v1.16b, $rcon, v4.16b, #15 // vpalignr \$15, %xmm8, %xmm4, %xmm1
-+ ext $rcon, $rcon, $rcon, #15 // vpalignr \$15, %xmm8, %xmm8, %xmm8
-+ eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7
-+
-+ // rotate
-+ dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0
-+ ext v0.16b, v0.16b, v0.16b, #1 // vpalignr \$1, %xmm0, %xmm0, %xmm0
-+
-+ // fall through...
-+
-+ // low round: same as high round, but no rotation and no rcon.
-+_vpaes_schedule_low_round:
-+ // smear xmm7
-+ ext v1.16b, v4.16b, v7.16b, #12 // vpslldq \$4, %xmm7, %xmm1
-+ eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7
-+ ext v4.16b, v4.16b, v7.16b, #8 // vpslldq \$8, %xmm7, %xmm4
-+
-+ // subbytes
-+ and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k
-+ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ eor v7.16b, v7.16b, v4.16b // vpxor %xmm4, %xmm7, %xmm7
-+ tbl v2.16b, {$invhi}, v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k
-+ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ tbl v3.16b, {$invlo}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ tbl v4.16b, {$invlo}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ eor v7.16b, v7.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm7, %xmm7
-+ tbl v3.16b, {$invlo}, v3.16b // vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak
-+ eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ tbl v2.16b, {$invlo}, v4.16b // vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak
-+ eor v3.16b, v3.16b, v1.16b // vpxor %xmm1, %xmm3, %xmm3 # 2 = io
-+ eor v2.16b, v2.16b, v0.16b // vpxor %xmm0, %xmm2, %xmm2 # 3 = jo
-+ tbl v4.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou
-+ tbl v1.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t
-+ eor v1.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output
-+
-+ // add in smeared stuff
-+ eor v0.16b, v1.16b, v7.16b // vpxor %xmm7, %xmm1, %xmm0
-+ eor v7.16b, v1.16b, v7.16b // vmovdqa %xmm0, %xmm7
-+ ret
-+.size _vpaes_schedule_round,.-_vpaes_schedule_round
-+
-+##
-+## .aes_schedule_transform
-+##
-+## Linear-transform %xmm0 according to tables at (%r11)
-+##
-+## Requires that %xmm9 = 0x0F0F... as in preheat
-+## Output in %xmm0
-+## Clobbers %xmm1, %xmm2
-+##
-+.type _vpaes_schedule_transform,%function
-+.align 4
-+_vpaes_schedule_transform:
-+ and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1
-+ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0
-+ // vmovdqa (%r11), %xmm2 # lo
-+ tbl v2.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm2
-+ // vmovdqa 16(%r11), %xmm1 # hi
-+ tbl v0.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm1, %xmm0
-+ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0
-+ ret
-+.size _vpaes_schedule_transform,.-_vpaes_schedule_transform
-+
-+##
-+## .aes_schedule_mangle
-+##
-+## Mangle xmm0 from (basis-transformed) standard version
-+## to our version.
-+##
-+## On encrypt,
-+## xor with 0x63
-+## multiply by circulant 0,1,1,1
-+## apply shiftrows transform
-+##
-+## On decrypt,
-+## xor with 0x63
-+## multiply by "inverse mixcolumns" circulant E,B,D,9
-+## deskew
-+## apply shiftrows transform
-+##
-+##
-+## Writes out to (%rdx), and increments or decrements it
-+## Keeps track of round number mod 4 in %r8
-+## Preserves xmm0
-+## Clobbers xmm1-xmm5
-+##
-+.type _vpaes_schedule_mangle,%function
-+.align 4
-+_vpaes_schedule_mangle:
-+ mov v4.16b, v0.16b // vmovdqa %xmm0, %xmm4 # save xmm0 for later
-+ // vmovdqa .Lk_mc_forward(%rip),%xmm5
-+
-+ // encrypting
-+ eor v4.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm4
-+ add $out, $out, #16 // add \$16, %rdx
-+ tbl v4.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm4
-+ tbl v1.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm1
-+ tbl v3.16b, {v1.16b}, v9.16b // vpshufb %xmm5, %xmm1, %xmm3
-+ eor v4.16b, v4.16b, v1.16b // vpxor %xmm1, %xmm4, %xmm4
-+ ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1
-+ eor v3.16b, v3.16b, v4.16b // vpxor %xmm4, %xmm3, %xmm3
-+
-+.Lschedule_mangle_both:
-+ tbl v3.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3
-+ add x8, x8, #64-16 // add \$-16, %r8
-+ and x8, x8, #~(1<<6) // and \$0x30, %r8
-+ st1 {v3.2d}, [$out] // vmovdqu %xmm3, (%rdx)
-+ ret
-+.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
-+
-+.globl GFp_vpaes_set_encrypt_key
-+.type GFp_vpaes_set_encrypt_key,%function
-+.align 4
-+GFp_vpaes_set_encrypt_key:
-+ AARCH64_SIGN_LINK_REGISTER
-+ stp x29,x30,[sp,#-16]!
-+ add x29,sp,#0
-+ stp d8,d9,[sp,#-16]! // ABI spec says so
-+
-+ lsr w9, $bits, #5 // shr \$5,%eax
-+ add w9, w9, #5 // \$5,%eax
-+ str w9, [$out,#240] // mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5;
-+
-+ mov $dir, #0 // mov \$0,%ecx
-+ mov x8, #0x30 // mov \$0x30,%r8d
-+ bl _vpaes_schedule_core
-+ eor x0, x0, x0
-+
-+ ldp d8,d9,[sp],#16
-+ ldp x29,x30,[sp],#16
-+ AARCH64_VALIDATE_LINK_REGISTER
-+ ret
-+.size GFp_vpaes_set_encrypt_key,.-GFp_vpaes_set_encrypt_key
-+___
-+}
-+{
-+my ($inp,$out,$len,$key,$ivec) = map("x$_",(0..4));
-+my ($ctr, $ctr_tmp) = ("w6", "w7");
-+
-+# void GFp_vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len,
-+# const AES_KEY *key, const uint8_t ivec[16]);
-+$code.=<<___;
-+.globl GFp_vpaes_ctr32_encrypt_blocks
-+.type GFp_vpaes_ctr32_encrypt_blocks,%function
-+.align 4
-+GFp_vpaes_ctr32_encrypt_blocks:
-+ AARCH64_SIGN_LINK_REGISTER
-+ stp x29,x30,[sp,#-16]!
-+ add x29,sp,#0
-+ stp d8,d9,[sp,#-16]! // ABI spec says so
-+ stp d10,d11,[sp,#-16]!
-+ stp d12,d13,[sp,#-16]!
-+ stp d14,d15,[sp,#-16]!
-+
-+ cbz $len, .Lctr32_done
-+
-+ // Note, unlike the other functions, $len here is measured in blocks,
-+ // not bytes.
-+ mov x17, $len
-+ mov x2, $key
-+
-+ // Load the IV and counter portion.
-+ ldr $ctr, [$ivec, #12]
-+ ld1 {v7.16b}, [$ivec]
-+
-+ bl _vpaes_encrypt_preheat
-+ tst x17, #1
-+ rev $ctr, $ctr // The counter is big-endian.
-+ b.eq .Lctr32_prep_loop
-+
-+ // Handle one block so the remaining block count is even for
-+ // _vpaes_encrypt_2x.
-+ ld1 {v6.16b}, [$inp], #16 // Load input ahead of time
-+ bl _vpaes_encrypt_core
-+ eor v0.16b, v0.16b, v6.16b // XOR input and result
-+ st1 {v0.16b}, [$out], #16
-+ subs x17, x17, #1
-+ // Update the counter.
-+ add $ctr, $ctr, #1
-+ rev $ctr_tmp, $ctr
-+ mov v7.s[3], $ctr_tmp
-+ b.ls .Lctr32_done
-+
-+.Lctr32_prep_loop:
-+ // _vpaes_encrypt_core takes its input from v7, while _vpaes_encrypt_2x
-+ // uses v14 and v15.
-+ mov v15.16b, v7.16b
-+ mov v14.16b, v7.16b
-+ add $ctr, $ctr, #1
-+ rev $ctr_tmp, $ctr
-+ mov v15.s[3], $ctr_tmp
-+
-+.Lctr32_loop:
-+ ld1 {v6.16b,v7.16b}, [$inp], #32 // Load input ahead of time
-+ bl _vpaes_encrypt_2x
-+ eor v0.16b, v0.16b, v6.16b // XOR input and result
-+ eor v1.16b, v1.16b, v7.16b // XOR input and result (#2)
-+ st1 {v0.16b,v1.16b}, [$out], #32
-+ subs x17, x17, #2
-+ // Update the counter.
-+ add $ctr_tmp, $ctr, #1
-+ add $ctr, $ctr, #2
-+ rev $ctr_tmp, $ctr_tmp
-+ mov v14.s[3], $ctr_tmp
-+ rev $ctr_tmp, $ctr
-+ mov v15.s[3], $ctr_tmp
-+ b.hi .Lctr32_loop
-+
-+.Lctr32_done:
-+ ldp d14,d15,[sp],#16
-+ ldp d12,d13,[sp],#16
-+ ldp d10,d11,[sp],#16
-+ ldp d8,d9,[sp],#16
-+ ldp x29,x30,[sp],#16
-+ AARCH64_VALIDATE_LINK_REGISTER
-+ ret
-+.size GFp_vpaes_ctr32_encrypt_blocks,.-GFp_vpaes_ctr32_encrypt_blocks
-+___
-+}
-+
-+print $code;
-+
-+close STDOUT or die "error closing STDOUT";
-diff --git a/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl b/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
-new file mode 100644
-index 0000000..7e52ad6
---- /dev/null
-+++ b/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
-@@ -0,0 +1,294 @@
-+#! /usr/bin/env perl
-+# Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved.
-+#
-+# Licensed under the OpenSSL license (the "License"). You may not use
-+# this file except in compliance with the License. You can obtain a copy
-+# in the file LICENSE in the source distribution or at
-+# https://www.openssl.org/source/license.html
-+
-+# ====================================================================
-+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-+# project. The module is, however, dual licensed under OpenSSL and
-+# CRYPTOGAMS licenses depending on where you obtain it. For further
-+# details see http://www.openssl.org/~appro/cryptogams/.
-+# ====================================================================
-+
-+# This file was adapted to AArch64 from the 32-bit version in ghash-armv4.pl. It
-+# implements the multiplication algorithm described in:
-+#
-+# Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software
-+# Polynomial Multiplication on ARM Processors using the NEON Engine.
-+#
-+# http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf
-+#
-+# The main distinction to keep in mind between 32-bit NEON and AArch64 SIMD is
-+# AArch64 cannot compute over the upper halves of SIMD registers. In 32-bit
-+# NEON, the low and high halves of the 128-bit register q0 are accessible as
-+# 64-bit registers d0 and d1, respectively. In AArch64, dN is the lower half of
-+# vN. Where the 32-bit version would use the upper half, this file must keep
-+# halves in separate registers.
-+#
-+# The other distinction is in syntax. 32-bit NEON embeds lane information in the
-+# instruction name, while AArch64 uses suffixes on the registers. For instance,
-+# left-shifting 64-bit lanes of a SIMD register in 32-bit would be written:
-+#
-+# vshl.i64 q0, q0, #1
-+#
-+# in 64-bit, it would be written:
-+#
-+# shl v0.2d, v0.2d, #1
-+#
-+# See Programmer's Guide for ARMv8-A, section 7 for details.
-+# http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/DEN0024A_v8_architecture_PG.pdf
-+#
-+# Finally, note the 8-bit and 64-bit polynomial multipliers in AArch64 differ
-+# only by suffix. pmull vR.8h, vA.8b, vB.8b multiplies eight 8-bit polynomials
-+# and is always available. pmull vR.1q, vA.1d, vB.1d multiplies a 64-bit
-+# polynomial and is conditioned on the PMULL extension. This file emulates the
-+# latter with the former.
-+
-+use strict;
-+
-+my $flavour = shift;
-+my $output;
-+if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; }
-+else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} }
-+
-+if ($flavour && $flavour ne "void") {
-+ $0 =~ m/(.*[\/\\])[^\/\\]+$/;
-+ my $dir = $1;
-+ my $xlate;
-+ ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-+ ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
-+ die "can't locate arm-xlate.pl";
-+
-+ open OUT,"| \"$^X\" $xlate $flavour $output";
-+ *STDOUT=*OUT;
-+} else {
-+ open OUT,">$output";
-+ *STDOUT=*OUT;
-+}
-+
-+my ($Xi, $Htbl, $inp, $len) = map("x$_", (0..3)); # argument block
-+my ($Xl, $Xm, $Xh, $INlo, $INhi) = map("v$_", (0..4));
-+my ($Hlo, $Hhi, $Hhl) = map("v$_", (5..7));
-+# d8-d15 are callee-saved, so avoid v8-v15. AArch64 SIMD has plenty of registers
-+# to spare.
-+my ($t0, $t1, $t2, $t3) = map("v$_", (16..19));
-+my ($t0l_t1l, $t0h_t1h, $t2l_t3l, $t2h_t3h) = map("v$_", (20..23));
-+my ($k48_k32, $k16_k0) = map("v$_", (24..25));
-+
-+my $code = "";
-+
-+# clmul64x64 emits code which emulates pmull $r.1q, $a.1d, $b.1d. $r, $a, and $b
-+# must be distinct from $t* and $k*. $t* are clobbered by the emitted code.
-+sub clmul64x64 {
-+my ($r, $a, $b) = @_;
-+$code .= <<___;
-+ ext $t0.8b, $a.8b, $a.8b, #1 // A1
-+ pmull $t0.8h, $t0.8b, $b.8b // F = A1*B
-+ ext $r.8b, $b.8b, $b.8b, #1 // B1
-+ pmull $r.8h, $a.8b, $r.8b // E = A*B1
-+ ext $t1.8b, $a.8b, $a.8b, #2 // A2
-+ pmull $t1.8h, $t1.8b, $b.8b // H = A2*B
-+ ext $t3.8b, $b.8b, $b.8b, #2 // B2
-+ pmull $t3.8h, $a.8b, $t3.8b // G = A*B2
-+ ext $t2.8b, $a.8b, $a.8b, #3 // A3
-+ eor $t0.16b, $t0.16b, $r.16b // L = E + F
-+ pmull $t2.8h, $t2.8b, $b.8b // J = A3*B
-+ ext $r.8b, $b.8b, $b.8b, #3 // B3
-+ eor $t1.16b, $t1.16b, $t3.16b // M = G + H
-+ pmull $r.8h, $a.8b, $r.8b // I = A*B3
-+
-+ // Here we diverge from the 32-bit version. It computes the following
-+ // (instructions reordered for clarity):
-+ //
-+ // veor \$t0#lo, \$t0#lo, \$t0#hi @ t0 = P0 + P1 (L)
-+ // vand \$t0#hi, \$t0#hi, \$k48
-+ // veor \$t0#lo, \$t0#lo, \$t0#hi
-+ //
-+ // veor \$t1#lo, \$t1#lo, \$t1#hi @ t1 = P2 + P3 (M)
-+ // vand \$t1#hi, \$t1#hi, \$k32
-+ // veor \$t1#lo, \$t1#lo, \$t1#hi
-+ //
-+ // veor \$t2#lo, \$t2#lo, \$t2#hi @ t2 = P4 + P5 (N)
-+ // vand \$t2#hi, \$t2#hi, \$k16
-+ // veor \$t2#lo, \$t2#lo, \$t2#hi
-+ //
-+ // veor \$t3#lo, \$t3#lo, \$t3#hi @ t3 = P6 + P7 (K)
-+ // vmov.i64 \$t3#hi, #0
-+ //
-+ // \$kN is a mask with the bottom N bits set. AArch64 cannot compute on
-+ // upper halves of SIMD registers, so we must split each half into
-+ // separate registers. To compensate, we pair computations up and
-+ // parallelize.
-+
-+ ext $t3.8b, $b.8b, $b.8b, #4 // B4
-+ eor $t2.16b, $t2.16b, $r.16b // N = I + J
-+ pmull $t3.8h, $a.8b, $t3.8b // K = A*B4
-+
-+ // This can probably be scheduled more efficiently. For now, we just
-+ // pair up independent instructions.
-+ zip1 $t0l_t1l.2d, $t0.2d, $t1.2d
-+ zip1 $t2l_t3l.2d, $t2.2d, $t3.2d
-+ zip2 $t0h_t1h.2d, $t0.2d, $t1.2d
-+ zip2 $t2h_t3h.2d, $t2.2d, $t3.2d
-+ eor $t0l_t1l.16b, $t0l_t1l.16b, $t0h_t1h.16b
-+ eor $t2l_t3l.16b, $t2l_t3l.16b, $t2h_t3h.16b
-+ and $t0h_t1h.16b, $t0h_t1h.16b, $k48_k32.16b
-+ and $t2h_t3h.16b, $t2h_t3h.16b, $k16_k0.16b
-+ eor $t0l_t1l.16b, $t0l_t1l.16b, $t0h_t1h.16b
-+ eor $t2l_t3l.16b, $t2l_t3l.16b, $t2h_t3h.16b
-+ zip1 $t0.2d, $t0l_t1l.2d, $t0h_t1h.2d
-+ zip1 $t2.2d, $t2l_t3l.2d, $t2h_t3h.2d
-+ zip2 $t1.2d, $t0l_t1l.2d, $t0h_t1h.2d
-+ zip2 $t3.2d, $t2l_t3l.2d, $t2h_t3h.2d
-+
-+ ext $t0.16b, $t0.16b, $t0.16b, #15 // t0 = t0 << 8
-+ ext $t1.16b, $t1.16b, $t1.16b, #14 // t1 = t1 << 16
-+ pmull $r.8h, $a.8b, $b.8b // D = A*B
-+ ext $t3.16b, $t3.16b, $t3.16b, #12 // t3 = t3 << 32
-+ ext $t2.16b, $t2.16b, $t2.16b, #13 // t2 = t2 << 24
-+ eor $t0.16b, $t0.16b, $t1.16b
-+ eor $t2.16b, $t2.16b, $t3.16b
-+ eor $r.16b, $r.16b, $t0.16b
-+ eor $r.16b, $r.16b, $t2.16b
-+___
-+}
-+
-+$code .= <<___;
-+#include <GFp/arm_arch.h>
-+
-+.text
-+
-+.global GFp_gcm_init_neon
-+.type GFp_gcm_init_neon,%function
-+.align 4
-+GFp_gcm_init_neon:
-+ AARCH64_VALID_CALL_TARGET
-+ // This function is adapted from gcm_init_v8. xC2 is t3.
-+ ld1 {$t1.2d}, [x1] // load H
-+ movi $t3.16b, #0xe1
-+ shl $t3.2d, $t3.2d, #57 // 0xc2.0
-+ ext $INlo.16b, $t1.16b, $t1.16b, #8
-+ ushr $t2.2d, $t3.2d, #63
-+ dup $t1.4s, $t1.s[1]
-+ ext $t0.16b, $t2.16b, $t3.16b, #8 // t0=0xc2....01
-+ ushr $t2.2d, $INlo.2d, #63
-+ sshr $t1.4s, $t1.4s, #31 // broadcast carry bit
-+ and $t2.16b, $t2.16b, $t0.16b
-+ shl $INlo.2d, $INlo.2d, #1
-+ ext $t2.16b, $t2.16b, $t2.16b, #8
-+ and $t0.16b, $t0.16b, $t1.16b
-+ orr $INlo.16b, $INlo.16b, $t2.16b // H<<<=1
-+ eor $Hlo.16b, $INlo.16b, $t0.16b // twisted H
-+ st1 {$Hlo.2d}, [x0] // store Htable[0]
-+ ret
-+.size GFp_gcm_init_neon,.-GFp_gcm_init_neon
-+
-+.global GFp_gcm_gmult_neon
-+.type GFp_gcm_gmult_neon,%function
-+.align 4
-+GFp_gcm_gmult_neon:
-+ AARCH64_VALID_CALL_TARGET
-+ ld1 {$INlo.16b}, [$Xi] // load Xi
-+ ld1 {$Hlo.1d}, [$Htbl], #8 // load twisted H
-+ ld1 {$Hhi.1d}, [$Htbl]
-+ adrp x9, :pg_hi21:.Lmasks // load constants
-+ add x9, x9, :lo12:.Lmasks
-+ ld1 {$k48_k32.2d, $k16_k0.2d}, [x9]
-+ rev64 $INlo.16b, $INlo.16b // byteswap Xi
-+ ext $INlo.16b, $INlo.16b, $INlo.16b, #8
-+ eor $Hhl.8b, $Hlo.8b, $Hhi.8b // Karatsuba pre-processing
-+
-+ mov $len, #16
-+ b .Lgmult_neon
-+.size GFp_gcm_gmult_neon,.-GFp_gcm_gmult_neon
-+
-+.global GFp_gcm_ghash_neon
-+.type GFp_gcm_ghash_neon,%function
-+.align 4
-+GFp_gcm_ghash_neon:
-+ AARCH64_VALID_CALL_TARGET
-+ ld1 {$Xl.16b}, [$Xi] // load Xi
-+ ld1 {$Hlo.1d}, [$Htbl], #8 // load twisted H
-+ ld1 {$Hhi.1d}, [$Htbl]
-+ adrp x9, :pg_hi21:.Lmasks // load constants
-+ add x9, x9, :lo12:.Lmasks
-+ ld1 {$k48_k32.2d, $k16_k0.2d}, [x9]
-+ rev64 $Xl.16b, $Xl.16b // byteswap Xi
-+ ext $Xl.16b, $Xl.16b, $Xl.16b, #8
-+ eor $Hhl.8b, $Hlo.8b, $Hhi.8b // Karatsuba pre-processing
-+
-+.Loop_neon:
-+ ld1 {$INlo.16b}, [$inp], #16 // load inp
-+ rev64 $INlo.16b, $INlo.16b // byteswap inp
-+ ext $INlo.16b, $INlo.16b, $INlo.16b, #8
-+ eor $INlo.16b, $INlo.16b, $Xl.16b // inp ^= Xi
-+
-+.Lgmult_neon:
-+ // Split the input into $INlo and $INhi. (The upper halves are unused,
-+ // so it is okay to leave them alone.)
-+ ins $INhi.d[0], $INlo.d[1]
-+___
-+&clmul64x64 ($Xl, $Hlo, $INlo); # H.lo·Xi.lo
-+$code .= <<___;
-+ eor $INlo.8b, $INlo.8b, $INhi.8b // Karatsuba pre-processing
-+___
-+&clmul64x64 ($Xm, $Hhl, $INlo); # (H.lo+H.hi)·(Xi.lo+Xi.hi)
-+&clmul64x64 ($Xh, $Hhi, $INhi); # H.hi·Xi.hi
-+$code .= <<___;
-+ ext $t0.16b, $Xl.16b, $Xh.16b, #8
-+ eor $Xm.16b, $Xm.16b, $Xl.16b // Karatsuba post-processing
-+ eor $Xm.16b, $Xm.16b, $Xh.16b
-+ eor $Xm.16b, $Xm.16b, $t0.16b // Xm overlaps Xh.lo and Xl.hi
-+ ins $Xl.d[1], $Xm.d[0] // Xh|Xl - 256-bit result
-+ // This is a no-op due to the ins instruction below.
-+ // ins $Xh.d[0], $Xm.d[1]
-+
-+ // equivalent of reduction_avx from ghash-x86_64.pl
-+ shl $t1.2d, $Xl.2d, #57 // 1st phase
-+ shl $t2.2d, $Xl.2d, #62
-+ eor $t2.16b, $t2.16b, $t1.16b //
-+ shl $t1.2d, $Xl.2d, #63
-+ eor $t2.16b, $t2.16b, $t1.16b //
-+ // Note Xm contains {Xl.d[1], Xh.d[0]}.
-+ eor $t2.16b, $t2.16b, $Xm.16b
-+ ins $Xl.d[1], $t2.d[0] // Xl.d[1] ^= t2.d[0]
-+ ins $Xh.d[0], $t2.d[1] // Xh.d[0] ^= t2.d[1]
-+
-+ ushr $t2.2d, $Xl.2d, #1 // 2nd phase
-+ eor $Xh.16b, $Xh.16b,$Xl.16b
-+ eor $Xl.16b, $Xl.16b,$t2.16b //
-+ ushr $t2.2d, $t2.2d, #6
-+ ushr $Xl.2d, $Xl.2d, #1 //
-+ eor $Xl.16b, $Xl.16b, $Xh.16b //
-+ eor $Xl.16b, $Xl.16b, $t2.16b //
-+
-+ subs $len, $len, #16
-+ bne .Loop_neon
-+
-+ rev64 $Xl.16b, $Xl.16b // byteswap Xi and write
-+ ext $Xl.16b, $Xl.16b, $Xl.16b, #8
-+ st1 {$Xl.16b}, [$Xi]
-+
-+ ret
-+.size GFp_gcm_ghash_neon,.-GFp_gcm_ghash_neon
-+
-+.section .rodata
-+.align 4
-+.Lmasks:
-+.quad 0x0000ffffffffffff // k48
-+.quad 0x00000000ffffffff // k32
-+.quad 0x000000000000ffff // k16
-+.quad 0x0000000000000000 // k0
-+.asciz "GHASH for ARMv8, derived from ARMv4 version by <appro\@openssl.org>"
-+.align 2
-+___
-+
-+foreach (split("\n",$code)) {
-+ s/\`([^\`]*)\`/eval $1/geo;
-+
-+ print $_,"\n";
-+}
-+close STDOUT or die "error closing STDOUT"; # enforce flush
---
-Efraim Flashner <efraim@flashner.co.il> רנשלפ םירפא
-GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
-Confidentiality cannot be guaranteed on emails sent or received unencrypted
-
diff --git a/gnu/packages/patches/rust-ring-0.16-test-files.patch b/gnu/packages/patches/rust-ring-0.16-test-files.patch
deleted file mode 100644
index dbe5c0f4ee..0000000000
--- a/gnu/packages/patches/rust-ring-0.16-test-files.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-This file exists in the upstream repository at the commit which
-corresponds to the ring-0.16.20 release, but was excluded from the
-release tarball.
-
----
- tests/ed25519_verify_tests.txt | 34 ++++++++++++++++++++++++++++++++++
- 1 file changed, 34 insertions(+)
- create mode 100644 tests/ed25519_verify_tests.txt
-
-diff --git a/tests/ed25519_verify_tests.txt b/tests/ed25519_verify_tests.txt
-new file mode 100644
-index 0000000..74c94b3
---- /dev/null
-+++ b/tests/ed25519_verify_tests.txt
-@@ -0,0 +1,34 @@
-+# BoringSSL TEST(Ed25519Test Malleability)
-+
-+# Control; S is in range.
-+MESSAGE = 54657374
-+SIG = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d
-+PUB = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa
-+Result = P
-+
-+# Same as above, but with the order L added to S so it is out of range.
-+# BoringSSL commit 472ba2c2dd52d06a657a63b7fbf02732a6649d21
-+MESSAGE = 54657374
-+SIG = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab067654bce3832c2d76f8f6f5dafc08d9339d4eef676573336a5c51eb6f946b31d
-+PUB = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa
-+Result = F
-+
-+
-+# BoringSSL commit 3094902fcdc2db2cc832fa854b9a6a8be383926c
-+MESSAGE = 124e583f8b8eca58bb29c271b41d36986bbc45541f8e51f9cb0133eca447601e
-+SIG = dac119d6ca87fc59ae611c157048f4d4fc932a149dbe20ec6effd1436abf83ea05c7df0fef06147241259113909bc71bd3c53ba4464ffcad3c0968f2ffffff0f
-+PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86
-+Result = P
-+
-+# Control. Same key as above; same message and signature as below, except S is in range.
-+PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86
-+MESSAGE = 6a0bc2b0057cedfc0fa2e3f7f7d39279b30f454a69dfd1117c758d86b19d85e0
-+SIG = 0971f86d2c9c78582524a103cb9cf949522ae528f8054dc20107d999be673ff4f58ac9d20ec563133cabc6230b1db8625f8446639ede46ad4df4053000000000
-+Result = P
-+
-+# Same key as above, but S is out of range.
-+# BoringSSL commit 472ba2c2dd52d06a657a63b7fbf02732a6649d21
-+PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86
-+MESSAGE = 6a0bc2b0057cedfc0fa2e3f7f7d39279b30f454a69dfd1117c758d86b19d85e0
-+SIG = 0971f86d2c9c78582524a103cb9cf949522ae528f8054dc20107d999be673ff4e25ebf2f2928766b1248bec6e91697775f8446639ede46ad4df4053000000010
-+Result = F
---
-Efraim Flashner <efraim@flashner.co.il> רנשלפ םירפא
-GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
-Confidentiality cannot be guaranteed on emails sent or received unencrypted
-
diff --git a/gnu/packages/patches/rust-ring-0.17-ring-core.patch b/gnu/packages/patches/rust-ring-0.17-ring-core.patch
new file mode 100644
index 0000000000..faa3a8a191
--- /dev/null
+++ b/gnu/packages/patches/rust-ring-0.17-ring-core.patch
@@ -0,0 +1,496 @@
+These two files are needed to finish generating the files for windows
+and were generated using 'RING_PREGENERATE_ASM=1 cargo build
+--target-dir=target/pregenerate_asm'. Included here so we don't need to
+add cargo to the computed-source.
+
+---
+ .../ring_core_generated/prefix_symbols_asm.h | 236 ++++++++++++++++++
+ .../prefix_symbols_nasm.inc | 236 ++++++++++++++++++
+ 2 files changed, 472 insertions(+)
+ create mode 100644 pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+ create mode 100644 pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+
+diff --git a/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h b/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+new file mode 100644
+index 000000000..1cd766400
+--- /dev/null
++++ b/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+@@ -0,0 +1,236 @@
++
++#ifndef ring_core_generated_PREFIX_SYMBOLS_ASM_H
++#define ring_core_generated_PREFIX_SYMBOLS_ASM_H
++
++#if defined(__APPLE__)
++#define _ecp_nistz256_point_double _p256_point_double
++#define _ecp_nistz256_point_add _p256_point_add
++#define _ecp_nistz256_point_add_affine _p256_point_add_affine
++#define _ecp_nistz256_ord_mul_mont _p256_scalar_mul_mont
++#define _ecp_nistz256_ord_sqr_mont _p256_scalar_sqr_rep_mont
++#define _ecp_nistz256_mul_mont _p256_mul_mont
++#define _ecp_nistz256_sqr_mont _p256_sqr_mont
++#define _CRYPTO_memcmp _ring_core_0_17_7_CRYPTO_memcmp
++#define _CRYPTO_poly1305_finish _ring_core_0_17_7_CRYPTO_poly1305_finish
++#define _CRYPTO_poly1305_finish_neon _ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++#define _CRYPTO_poly1305_init _ring_core_0_17_7_CRYPTO_poly1305_init
++#define _CRYPTO_poly1305_init_neon _ring_core_0_17_7_CRYPTO_poly1305_init_neon
++#define _CRYPTO_poly1305_update _ring_core_0_17_7_CRYPTO_poly1305_update
++#define _CRYPTO_poly1305_update_neon _ring_core_0_17_7_CRYPTO_poly1305_update_neon
++#define _ChaCha20_ctr32 _ring_core_0_17_7_ChaCha20_ctr32
++#define _LIMBS_add_mod _ring_core_0_17_7_LIMBS_add_mod
++#define _LIMBS_are_even _ring_core_0_17_7_LIMBS_are_even
++#define _LIMBS_are_zero _ring_core_0_17_7_LIMBS_are_zero
++#define _LIMBS_equal _ring_core_0_17_7_LIMBS_equal
++#define _LIMBS_equal_limb _ring_core_0_17_7_LIMBS_equal_limb
++#define _LIMBS_less_than _ring_core_0_17_7_LIMBS_less_than
++#define _LIMBS_less_than_limb _ring_core_0_17_7_LIMBS_less_than_limb
++#define _LIMBS_reduce_once _ring_core_0_17_7_LIMBS_reduce_once
++#define _LIMBS_select_512_32 _ring_core_0_17_7_LIMBS_select_512_32
++#define _LIMBS_shl_mod _ring_core_0_17_7_LIMBS_shl_mod
++#define _LIMBS_sub_mod _ring_core_0_17_7_LIMBS_sub_mod
++#define _LIMBS_window5_split_window _ring_core_0_17_7_LIMBS_window5_split_window
++#define _LIMBS_window5_unsplit_window _ring_core_0_17_7_LIMBS_window5_unsplit_window
++#define _LIMB_shr _ring_core_0_17_7_LIMB_shr
++#define _OPENSSL_armcap_P _ring_core_0_17_7_OPENSSL_armcap_P
++#define _OPENSSL_cpuid_setup _ring_core_0_17_7_OPENSSL_cpuid_setup
++#define _OPENSSL_ia32cap_P _ring_core_0_17_7_OPENSSL_ia32cap_P
++#define _aes_hw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++#define _aes_hw_encrypt _ring_core_0_17_7_aes_hw_encrypt
++#define _aes_hw_set_encrypt_key _ring_core_0_17_7_aes_hw_set_encrypt_key
++#define _aes_nohw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++#define _aes_nohw_encrypt _ring_core_0_17_7_aes_nohw_encrypt
++#define _aes_nohw_set_encrypt_key _ring_core_0_17_7_aes_nohw_set_encrypt_key
++#define _aesni_gcm_decrypt _ring_core_0_17_7_aesni_gcm_decrypt
++#define _aesni_gcm_encrypt _ring_core_0_17_7_aesni_gcm_encrypt
++#define _bn_from_montgomery_in_place _ring_core_0_17_7_bn_from_montgomery_in_place
++#define _bn_gather5 _ring_core_0_17_7_bn_gather5
++#define _bn_mul_mont _ring_core_0_17_7_bn_mul_mont
++#define _bn_mul_mont_gather5 _ring_core_0_17_7_bn_mul_mont_gather5
++#define _bn_neg_inv_mod_r_u64 _ring_core_0_17_7_bn_neg_inv_mod_r_u64
++#define _bn_power5 _ring_core_0_17_7_bn_power5
++#define _bn_scatter5 _ring_core_0_17_7_bn_scatter5
++#define _bn_sqr8x_internal _ring_core_0_17_7_bn_sqr8x_internal
++#define _bn_sqrx8x_internal _ring_core_0_17_7_bn_sqrx8x_internal
++#define _bsaes_ctr32_encrypt_blocks _ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++#define _bssl_constant_time_test_conditional_memcpy _ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++#define _bssl_constant_time_test_conditional_memxor _ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++#define _bssl_constant_time_test_main _ring_core_0_17_7_bssl_constant_time_test_main
++#define _chacha20_poly1305_open _ring_core_0_17_7_chacha20_poly1305_open
++#define _chacha20_poly1305_seal _ring_core_0_17_7_chacha20_poly1305_seal
++#define _fiat_curve25519_adx_mul _ring_core_0_17_7_fiat_curve25519_adx_mul
++#define _fiat_curve25519_adx_square _ring_core_0_17_7_fiat_curve25519_adx_square
++#define _gcm_ghash_avx _ring_core_0_17_7_gcm_ghash_avx
++#define _gcm_ghash_clmul _ring_core_0_17_7_gcm_ghash_clmul
++#define _gcm_ghash_neon _ring_core_0_17_7_gcm_ghash_neon
++#define _gcm_gmult_clmul _ring_core_0_17_7_gcm_gmult_clmul
++#define _gcm_gmult_neon _ring_core_0_17_7_gcm_gmult_neon
++#define _gcm_init_avx _ring_core_0_17_7_gcm_init_avx
++#define _gcm_init_clmul _ring_core_0_17_7_gcm_init_clmul
++#define _gcm_init_neon _ring_core_0_17_7_gcm_init_neon
++#define _k25519Precomp _ring_core_0_17_7_k25519Precomp
++#define _limbs_mul_add_limb _ring_core_0_17_7_limbs_mul_add_limb
++#define _little_endian_bytes_from_scalar _ring_core_0_17_7_little_endian_bytes_from_scalar
++#define _ecp_nistz256_neg _ring_core_0_17_7_ecp_nistz256_neg
++#define _ecp_nistz256_select_w5 _ring_core_0_17_7_ecp_nistz256_select_w5
++#define _ecp_nistz256_select_w7 _ring_core_0_17_7_ecp_nistz256_select_w7
++#define _p256_mul_mont _ring_core_0_17_7_p256_mul_mont
++#define _p256_point_add _ring_core_0_17_7_p256_point_add
++#define _p256_point_add_affine _ring_core_0_17_7_p256_point_add_affine
++#define _p256_point_double _ring_core_0_17_7_p256_point_double
++#define _p256_point_mul _ring_core_0_17_7_p256_point_mul
++#define _p256_point_mul_base _ring_core_0_17_7_p256_point_mul_base
++#define _p256_point_mul_base_vartime _ring_core_0_17_7_p256_point_mul_base_vartime
++#define _p256_scalar_mul_mont _ring_core_0_17_7_p256_scalar_mul_mont
++#define _p256_scalar_sqr_rep_mont _ring_core_0_17_7_p256_scalar_sqr_rep_mont
++#define _p256_sqr_mont _ring_core_0_17_7_p256_sqr_mont
++#define _p384_elem_div_by_2 _ring_core_0_17_7_p384_elem_div_by_2
++#define _p384_elem_mul_mont _ring_core_0_17_7_p384_elem_mul_mont
++#define _p384_elem_neg _ring_core_0_17_7_p384_elem_neg
++#define _p384_elem_sub _ring_core_0_17_7_p384_elem_sub
++#define _p384_point_add _ring_core_0_17_7_p384_point_add
++#define _p384_point_double _ring_core_0_17_7_p384_point_double
++#define _p384_point_mul _ring_core_0_17_7_p384_point_mul
++#define _p384_scalar_mul_mont _ring_core_0_17_7_p384_scalar_mul_mont
++#define _openssl_poly1305_neon2_addmulmod _ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++#define _openssl_poly1305_neon2_blocks _ring_core_0_17_7_openssl_poly1305_neon2_blocks
++#define _sha256_block_data_order _ring_core_0_17_7_sha256_block_data_order
++#define _sha512_block_data_order _ring_core_0_17_7_sha512_block_data_order
++#define _vpaes_ctr32_encrypt_blocks _ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++#define _vpaes_encrypt _ring_core_0_17_7_vpaes_encrypt
++#define _vpaes_encrypt_key_to_bsaes _ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++#define _vpaes_set_encrypt_key _ring_core_0_17_7_vpaes_set_encrypt_key
++#define _x25519_NEON _ring_core_0_17_7_x25519_NEON
++#define _x25519_fe_invert _ring_core_0_17_7_x25519_fe_invert
++#define _x25519_fe_isnegative _ring_core_0_17_7_x25519_fe_isnegative
++#define _x25519_fe_mul_ttt _ring_core_0_17_7_x25519_fe_mul_ttt
++#define _x25519_fe_neg _ring_core_0_17_7_x25519_fe_neg
++#define _x25519_fe_tobytes _ring_core_0_17_7_x25519_fe_tobytes
++#define _x25519_ge_double_scalarmult_vartime _ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++#define _x25519_ge_frombytes_vartime _ring_core_0_17_7_x25519_ge_frombytes_vartime
++#define _x25519_ge_scalarmult_base _ring_core_0_17_7_x25519_ge_scalarmult_base
++#define _x25519_ge_scalarmult_base_adx _ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++#define _x25519_public_from_private_generic_masked _ring_core_0_17_7_x25519_public_from_private_generic_masked
++#define _x25519_sc_mask _ring_core_0_17_7_x25519_sc_mask
++#define _x25519_sc_muladd _ring_core_0_17_7_x25519_sc_muladd
++#define _x25519_sc_reduce _ring_core_0_17_7_x25519_sc_reduce
++#define _x25519_scalar_mult_adx _ring_core_0_17_7_x25519_scalar_mult_adx
++#define _x25519_scalar_mult_generic_masked _ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++#else
++#define ecp_nistz256_point_double p256_point_double
++#define ecp_nistz256_point_add p256_point_add
++#define ecp_nistz256_point_add_affine p256_point_add_affine
++#define ecp_nistz256_ord_mul_mont p256_scalar_mul_mont
++#define ecp_nistz256_ord_sqr_mont p256_scalar_sqr_rep_mont
++#define ecp_nistz256_mul_mont p256_mul_mont
++#define ecp_nistz256_sqr_mont p256_sqr_mont
++#define CRYPTO_memcmp ring_core_0_17_7_CRYPTO_memcmp
++#define CRYPTO_poly1305_finish ring_core_0_17_7_CRYPTO_poly1305_finish
++#define CRYPTO_poly1305_finish_neon ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++#define CRYPTO_poly1305_init ring_core_0_17_7_CRYPTO_poly1305_init
++#define CRYPTO_poly1305_init_neon ring_core_0_17_7_CRYPTO_poly1305_init_neon
++#define CRYPTO_poly1305_update ring_core_0_17_7_CRYPTO_poly1305_update
++#define CRYPTO_poly1305_update_neon ring_core_0_17_7_CRYPTO_poly1305_update_neon
++#define ChaCha20_ctr32 ring_core_0_17_7_ChaCha20_ctr32
++#define LIMBS_add_mod ring_core_0_17_7_LIMBS_add_mod
++#define LIMBS_are_even ring_core_0_17_7_LIMBS_are_even
++#define LIMBS_are_zero ring_core_0_17_7_LIMBS_are_zero
++#define LIMBS_equal ring_core_0_17_7_LIMBS_equal
++#define LIMBS_equal_limb ring_core_0_17_7_LIMBS_equal_limb
++#define LIMBS_less_than ring_core_0_17_7_LIMBS_less_than
++#define LIMBS_less_than_limb ring_core_0_17_7_LIMBS_less_than_limb
++#define LIMBS_reduce_once ring_core_0_17_7_LIMBS_reduce_once
++#define LIMBS_select_512_32 ring_core_0_17_7_LIMBS_select_512_32
++#define LIMBS_shl_mod ring_core_0_17_7_LIMBS_shl_mod
++#define LIMBS_sub_mod ring_core_0_17_7_LIMBS_sub_mod
++#define LIMBS_window5_split_window ring_core_0_17_7_LIMBS_window5_split_window
++#define LIMBS_window5_unsplit_window ring_core_0_17_7_LIMBS_window5_unsplit_window
++#define LIMB_shr ring_core_0_17_7_LIMB_shr
++#define OPENSSL_armcap_P ring_core_0_17_7_OPENSSL_armcap_P
++#define OPENSSL_cpuid_setup ring_core_0_17_7_OPENSSL_cpuid_setup
++#define OPENSSL_ia32cap_P ring_core_0_17_7_OPENSSL_ia32cap_P
++#define aes_hw_ctr32_encrypt_blocks ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++#define aes_hw_encrypt ring_core_0_17_7_aes_hw_encrypt
++#define aes_hw_set_encrypt_key ring_core_0_17_7_aes_hw_set_encrypt_key
++#define aes_nohw_ctr32_encrypt_blocks ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++#define aes_nohw_encrypt ring_core_0_17_7_aes_nohw_encrypt
++#define aes_nohw_set_encrypt_key ring_core_0_17_7_aes_nohw_set_encrypt_key
++#define aesni_gcm_decrypt ring_core_0_17_7_aesni_gcm_decrypt
++#define aesni_gcm_encrypt ring_core_0_17_7_aesni_gcm_encrypt
++#define bn_from_montgomery_in_place ring_core_0_17_7_bn_from_montgomery_in_place
++#define bn_gather5 ring_core_0_17_7_bn_gather5
++#define bn_mul_mont ring_core_0_17_7_bn_mul_mont
++#define bn_mul_mont_gather5 ring_core_0_17_7_bn_mul_mont_gather5
++#define bn_neg_inv_mod_r_u64 ring_core_0_17_7_bn_neg_inv_mod_r_u64
++#define bn_power5 ring_core_0_17_7_bn_power5
++#define bn_scatter5 ring_core_0_17_7_bn_scatter5
++#define bn_sqr8x_internal ring_core_0_17_7_bn_sqr8x_internal
++#define bn_sqrx8x_internal ring_core_0_17_7_bn_sqrx8x_internal
++#define bsaes_ctr32_encrypt_blocks ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++#define bssl_constant_time_test_conditional_memcpy ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++#define bssl_constant_time_test_conditional_memxor ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++#define bssl_constant_time_test_main ring_core_0_17_7_bssl_constant_time_test_main
++#define chacha20_poly1305_open ring_core_0_17_7_chacha20_poly1305_open
++#define chacha20_poly1305_seal ring_core_0_17_7_chacha20_poly1305_seal
++#define fiat_curve25519_adx_mul ring_core_0_17_7_fiat_curve25519_adx_mul
++#define fiat_curve25519_adx_square ring_core_0_17_7_fiat_curve25519_adx_square
++#define gcm_ghash_avx ring_core_0_17_7_gcm_ghash_avx
++#define gcm_ghash_clmul ring_core_0_17_7_gcm_ghash_clmul
++#define gcm_ghash_neon ring_core_0_17_7_gcm_ghash_neon
++#define gcm_gmult_clmul ring_core_0_17_7_gcm_gmult_clmul
++#define gcm_gmult_neon ring_core_0_17_7_gcm_gmult_neon
++#define gcm_init_avx ring_core_0_17_7_gcm_init_avx
++#define gcm_init_clmul ring_core_0_17_7_gcm_init_clmul
++#define gcm_init_neon ring_core_0_17_7_gcm_init_neon
++#define k25519Precomp ring_core_0_17_7_k25519Precomp
++#define limbs_mul_add_limb ring_core_0_17_7_limbs_mul_add_limb
++#define little_endian_bytes_from_scalar ring_core_0_17_7_little_endian_bytes_from_scalar
++#define ecp_nistz256_neg ring_core_0_17_7_ecp_nistz256_neg
++#define ecp_nistz256_select_w5 ring_core_0_17_7_ecp_nistz256_select_w5
++#define ecp_nistz256_select_w7 ring_core_0_17_7_ecp_nistz256_select_w7
++#define p256_mul_mont ring_core_0_17_7_p256_mul_mont
++#define p256_point_add ring_core_0_17_7_p256_point_add
++#define p256_point_add_affine ring_core_0_17_7_p256_point_add_affine
++#define p256_point_double ring_core_0_17_7_p256_point_double
++#define p256_point_mul ring_core_0_17_7_p256_point_mul
++#define p256_point_mul_base ring_core_0_17_7_p256_point_mul_base
++#define p256_point_mul_base_vartime ring_core_0_17_7_p256_point_mul_base_vartime
++#define p256_scalar_mul_mont ring_core_0_17_7_p256_scalar_mul_mont
++#define p256_scalar_sqr_rep_mont ring_core_0_17_7_p256_scalar_sqr_rep_mont
++#define p256_sqr_mont ring_core_0_17_7_p256_sqr_mont
++#define p384_elem_div_by_2 ring_core_0_17_7_p384_elem_div_by_2
++#define p384_elem_mul_mont ring_core_0_17_7_p384_elem_mul_mont
++#define p384_elem_neg ring_core_0_17_7_p384_elem_neg
++#define p384_elem_sub ring_core_0_17_7_p384_elem_sub
++#define p384_point_add ring_core_0_17_7_p384_point_add
++#define p384_point_double ring_core_0_17_7_p384_point_double
++#define p384_point_mul ring_core_0_17_7_p384_point_mul
++#define p384_scalar_mul_mont ring_core_0_17_7_p384_scalar_mul_mont
++#define openssl_poly1305_neon2_addmulmod ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++#define openssl_poly1305_neon2_blocks ring_core_0_17_7_openssl_poly1305_neon2_blocks
++#define sha256_block_data_order ring_core_0_17_7_sha256_block_data_order
++#define sha512_block_data_order ring_core_0_17_7_sha512_block_data_order
++#define vpaes_ctr32_encrypt_blocks ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++#define vpaes_encrypt ring_core_0_17_7_vpaes_encrypt
++#define vpaes_encrypt_key_to_bsaes ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++#define vpaes_set_encrypt_key ring_core_0_17_7_vpaes_set_encrypt_key
++#define x25519_NEON ring_core_0_17_7_x25519_NEON
++#define x25519_fe_invert ring_core_0_17_7_x25519_fe_invert
++#define x25519_fe_isnegative ring_core_0_17_7_x25519_fe_isnegative
++#define x25519_fe_mul_ttt ring_core_0_17_7_x25519_fe_mul_ttt
++#define x25519_fe_neg ring_core_0_17_7_x25519_fe_neg
++#define x25519_fe_tobytes ring_core_0_17_7_x25519_fe_tobytes
++#define x25519_ge_double_scalarmult_vartime ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++#define x25519_ge_frombytes_vartime ring_core_0_17_7_x25519_ge_frombytes_vartime
++#define x25519_ge_scalarmult_base ring_core_0_17_7_x25519_ge_scalarmult_base
++#define x25519_ge_scalarmult_base_adx ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++#define x25519_public_from_private_generic_masked ring_core_0_17_7_x25519_public_from_private_generic_masked
++#define x25519_sc_mask ring_core_0_17_7_x25519_sc_mask
++#define x25519_sc_muladd ring_core_0_17_7_x25519_sc_muladd
++#define x25519_sc_reduce ring_core_0_17_7_x25519_sc_reduce
++#define x25519_scalar_mult_adx ring_core_0_17_7_x25519_scalar_mult_adx
++#define x25519_scalar_mult_generic_masked ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++#endif
++#endif
+diff --git a/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc b/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+new file mode 100644
+index 000000000..65ce0cfaa
+--- /dev/null
++++ b/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+@@ -0,0 +1,236 @@
++
++%ifndef ring_core_generated_PREFIX_SYMBOLS_NASM_INC
++%define ring_core_generated_PREFIX_SYMBOLS_NASM_INC
++
++%ifidn __OUTPUT_FORMAT__,win32
++%define _ecp_nistz256_point_double _p256_point_double
++%define _ecp_nistz256_point_add _p256_point_add
++%define _ecp_nistz256_point_add_affine _p256_point_add_affine
++%define _ecp_nistz256_ord_mul_mont _p256_scalar_mul_mont
++%define _ecp_nistz256_ord_sqr_mont _p256_scalar_sqr_rep_mont
++%define _ecp_nistz256_mul_mont _p256_mul_mont
++%define _ecp_nistz256_sqr_mont _p256_sqr_mont
++%define _CRYPTO_memcmp _ring_core_0_17_7_CRYPTO_memcmp
++%define _CRYPTO_poly1305_finish _ring_core_0_17_7_CRYPTO_poly1305_finish
++%define _CRYPTO_poly1305_finish_neon _ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++%define _CRYPTO_poly1305_init _ring_core_0_17_7_CRYPTO_poly1305_init
++%define _CRYPTO_poly1305_init_neon _ring_core_0_17_7_CRYPTO_poly1305_init_neon
++%define _CRYPTO_poly1305_update _ring_core_0_17_7_CRYPTO_poly1305_update
++%define _CRYPTO_poly1305_update_neon _ring_core_0_17_7_CRYPTO_poly1305_update_neon
++%define _ChaCha20_ctr32 _ring_core_0_17_7_ChaCha20_ctr32
++%define _LIMBS_add_mod _ring_core_0_17_7_LIMBS_add_mod
++%define _LIMBS_are_even _ring_core_0_17_7_LIMBS_are_even
++%define _LIMBS_are_zero _ring_core_0_17_7_LIMBS_are_zero
++%define _LIMBS_equal _ring_core_0_17_7_LIMBS_equal
++%define _LIMBS_equal_limb _ring_core_0_17_7_LIMBS_equal_limb
++%define _LIMBS_less_than _ring_core_0_17_7_LIMBS_less_than
++%define _LIMBS_less_than_limb _ring_core_0_17_7_LIMBS_less_than_limb
++%define _LIMBS_reduce_once _ring_core_0_17_7_LIMBS_reduce_once
++%define _LIMBS_select_512_32 _ring_core_0_17_7_LIMBS_select_512_32
++%define _LIMBS_shl_mod _ring_core_0_17_7_LIMBS_shl_mod
++%define _LIMBS_sub_mod _ring_core_0_17_7_LIMBS_sub_mod
++%define _LIMBS_window5_split_window _ring_core_0_17_7_LIMBS_window5_split_window
++%define _LIMBS_window5_unsplit_window _ring_core_0_17_7_LIMBS_window5_unsplit_window
++%define _LIMB_shr _ring_core_0_17_7_LIMB_shr
++%define _OPENSSL_armcap_P _ring_core_0_17_7_OPENSSL_armcap_P
++%define _OPENSSL_cpuid_setup _ring_core_0_17_7_OPENSSL_cpuid_setup
++%define _OPENSSL_ia32cap_P _ring_core_0_17_7_OPENSSL_ia32cap_P
++%define _aes_hw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++%define _aes_hw_encrypt _ring_core_0_17_7_aes_hw_encrypt
++%define _aes_hw_set_encrypt_key _ring_core_0_17_7_aes_hw_set_encrypt_key
++%define _aes_nohw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++%define _aes_nohw_encrypt _ring_core_0_17_7_aes_nohw_encrypt
++%define _aes_nohw_set_encrypt_key _ring_core_0_17_7_aes_nohw_set_encrypt_key
++%define _aesni_gcm_decrypt _ring_core_0_17_7_aesni_gcm_decrypt
++%define _aesni_gcm_encrypt _ring_core_0_17_7_aesni_gcm_encrypt
++%define _bn_from_montgomery_in_place _ring_core_0_17_7_bn_from_montgomery_in_place
++%define _bn_gather5 _ring_core_0_17_7_bn_gather5
++%define _bn_mul_mont _ring_core_0_17_7_bn_mul_mont
++%define _bn_mul_mont_gather5 _ring_core_0_17_7_bn_mul_mont_gather5
++%define _bn_neg_inv_mod_r_u64 _ring_core_0_17_7_bn_neg_inv_mod_r_u64
++%define _bn_power5 _ring_core_0_17_7_bn_power5
++%define _bn_scatter5 _ring_core_0_17_7_bn_scatter5
++%define _bn_sqr8x_internal _ring_core_0_17_7_bn_sqr8x_internal
++%define _bn_sqrx8x_internal _ring_core_0_17_7_bn_sqrx8x_internal
++%define _bsaes_ctr32_encrypt_blocks _ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++%define _bssl_constant_time_test_conditional_memcpy _ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++%define _bssl_constant_time_test_conditional_memxor _ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++%define _bssl_constant_time_test_main _ring_core_0_17_7_bssl_constant_time_test_main
++%define _chacha20_poly1305_open _ring_core_0_17_7_chacha20_poly1305_open
++%define _chacha20_poly1305_seal _ring_core_0_17_7_chacha20_poly1305_seal
++%define _fiat_curve25519_adx_mul _ring_core_0_17_7_fiat_curve25519_adx_mul
++%define _fiat_curve25519_adx_square _ring_core_0_17_7_fiat_curve25519_adx_square
++%define _gcm_ghash_avx _ring_core_0_17_7_gcm_ghash_avx
++%define _gcm_ghash_clmul _ring_core_0_17_7_gcm_ghash_clmul
++%define _gcm_ghash_neon _ring_core_0_17_7_gcm_ghash_neon
++%define _gcm_gmult_clmul _ring_core_0_17_7_gcm_gmult_clmul
++%define _gcm_gmult_neon _ring_core_0_17_7_gcm_gmult_neon
++%define _gcm_init_avx _ring_core_0_17_7_gcm_init_avx
++%define _gcm_init_clmul _ring_core_0_17_7_gcm_init_clmul
++%define _gcm_init_neon _ring_core_0_17_7_gcm_init_neon
++%define _k25519Precomp _ring_core_0_17_7_k25519Precomp
++%define _limbs_mul_add_limb _ring_core_0_17_7_limbs_mul_add_limb
++%define _little_endian_bytes_from_scalar _ring_core_0_17_7_little_endian_bytes_from_scalar
++%define _ecp_nistz256_neg _ring_core_0_17_7_ecp_nistz256_neg
++%define _ecp_nistz256_select_w5 _ring_core_0_17_7_ecp_nistz256_select_w5
++%define _ecp_nistz256_select_w7 _ring_core_0_17_7_ecp_nistz256_select_w7
++%define _p256_mul_mont _ring_core_0_17_7_p256_mul_mont
++%define _p256_point_add _ring_core_0_17_7_p256_point_add
++%define _p256_point_add_affine _ring_core_0_17_7_p256_point_add_affine
++%define _p256_point_double _ring_core_0_17_7_p256_point_double
++%define _p256_point_mul _ring_core_0_17_7_p256_point_mul
++%define _p256_point_mul_base _ring_core_0_17_7_p256_point_mul_base
++%define _p256_point_mul_base_vartime _ring_core_0_17_7_p256_point_mul_base_vartime
++%define _p256_scalar_mul_mont _ring_core_0_17_7_p256_scalar_mul_mont
++%define _p256_scalar_sqr_rep_mont _ring_core_0_17_7_p256_scalar_sqr_rep_mont
++%define _p256_sqr_mont _ring_core_0_17_7_p256_sqr_mont
++%define _p384_elem_div_by_2 _ring_core_0_17_7_p384_elem_div_by_2
++%define _p384_elem_mul_mont _ring_core_0_17_7_p384_elem_mul_mont
++%define _p384_elem_neg _ring_core_0_17_7_p384_elem_neg
++%define _p384_elem_sub _ring_core_0_17_7_p384_elem_sub
++%define _p384_point_add _ring_core_0_17_7_p384_point_add
++%define _p384_point_double _ring_core_0_17_7_p384_point_double
++%define _p384_point_mul _ring_core_0_17_7_p384_point_mul
++%define _p384_scalar_mul_mont _ring_core_0_17_7_p384_scalar_mul_mont
++%define _openssl_poly1305_neon2_addmulmod _ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++%define _openssl_poly1305_neon2_blocks _ring_core_0_17_7_openssl_poly1305_neon2_blocks
++%define _sha256_block_data_order _ring_core_0_17_7_sha256_block_data_order
++%define _sha512_block_data_order _ring_core_0_17_7_sha512_block_data_order
++%define _vpaes_ctr32_encrypt_blocks _ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++%define _vpaes_encrypt _ring_core_0_17_7_vpaes_encrypt
++%define _vpaes_encrypt_key_to_bsaes _ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++%define _vpaes_set_encrypt_key _ring_core_0_17_7_vpaes_set_encrypt_key
++%define _x25519_NEON _ring_core_0_17_7_x25519_NEON
++%define _x25519_fe_invert _ring_core_0_17_7_x25519_fe_invert
++%define _x25519_fe_isnegative _ring_core_0_17_7_x25519_fe_isnegative
++%define _x25519_fe_mul_ttt _ring_core_0_17_7_x25519_fe_mul_ttt
++%define _x25519_fe_neg _ring_core_0_17_7_x25519_fe_neg
++%define _x25519_fe_tobytes _ring_core_0_17_7_x25519_fe_tobytes
++%define _x25519_ge_double_scalarmult_vartime _ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++%define _x25519_ge_frombytes_vartime _ring_core_0_17_7_x25519_ge_frombytes_vartime
++%define _x25519_ge_scalarmult_base _ring_core_0_17_7_x25519_ge_scalarmult_base
++%define _x25519_ge_scalarmult_base_adx _ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++%define _x25519_public_from_private_generic_masked _ring_core_0_17_7_x25519_public_from_private_generic_masked
++%define _x25519_sc_mask _ring_core_0_17_7_x25519_sc_mask
++%define _x25519_sc_muladd _ring_core_0_17_7_x25519_sc_muladd
++%define _x25519_sc_reduce _ring_core_0_17_7_x25519_sc_reduce
++%define _x25519_scalar_mult_adx _ring_core_0_17_7_x25519_scalar_mult_adx
++%define _x25519_scalar_mult_generic_masked _ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++%else
++%define ecp_nistz256_point_double p256_point_double
++%define ecp_nistz256_point_add p256_point_add
++%define ecp_nistz256_point_add_affine p256_point_add_affine
++%define ecp_nistz256_ord_mul_mont p256_scalar_mul_mont
++%define ecp_nistz256_ord_sqr_mont p256_scalar_sqr_rep_mont
++%define ecp_nistz256_mul_mont p256_mul_mont
++%define ecp_nistz256_sqr_mont p256_sqr_mont
++%define CRYPTO_memcmp ring_core_0_17_7_CRYPTO_memcmp
++%define CRYPTO_poly1305_finish ring_core_0_17_7_CRYPTO_poly1305_finish
++%define CRYPTO_poly1305_finish_neon ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++%define CRYPTO_poly1305_init ring_core_0_17_7_CRYPTO_poly1305_init
++%define CRYPTO_poly1305_init_neon ring_core_0_17_7_CRYPTO_poly1305_init_neon
++%define CRYPTO_poly1305_update ring_core_0_17_7_CRYPTO_poly1305_update
++%define CRYPTO_poly1305_update_neon ring_core_0_17_7_CRYPTO_poly1305_update_neon
++%define ChaCha20_ctr32 ring_core_0_17_7_ChaCha20_ctr32
++%define LIMBS_add_mod ring_core_0_17_7_LIMBS_add_mod
++%define LIMBS_are_even ring_core_0_17_7_LIMBS_are_even
++%define LIMBS_are_zero ring_core_0_17_7_LIMBS_are_zero
++%define LIMBS_equal ring_core_0_17_7_LIMBS_equal
++%define LIMBS_equal_limb ring_core_0_17_7_LIMBS_equal_limb
++%define LIMBS_less_than ring_core_0_17_7_LIMBS_less_than
++%define LIMBS_less_than_limb ring_core_0_17_7_LIMBS_less_than_limb
++%define LIMBS_reduce_once ring_core_0_17_7_LIMBS_reduce_once
++%define LIMBS_select_512_32 ring_core_0_17_7_LIMBS_select_512_32
++%define LIMBS_shl_mod ring_core_0_17_7_LIMBS_shl_mod
++%define LIMBS_sub_mod ring_core_0_17_7_LIMBS_sub_mod
++%define LIMBS_window5_split_window ring_core_0_17_7_LIMBS_window5_split_window
++%define LIMBS_window5_unsplit_window ring_core_0_17_7_LIMBS_window5_unsplit_window
++%define LIMB_shr ring_core_0_17_7_LIMB_shr
++%define OPENSSL_armcap_P ring_core_0_17_7_OPENSSL_armcap_P
++%define OPENSSL_cpuid_setup ring_core_0_17_7_OPENSSL_cpuid_setup
++%define OPENSSL_ia32cap_P ring_core_0_17_7_OPENSSL_ia32cap_P
++%define aes_hw_ctr32_encrypt_blocks ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++%define aes_hw_encrypt ring_core_0_17_7_aes_hw_encrypt
++%define aes_hw_set_encrypt_key ring_core_0_17_7_aes_hw_set_encrypt_key
++%define aes_nohw_ctr32_encrypt_blocks ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++%define aes_nohw_encrypt ring_core_0_17_7_aes_nohw_encrypt
++%define aes_nohw_set_encrypt_key ring_core_0_17_7_aes_nohw_set_encrypt_key
++%define aesni_gcm_decrypt ring_core_0_17_7_aesni_gcm_decrypt
++%define aesni_gcm_encrypt ring_core_0_17_7_aesni_gcm_encrypt
++%define bn_from_montgomery_in_place ring_core_0_17_7_bn_from_montgomery_in_place
++%define bn_gather5 ring_core_0_17_7_bn_gather5
++%define bn_mul_mont ring_core_0_17_7_bn_mul_mont
++%define bn_mul_mont_gather5 ring_core_0_17_7_bn_mul_mont_gather5
++%define bn_neg_inv_mod_r_u64 ring_core_0_17_7_bn_neg_inv_mod_r_u64
++%define bn_power5 ring_core_0_17_7_bn_power5
++%define bn_scatter5 ring_core_0_17_7_bn_scatter5
++%define bn_sqr8x_internal ring_core_0_17_7_bn_sqr8x_internal
++%define bn_sqrx8x_internal ring_core_0_17_7_bn_sqrx8x_internal
++%define bsaes_ctr32_encrypt_blocks ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++%define bssl_constant_time_test_conditional_memcpy ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++%define bssl_constant_time_test_conditional_memxor ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++%define bssl_constant_time_test_main ring_core_0_17_7_bssl_constant_time_test_main
++%define chacha20_poly1305_open ring_core_0_17_7_chacha20_poly1305_open
++%define chacha20_poly1305_seal ring_core_0_17_7_chacha20_poly1305_seal
++%define fiat_curve25519_adx_mul ring_core_0_17_7_fiat_curve25519_adx_mul
++%define fiat_curve25519_adx_square ring_core_0_17_7_fiat_curve25519_adx_square
++%define gcm_ghash_avx ring_core_0_17_7_gcm_ghash_avx
++%define gcm_ghash_clmul ring_core_0_17_7_gcm_ghash_clmul
++%define gcm_ghash_neon ring_core_0_17_7_gcm_ghash_neon
++%define gcm_gmult_clmul ring_core_0_17_7_gcm_gmult_clmul
++%define gcm_gmult_neon ring_core_0_17_7_gcm_gmult_neon
++%define gcm_init_avx ring_core_0_17_7_gcm_init_avx
++%define gcm_init_clmul ring_core_0_17_7_gcm_init_clmul
++%define gcm_init_neon ring_core_0_17_7_gcm_init_neon
++%define k25519Precomp ring_core_0_17_7_k25519Precomp
++%define limbs_mul_add_limb ring_core_0_17_7_limbs_mul_add_limb
++%define little_endian_bytes_from_scalar ring_core_0_17_7_little_endian_bytes_from_scalar
++%define ecp_nistz256_neg ring_core_0_17_7_ecp_nistz256_neg
++%define ecp_nistz256_select_w5 ring_core_0_17_7_ecp_nistz256_select_w5
++%define ecp_nistz256_select_w7 ring_core_0_17_7_ecp_nistz256_select_w7
++%define p256_mul_mont ring_core_0_17_7_p256_mul_mont
++%define p256_point_add ring_core_0_17_7_p256_point_add
++%define p256_point_add_affine ring_core_0_17_7_p256_point_add_affine
++%define p256_point_double ring_core_0_17_7_p256_point_double
++%define p256_point_mul ring_core_0_17_7_p256_point_mul
++%define p256_point_mul_base ring_core_0_17_7_p256_point_mul_base
++%define p256_point_mul_base_vartime ring_core_0_17_7_p256_point_mul_base_vartime
++%define p256_scalar_mul_mont ring_core_0_17_7_p256_scalar_mul_mont
++%define p256_scalar_sqr_rep_mont ring_core_0_17_7_p256_scalar_sqr_rep_mont
++%define p256_sqr_mont ring_core_0_17_7_p256_sqr_mont
++%define p384_elem_div_by_2 ring_core_0_17_7_p384_elem_div_by_2
++%define p384_elem_mul_mont ring_core_0_17_7_p384_elem_mul_mont
++%define p384_elem_neg ring_core_0_17_7_p384_elem_neg
++%define p384_elem_sub ring_core_0_17_7_p384_elem_sub
++%define p384_point_add ring_core_0_17_7_p384_point_add
++%define p384_point_double ring_core_0_17_7_p384_point_double
++%define p384_point_mul ring_core_0_17_7_p384_point_mul
++%define p384_scalar_mul_mont ring_core_0_17_7_p384_scalar_mul_mont
++%define openssl_poly1305_neon2_addmulmod ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++%define openssl_poly1305_neon2_blocks ring_core_0_17_7_openssl_poly1305_neon2_blocks
++%define sha256_block_data_order ring_core_0_17_7_sha256_block_data_order
++%define sha512_block_data_order ring_core_0_17_7_sha512_block_data_order
++%define vpaes_ctr32_encrypt_blocks ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++%define vpaes_encrypt ring_core_0_17_7_vpaes_encrypt
++%define vpaes_encrypt_key_to_bsaes ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++%define vpaes_set_encrypt_key ring_core_0_17_7_vpaes_set_encrypt_key
++%define x25519_NEON ring_core_0_17_7_x25519_NEON
++%define x25519_fe_invert ring_core_0_17_7_x25519_fe_invert
++%define x25519_fe_isnegative ring_core_0_17_7_x25519_fe_isnegative
++%define x25519_fe_mul_ttt ring_core_0_17_7_x25519_fe_mul_ttt
++%define x25519_fe_neg ring_core_0_17_7_x25519_fe_neg
++%define x25519_fe_tobytes ring_core_0_17_7_x25519_fe_tobytes
++%define x25519_ge_double_scalarmult_vartime ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++%define x25519_ge_frombytes_vartime ring_core_0_17_7_x25519_ge_frombytes_vartime
++%define x25519_ge_scalarmult_base ring_core_0_17_7_x25519_ge_scalarmult_base
++%define x25519_ge_scalarmult_base_adx ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++%define x25519_public_from_private_generic_masked ring_core_0_17_7_x25519_public_from_private_generic_masked
++%define x25519_sc_mask ring_core_0_17_7_x25519_sc_mask
++%define x25519_sc_muladd ring_core_0_17_7_x25519_sc_muladd
++%define x25519_sc_reduce ring_core_0_17_7_x25519_sc_reduce
++%define x25519_scalar_mult_adx ring_core_0_17_7_x25519_scalar_mult_adx
++%define x25519_scalar_mult_generic_masked ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++%endif
++%endif
diff --git a/gnu/packages/patches/rust-rspec-1-remove-clippy.patch b/gnu/packages/patches/rust-rspec-1-remove-clippy.patch
new file mode 100644
index 0000000000..46c994f7ee
--- /dev/null
+++ b/gnu/packages/patches/rust-rspec-1-remove-clippy.patch
@@ -0,0 +1,16 @@
+Remove the dependency on clippy
+
+diff --git a/Cargo.toml b/Cargo.toml
+index 177cb80..7260c34 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -39,9 +39,6 @@ version = "1.5"
+
+ [dependencies.time]
+ version = "0.2"
+-[build-dependencies.clippy]
+-version = "0.0.153"
+-optional = true
+
+ [features]
+ default = []
diff --git a/gnu/packages/patches/rust-trash-2-update-windows.patch b/gnu/packages/patches/rust-trash-2-update-windows.patch
new file mode 100644
index 0000000000..f6b13a4658
--- /dev/null
+++ b/gnu/packages/patches/rust-trash-2-update-windows.patch
@@ -0,0 +1,132 @@
+This patch is taken from upstream so we can use an already packaged
+version of the windows crate.
+
+diff --git a/Cargo.toml b/Cargo.toml
+index 2c28dfe..6b61771 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -87,9 +87,8 @@ version = "0.2.7"
+ version = "1.0.0"
+
+ [target."cfg(windows)".dependencies.windows]
+-version = "0.37.0"
++version = "0.44.0"
+ features = [
+- "alloc",
+ "Win32_Foundation",
+ "Win32_System_Com_StructuredStorage",
+ "Win32_UI_Shell_PropertiesSystem",
+diff --git a/Cargo.toml.orig b/Cargo.toml.orig
+index 894a78c..c17fc02 100644
+--- a/Cargo.toml.orig
++++ b/Cargo.toml.orig
+@@ -44,7 +44,7 @@ once_cell = "1.7.2"
+ once_cell = "1.7.2"
+
+ [target.'cfg(windows)'.dependencies]
+-windows = { version = "0.37.0", features = [ "alloc",
++windows = { version = "0.44.0", features = [
+ "Win32_Foundation",
+ "Win32_System_Com_StructuredStorage",
+ "Win32_UI_Shell_PropertiesSystem",
+diff --git a/src/windows.rs b/src/windows.rs
+index c1379d3..3f4426b 100644
+--- a/src/windows.rs
++++ b/src/windows.rs
+@@ -1,7 +1,6 @@
+ use crate::{Error, TrashContext, TrashItem};
+ use std::{
+- ffi::{OsStr, OsString},
+- mem::MaybeUninit,
++ ffi::{c_void, OsStr, OsString},
+ os::windows::{ffi::OsStrExt, prelude::*},
+ path::PathBuf,
+ };
+@@ -66,7 +65,7 @@ impl TrashContext {
+ let shi: IShellItem =
+ SHCreateItemFromParsingName(PCWSTR(wide_path_slice.as_ptr()), None)?;
+
+- pfo.DeleteItem(shi, None)?;
++ pfo.DeleteItem(&shi, None)?;
+ }
+ pfo.PerformOperations()?;
+ Ok(())
+@@ -78,28 +77,18 @@ pub fn list() -> Result<Vec<TrashItem>, Error> {
+ ensure_com_initialized();
+ unsafe {
+ let mut item_vec = Vec::new();
+- let mut recycle_bin = MaybeUninit::<Option<IShellItem>>::uninit();
+
+- SHGetKnownFolderItem(
+- &FOLDERID_RecycleBinFolder,
+- KF_FLAG_DEFAULT,
+- HANDLE::default(),
+- &IShellItem::IID,
+- recycle_bin.as_mut_ptr() as _,
+- )?;
+-
+- let recycle_bin = recycle_bin.assume_init().ok_or(Error::Unknown {
+- description: "SHGetKnownFolderItem gave NULL for FOLDERID_RecycleBinFolder".into(),
+- })?;
++ let recycle_bin: IShellItem =
++ SHGetKnownFolderItem(&FOLDERID_RecycleBinFolder, KF_FLAG_DEFAULT, HANDLE::default())?;
+
+ let pesi: IEnumShellItems = recycle_bin.BindToHandler(None, &BHID_EnumItems)?;
+- let mut fetched: u32 = 0;
+
+ loop {
++ let mut fetched_count: u32 = 0;
+ let mut arr = [None];
+- pesi.Next(&mut arr, &mut fetched)?;
++ pesi.Next(&mut arr, Some(&mut fetched_count as *mut u32))?;
+
+- if fetched == 0 {
++ if fetched_count == 0 {
+ break;
+ }
+
+@@ -145,7 +134,7 @@ where
+ at_least_one = true;
+ let id_as_wide: Vec<u16> = item.id.encode_wide().chain(std::iter::once(0)).collect();
+ let parsing_name = PCWSTR(id_as_wide.as_ptr());
+- let trash_item: IShellItem = SHCreateItemFromParsingName(&parsing_name, None)?;
++ let trash_item: IShellItem = SHCreateItemFromParsingName(parsing_name, None)?;
+ pfo.DeleteItem(&trash_item, None)?;
+ }
+ if at_least_one {
+@@ -181,7 +170,7 @@ where
+ for item in items.iter() {
+ let id_as_wide: Vec<u16> = item.id.encode_wide().chain(std::iter::once(0)).collect();
+ let parsing_name = PCWSTR(id_as_wide.as_ptr());
+- let trash_item: IShellItem = SHCreateItemFromParsingName(&parsing_name, None)?;
++ let trash_item: IShellItem = SHCreateItemFromParsingName(parsing_name, None)?;
+ let parent_path_wide: Vec<_> =
+ item.original_parent.as_os_str().encode_wide().chain(std::iter::once(0)).collect();
+ let orig_folder_shi: IShellItem =
+@@ -191,7 +180,7 @@ where
+ .chain(std::iter::once(0))
+ .collect();
+
+- pfo.MoveItem(trash_item, orig_folder_shi, PCWSTR(name_wstr.as_ptr()), None)?;
++ pfo.MoveItem(&trash_item, &orig_folder_shi, PCWSTR(name_wstr.as_ptr()), None)?;
+ }
+ if !items.is_empty() {
+ pfo.PerformOperations()?;
+@@ -203,7 +192,7 @@ where
+ unsafe fn get_display_name(psi: &IShellItem, sigdnname: SIGDN) -> Result<OsString, Error> {
+ let name = psi.GetDisplayName(sigdnname)?;
+ let result = wstr_to_os_string(name);
+- CoTaskMemFree(name.0 as _);
++ CoTaskMemFree(Some(name.0 as *const c_void));
+ Ok(result)
+ }
+
+@@ -257,7 +246,7 @@ impl CoInitializer {
+ if cfg!(feature = "coinit_speed_over_memory") {
+ init_mode |= COINIT_SPEED_OVER_MEMORY;
+ }
+- let hr = unsafe { CoInitializeEx(std::ptr::null_mut(), init_mode) };
++ let hr = unsafe { CoInitializeEx(None, init_mode) };
+ if hr.is_err() {
+ panic!("Call to CoInitializeEx failed. HRESULT: {:?}. Consider using `trash` with the feature `coinit_multithreaded`", hr);
+ }
diff --git a/gnu/packages/patches/rustc-1.54.0-src.patch b/gnu/packages/patches/rustc-1.54.0-src.patch
index d075dce39b..d322fd0d49 100644
--- a/gnu/packages/patches/rustc-1.54.0-src.patch
+++ b/gnu/packages/patches/rustc-1.54.0-src.patch
@@ -28,51 +28,111 @@
rustc_data_structures::static_assert_size!(ForeignItemKind, 72);
impl From<ForeignItemKind> for ItemKind {
+
--- compiler/rustc_hir/src/hir.rs
+++ compiler/rustc_hir/src/hir.rs
-@@ -3050,3 +3050,3 @@
+@@ -3048,7 +3048,7 @@ impl<'hir> Node<'hir> {
+ }
+
// Some nodes are used a lot. Make sure they don't unintentionally get bigger.
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler="mrustc"),target_arch = "x86_64", target_pointer_width = "64"))]
mod size_asserts {
+ rustc_data_structures::static_assert_size!(super::Block<'static>, 48);
+ rustc_data_structures::static_assert_size!(super::Expr<'static>, 64);
+
--- compiler/rustc_middle/src/mir/interpret/error.rs
+++ compiler/rustc_middle/src/mir/interpret/error.rs
-@@ -452,2 +452,2 @@
+@@ -449,7 +449,7 @@ impl dyn MachineStopType {
+ }
+ }
+
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler="mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
static_assert_size!(InterpError<'_>, 64);
+
+ pub enum InterpError<'tcx> {
+
--- compiler/rustc_middle/src/mir/mod.rs
+++ compiler/rustc_middle/src/mir/mod.rs
-@@ -2203,2 +2203,2 @@
+@@ -2200,7 +2200,7 @@ pub enum AggregateKind<'tcx> {
+ Generator(DefId, SubstsRef<'tcx>, hir::Movability),
+ }
+
-#[cfg(target_arch = "x86_64")]
+#[cfg(all(not(rust_compiler="mrustc"), target_arch = "x86_64"))]
static_assert_size!(AggregateKind<'_>, 48);
+
+ #[derive(Copy, Clone, Debug, PartialEq, PartialOrd, Eq, TyEncodable, TyDecodable, Hash, HashStable)]
+
--- compiler/rustc_middle/src/thir.rs
+++ compiler/rustc_middle/src/thir.rs
-@@ -147,2 +147,2 @@
+@@ -144,7 +144,7 @@ pub enum StmtKind<'tcx> {
+ }
+
+ // `Expr` is used a lot. Make sure it doesn't unintentionally get bigger.
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler="mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
rustc_data_structures::static_assert_size!(Expr<'_>, 144);
---- compiler/rustc_mir/src/interpret/place.rs
-+++ compiler/rustc_mir/src/interpret/place.rs
-@@ -91,2 +91,2 @@
--#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-+#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
- rustc_data_structures::static_assert_size!(Place, 64);
-@@ -100,2 +100,2 @@
--#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-+#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
- rustc_data_structures::static_assert_size!(PlaceTy<'_>, 80);
+
+ /// The Thir trait implementor lowers their expressions (`&'tcx H::Expr`)
+
--- compiler/rustc_mir/src/interpret/operand.rs
+++ compiler/rustc_mir/src/interpret/operand.rs
-@@ -35,2 +35,2 @@
+@@ -32,7 +32,7 @@ pub enum Immediate<Tag = ()> {
+ ScalarPair(ScalarMaybeUninit<Tag>, ScalarMaybeUninit<Tag>),
+ }
+
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
rustc_data_structures::static_assert_size!(Immediate, 56);
-@@ -90,2 +90,2 @@
+
+ impl<Tag> From<ScalarMaybeUninit<Tag>> for Immediate<Tag> {
+@@ -87,7 +87,7 @@ pub struct ImmTy<'tcx, Tag = ()> {
+ pub layout: TyAndLayout<'tcx>,
+ }
+
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
rustc_data_structures::static_assert_size!(ImmTy<'_>, 72);
+
+ impl<Tag: Copy> std::fmt::Display for ImmTy<'tcx, Tag> {
+
+--- compiler/rustc_mir/src/interpret/place.rs
++++ compiler/rustc_mir/src/interpret/place.rs
+@@ -88,7 +88,7 @@ pub enum Place<Tag = ()> {
+ Local { frame: usize, local: mir::Local },
+ }
+
+-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
++#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
+ rustc_data_structures::static_assert_size!(Place, 64);
+
+ #[derive(Copy, Clone, Debug)]
+@@ -97,7 +97,7 @@ pub struct PlaceTy<'tcx, Tag = ()> {
+ pub layout: TyAndLayout<'tcx>,
+ }
+
+-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
++#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
+ rustc_data_structures::static_assert_size!(PlaceTy<'_>, 80);
+
+ impl<'tcx, Tag> std::ops::Deref for PlaceTy<'tcx, Tag> {
+
+#
+# Disable std_detect's detection logic (use the same logic as miri)
+#
+--- library/stdarch/crates/std_detect/src/detect/mod.rs
++++ library/stdarch/crates/std_detect/src/detect/mod.rs
+@@ -86,7 +86,7 @@ mod bit;
+ mod cache;
+
+ cfg_if! {
+- if #[cfg(miri)] {
++ if #[cfg(any(miri, rust_compiler = "mrustc"))] {
+ // When running under miri all target-features that are not enabled at
+ // compile-time are reported as disabled at run-time.
+ //
#
# Disable crc32fast's use of stdarch
@@ -88,19 +148,145 @@
))] {
#
-# Disable std_detect's detection logic (use the same logic as miri)
+# Backport which is required to support arm64 on macOS 12
+# See: https://github.com/alexcrichton/curl-rust/commit/0aea09c428b9bc2bcf46da0fc33959fe3f03c74a
#
---- library/stdarch/crates/std_detect/src/detect/mod.rs
-+++ library/stdarch/crates/std_detect/src/detect/mod.rs
-@@ -88,2 +88,2 @@
- cfg_if! {
-- if #[cfg(miri)] {
-+ if #[cfg(any(miri, rust_compiler = "mrustc"))] {
+--- vendor/curl/src/lib.rs
++++ vendor/curl/src/lib.rs
+@@ -82,6 +82,9 @@ pub mod easy;
+ pub mod multi;
+ mod panic;
+
++#[cfg(test)]
++static INITIALIZED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false);
++
+ /// Initializes the underlying libcurl library.
+ ///
+ /// The underlying libcurl library must be initialized before use, and must be
+@@ -102,46 +105,62 @@ pub fn init() {
+ /// Used to prevent concurrent or duplicate initialization.
+ static INIT: Once = Once::new();
+
+- /// An exported constructor function. On supported platforms, this will be
+- /// invoked automatically before the program's `main` is called.
+- #[cfg_attr(
+- any(target_os = "linux", target_os = "freebsd", target_os = "android"),
+- link_section = ".init_array"
+- )]
+- #[cfg_attr(target_os = "macos", link_section = "__DATA,__mod_init_func")]
+- #[cfg_attr(target_os = "windows", link_section = ".CRT$XCU")]
+- static INIT_CTOR: extern "C" fn() = init_inner;
++ INIT.call_once(|| {
++ #[cfg(need_openssl_init)]
++ openssl_probe::init_ssl_cert_env_vars();
++ #[cfg(need_openssl_init)]
++ openssl_sys::init();
++
++ unsafe {
++ assert_eq!(curl_sys::curl_global_init(curl_sys::CURL_GLOBAL_ALL), 0);
++ }
++
++ #[cfg(test)]
++ {
++ INITIALIZED.store(true, std::sync::atomic::Ordering::SeqCst);
++ }
++
++ // Note that we explicitly don't schedule a call to
++ // `curl_global_cleanup`. The documentation for that function says
++ //
++ // > You must not call it when any other thread in the program (i.e. a
++ // > thread sharing the same memory) is running. This doesn't just mean
++ // > no other thread that is using libcurl.
++ //
++ // We can't ever be sure of that, so unfortunately we can't call the
++ // function.
++ });
++}
+
++/// An exported constructor function. On supported platforms, this will be
++/// invoked automatically before the program's `main` is called. This is done
++/// for the convenience of library users since otherwise the thread-safety rules
++/// around initialization can be difficult to fulfill.
++///
++/// This is a hidden public item to ensure the symbol isn't optimized away by a
++/// rustc/LLVM bug: https://github.com/rust-lang/rust/issues/47384. As long as
++/// any item in this module is used by the final binary (which `init` will be)
++/// then this symbol should be preserved.
++#[used]
++#[doc(hidden)]
++#[cfg_attr(
++ any(target_os = "linux", target_os = "freebsd", target_os = "android"),
++ link_section = ".init_array"
++)]
++#[cfg_attr(target_os = "macos", link_section = "__DATA,__mod_init_func")]
++#[cfg_attr(target_os = "windows", link_section = ".CRT$XCU")]
++pub static INIT_CTOR: extern "C" fn() = {
+ /// This is the body of our constructor function.
+ #[cfg_attr(
+ any(target_os = "linux", target_os = "android"),
+ link_section = ".text.startup"
+ )]
+- extern "C" fn init_inner() {
+- INIT.call_once(|| {
+- #[cfg(need_openssl_init)]
+- openssl_sys::init();
+-
+- unsafe {
+- assert_eq!(curl_sys::curl_global_init(curl_sys::CURL_GLOBAL_ALL), 0);
+- }
+-
+- // Note that we explicitly don't schedule a call to
+- // `curl_global_cleanup`. The documentation for that function says
+- //
+- // > You must not call it when any other thread in the program (i.e.
+- // > a thread sharing the same memory) is running. This doesn't just
+- // > mean no other thread that is using libcurl.
+- //
+- // We can't ever be sure of that, so unfortunately we can't call the
+- // function.
+- });
++ extern "C" fn init_ctor() {
++ init();
+ }
+
+- // We invoke our init function through our static to ensure the symbol isn't
+- // optimized away by a bug: https://github.com/rust-lang/rust/issues/47384
+- INIT_CTOR();
+-}
++ init_ctor
++};
+
+ unsafe fn opt_str<'a>(ptr: *const libc::c_char) -> Option<&'a str> {
+ if ptr.is_null() {
+@@ -158,3 +177,20 @@ fn cvt(r: curl_sys::CURLcode) -> Result<(), Error> {
+ Err(Error::new(r))
+ }
+ }
++
++#[cfg(test)]
++mod tests {
++ use super::*;
++
++ #[test]
++ #[cfg(any(
++ target_os = "linux",
++ target_os = "macos",
++ target_os = "windows",
++ target_os = "freebsd",
++ target_os = "android"
++ ))]
++ fn is_initialized_before_main() {
++ assert!(INITIALIZED.load(std::sync::atomic::Ordering::SeqCst));
++ }
++}
# PPV-Lite also needs to know that we're pretending to be miri
--- vendor/ppv-lite86/src/lib.rs
+++ vendor/ppv-lite86/src/lib.rs
-@@ -12,9 +12,9 @@
+@@ -9,14 +9,14 @@ mod soft;
+ mod types;
+ pub use self::types::*;
+
-#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri)))]
+#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri), not(rust_compiler = "mrustc")))]
pub mod x86_64;
@@ -114,4 +300,5 @@
-#[cfg(any(miri, not(all(feature = "simd", any(target_arch = "x86_64")))))]
+#[cfg(any(miri, rust_compiler = "mrustc", not(all(feature = "simd", any(target_arch = "x86_64")))))]
use self::generic as arch;
-
+
+ pub use self::arch::{vec128_storage, vec256_storage, vec512_storage};
diff --git a/gnu/packages/patches/s7-flint-3.patch b/gnu/packages/patches/s7-flint-3.patch
new file mode 100644
index 0000000000..49f47adda1
--- /dev/null
+++ b/gnu/packages/patches/s7-flint-3.patch
@@ -0,0 +1,31 @@
+From bd54bd42c5933e4c571dcfd6a8afac8e52cf7366 Mon Sep 17 00:00:00 2001
+From: Andreas Enge <andreas@enge.fr>
+Date: Thu, 25 Jan 2024 12:13:18 +0100
+Subject: [PATCH] Adapt libarb_s7.c to FLINT 3.
+
+---
+ libarb_s7.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libarb_s7.c b/libarb_s7.c
+index 7413ccc..d9e0084 100644
+--- a/libarb_s7.c
++++ b/libarb_s7.c
+@@ -6,10 +6,10 @@
+ #include <mpfr.h>
+ #include <mpc.h>
+
+-#include <arb.h>
+-#include <acb.h>
+-#include <acb_hypgeom.h>
+-#include <acb_elliptic.h>
++#include <flint/arb.h>
++#include <flint/acb.h>
++#include <flint/acb_hypgeom.h>
++#include <flint/acb_elliptic.h>
+
+ #define WITH_GMP 1
+ #include "s7.h"
+--
+2.41.0
+
diff --git a/gnu/packages/patches/sdcc-disable-non-free-code.patch b/gnu/packages/patches/sdcc-disable-non-free-code.patch
index 7602ead9af..6dcfbee1ab 100644
--- a/gnu/packages/patches/sdcc-disable-non-free-code.patch
+++ b/gnu/packages/patches/sdcc-disable-non-free-code.patch
@@ -15,10 +15,10 @@ remove instructions that encourage the use of SDCC with non-free
software.
diff --git a/Makefile.common.in b/Makefile.common.in
-index 9cd116c..6bbe9fb 100644
+index 8469079..174ed91 100644
--- a/Makefile.common.in
+++ b/Makefile.common.in
-@@ -77,7 +77,6 @@ OPT_DISABLE_PACKIHX = @OPT_DISABLE_PACKIHX@
+@@ -78,7 +78,6 @@ OPT_DISABLE_PACKIHX = @OPT_DISABLE_PACKIHX@
OPT_DISABLE_SDBINUTILS = @OPT_DISABLE_SDBINUTILS@
OPT_DISABLE_SDCPP = @OPT_DISABLE_SDCPP@
OPT_DISABLE_UCSIM = @OPT_DISABLE_UCSIM@
@@ -27,10 +27,10 @@ index 9cd116c..6bbe9fb 100644
SLIB = $(top_builddir)/support/util
diff --git a/Makefile.in b/Makefile.in
-index 6d035ec..12f1fad 100644
+index 3287e30..69511e1 100644
--- a/Makefile.in
+++ b/Makefile.in
-@@ -105,9 +105,6 @@ endif
+@@ -104,9 +104,6 @@ endif
ifeq ($(OPT_DISABLE_DEVICE_LIB), 0)
TARGETS += sdcc-device-lib
PKGS += device/lib
@@ -40,7 +40,7 @@ index 6d035ec..12f1fad 100644
endif
ifeq ($(OPT_DISABLE_PACKIHX), 0)
-@@ -128,9 +125,6 @@ endif
+@@ -127,9 +124,6 @@ endif
TARGETS += sdcc-libs sdcc-cc sdcc-device-inc sdcc-as sdcc-ld sdcc-scripts
PKGS += $(SDCC_LIBS) src device/include
@@ -50,7 +50,7 @@ index 6d035ec..12f1fad 100644
PKGS += $(SDCC_AS) sdas/linksrc $(SDCC_SCRIPTS)
PORTS = $(shell cat ports.build)
-@@ -168,21 +162,12 @@ sdcc-sdbinutils:
+@@ -167,21 +161,12 @@ sdcc-sdbinutils:
sdcc-device-inc:
$(MAKE) -C device/include
@@ -73,7 +73,7 @@ index 6d035ec..12f1fad 100644
# doc depends on latex and latex2html
diff --git a/configure b/configure
-index 9de81c6..2620e3c 100755
+index b509c84..c7ce7fc 100755
--- a/configure
+++ b/configure
@@ -659,7 +659,6 @@ LATEX
@@ -84,7 +84,7 @@ index 9de81c6..2620e3c 100755
OPT_DISABLE_SDBINUTILS
OPT_DISABLE_SDCDB
OPT_DISABLE_SDCPP
-@@ -692,10 +691,7 @@ OPT_DISABLE_Z80
+@@ -693,10 +692,7 @@ OPT_DISABLE_Z80
OPT_DISABLE_MCS51
SVN_REVISION
GIT_REVISION
@@ -95,7 +95,7 @@ index 9de81c6..2620e3c 100755
include_dir_suffix
inclib_dir_suffix
LIB_TYPE
-@@ -824,7 +820,6 @@ enable_packihx
+@@ -828,7 +824,6 @@ enable_packihx
enable_sdcpp
enable_sdcdb
enable_sdbinutils
@@ -103,7 +103,7 @@ index 9de81c6..2620e3c 100755
enable_doc
enable_libgc
'
-@@ -845,10 +840,7 @@ sdccconf_h_dir_separator
+@@ -849,10 +844,7 @@ sdccconf_h_dir_separator
LIB_TYPE
inclib_dir_suffix
include_dir_suffix
@@ -114,7 +114,7 @@ index 9de81c6..2620e3c 100755
docdir'
ac_subdirs_all='support/cpp
support/packihx
-@@ -856,9 +848,7 @@ sim/ucsim
+@@ -860,9 +852,7 @@ sim/ucsim
debugger/mcs51
support/sdbinutils
device/lib/pic14
@@ -125,7 +125,7 @@ index 9de81c6..2620e3c 100755
# Initialize some variables set by options.
ac_init_help=
-@@ -1512,7 +1502,6 @@ Optional Features:
+@@ -1517,7 +1507,6 @@ Optional Features:
--disable-sdcpp Disables building sdcpp
--disable-sdcdb Disables building sdcdb
--disable-sdbinutils Disables configuring and building of sdbinutils
@@ -133,7 +133,7 @@ index 9de81c6..2620e3c 100755
--enable-doc Enables building the documentation
--enable-libgc Use the Bohem memory allocator. Lower runtime
footprint.
-@@ -1541,16 +1530,8 @@ Some influential environment variables:
+@@ -1551,16 +1540,8 @@ Some influential environment variables:
appended to datadir to define SDCC's include/lib directory
include_dir_suffix
appended to datadir to define SDCC's include directory
@@ -150,7 +150,7 @@ index 9de81c6..2620e3c 100755
docdir documentation installation directory
Use these variables to override the choices made by `configure' or to help
-@@ -7426,19 +7407,6 @@ if test "${include_dir_suffix}" = ""; then
+@@ -7869,19 +7850,6 @@ if test "${include_dir_suffix}" = ""; then
include_dir_suffix="${inclib_dir_suffix}/include"
fi
@@ -170,7 +170,7 @@ index 9de81c6..2620e3c 100755
# lib_dir_suffix:
# *nix default: "sdcc/lib"
-@@ -7446,13 +7414,6 @@ if test "${lib_dir_suffix}" = ""; then
+@@ -7889,13 +7857,6 @@ if test "${lib_dir_suffix}" = ""; then
lib_dir_suffix="${inclib_dir_suffix}/lib"
fi
@@ -184,7 +184,7 @@ index 9de81c6..2620e3c 100755
# docdir:
# *nix default: "${datadir}/sdcc/doc"
-@@ -7605,22 +7566,6 @@ esac
+@@ -8048,22 +8009,6 @@ esac
printf "%s\n" "#define INCLUDE_DIR_SUFFIX DIR_SEPARATOR_STRING \"${norm_inc_dir_suffix}\"" >>confdefs.h
@@ -207,7 +207,7 @@ index 9de81c6..2620e3c 100755
norm_lib_dir_suffix=${lib_dir_suffix}
case ":$norm_lib_dir_suffix:" in
-@@ -7638,22 +7583,6 @@ esac
+@@ -8081,22 +8026,6 @@ esac
printf "%s\n" "#define LIB_DIR_SUFFIX DIR_SEPARATOR_STRING \"${norm_lib_dir_suffix}\"" >>confdefs.h
@@ -230,7 +230,7 @@ index 9de81c6..2620e3c 100755
# relative paths
for _lcl_i in expanded_bindir:expanded_datadir:bin2data_dir; do
-@@ -8769,27 +8698,6 @@ printf "%s\n" "#define OPT_DISABLE_SDBINUTILS $OPT_DISABLE_SDBINUTILS" >>confdef
+@@ -9237,27 +9166,6 @@ printf "%s\n" "#define OPT_DISABLE_SDBINUTILS $OPT_DISABLE_SDBINUTILS" >>confdef
@@ -258,7 +258,7 @@ index 9de81c6..2620e3c 100755
# Check whether --enable-doc was given.
if test ${enable_doc+y}
-@@ -9217,20 +9125,12 @@ if test $OPT_DISABLE_PIC14 = 0; then
+@@ -9685,20 +9593,12 @@ if test $OPT_DISABLE_PIC14 = 0; then
test $OPT_DISABLE_DEVICE_LIB = 0 && subdirs="$subdirs device/lib/pic14"
@@ -278,8 +278,8 @@ index 9de81c6..2620e3c 100755
-
fi
- if test $OPT_DISABLE_Z80 = 0 || test $OPT_DISABLE_Z180 = 0 || test $OPT_DISABLE_R2K = 0 || test $OPT_DISABLE_R2KA = 0 || test $OPT_DISABLE_R3KA = 0 || test $OPT_DISABLE_SM83 = 0 || test $OPT_DISABLE_TLCS90 = 0 || test $OPT_DISABLE_EZ80_Z80 = 0 || test $OPT_DISABLE_Z80N = 0; then
-@@ -9307,8 +9207,6 @@ fi
+ if test $OPT_DISABLE_Z80 = 0 || test $OPT_DISABLE_Z180 = 0 || test $OPT_DISABLE_R2K = 0 || test $OPT_DISABLE_R2KA = 0 || test $OPT_DISABLE_R3KA = 0 || test $OPT_DISABLE_SM83 = 0 || test $OPT_DISABLE_TLCS90 = 0 || test $OPT_DISABLE_EZ80_Z80 = 0 || test $OPT_DISABLE_Z80N = 0 || test $OPT_DISABLE_R800 = 0; then
+@@ -9775,8 +9675,6 @@ fi
test $OPT_DISABLE_DEVICE_LIB = 0 && ac_config_files="$ac_config_files device/lib/Makefile"
@@ -288,7 +288,7 @@ index 9de81c6..2620e3c 100755
ac_config_files="$ac_config_files main.mk:main_in.mk bin/Makefile src/Makefile device/include/Makefile sdas/linksrc/Makefile support/makebin/Makefile support/regression/Makefile support/regression/cases/Makefile support/valdiag/Makefile support/scripts/Makefile support/regression/ports/host/spec.mk:support/regression/ports/host/spec.mk.in Makefile Makefile.common:Makefile.common.in"
-@@ -9324,10 +9222,6 @@ ac_config_files="$ac_config_files bin/sdranlib"
+@@ -9792,10 +9690,6 @@ ac_config_files="$ac_config_files bin/sdranlib"
ac_config_files="$ac_config_files bin/sdobjcopy"
@@ -299,7 +299,7 @@ index 9de81c6..2620e3c 100755
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
-@@ -10068,7 +9962,6 @@ do
+@@ -10538,7 +10432,6 @@ do
"device/lib/pdk15-stack-auto/Makefile") CONFIG_FILES="$CONFIG_FILES device/lib/pdk15-stack-auto/Makefile" ;;
"sdas/aspdk16/Makefile") CONFIG_FILES="$CONFIG_FILES sdas/aspdk16/Makefile" ;;
"device/lib/Makefile") CONFIG_FILES="$CONFIG_FILES device/lib/Makefile" ;;
@@ -307,7 +307,7 @@ index 9de81c6..2620e3c 100755
"main.mk") CONFIG_FILES="$CONFIG_FILES main.mk:main_in.mk" ;;
"bin/Makefile") CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;;
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-@@ -10088,7 +9981,6 @@ do
+@@ -10558,7 +10451,6 @@ do
"bin/sdnm") CONFIG_FILES="$CONFIG_FILES bin/sdnm" ;;
"bin/sdranlib") CONFIG_FILES="$CONFIG_FILES bin/sdranlib" ;;
"bin/sdobjcopy") CONFIG_FILES="$CONFIG_FILES bin/sdobjcopy" ;;
@@ -315,7 +315,7 @@ index 9de81c6..2620e3c 100755
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
-@@ -10905,54 +10797,6 @@ esac
+@@ -11375,54 +11267,6 @@ esac
incPath3=`echo "$incPath3" | sed 's,\\\\\\\\,\\\\,g'`
@@ -370,7 +370,7 @@ index 9de81c6..2620e3c 100755
libPath1=`echo "/${prefix2data_dir}/${norm_lib_dir_suffix}" | sed 's,/\./,/,g'`
case ":$libPath1:" in
-@@ -11002,54 +10846,6 @@ esac
+@@ -11472,54 +11316,6 @@ esac
libPath3=`echo "$libPath3" | sed 's,\\\\\\\\,\\\\,g'`
@@ -425,7 +425,7 @@ index 9de81c6..2620e3c 100755
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
sdcc ${VERSION} is now configured for
-@@ -11091,7 +10887,6 @@ sdcc ${VERSION} is now configured for
+@@ -11562,7 +11358,6 @@ sdcc ${VERSION} is now configured for
mos6502 ${enable_mos6502_port}
mos65c02 ${enable_mos65c02_port}
@@ -433,7 +433,7 @@ index 9de81c6..2620e3c 100755
Disable packihx: ${OPT_DISABLE_PACKIHX}
Disable ucsim: ${OPT_DISABLE_UCSIM}
Disable device lib: ${OPT_DISABLE_DEVICE_LIB}
-@@ -11106,9 +10901,6 @@ sdcc ${VERSION} is now configured for
+@@ -11577,9 +11372,6 @@ sdcc ${VERSION} is now configured for
include/library files: ${datadir}/${inclib_dir_suffix}
include files: ${datadir}/${include_dir_suffix}
library files: ${datadir}/${lib_dir_suffix}
@@ -443,7 +443,7 @@ index 9de81c6..2620e3c 100755
documentation: ${docdir}
prefix: ${prefix}
-@@ -11120,15 +10912,9 @@ sdcc ${VERSION} is now configured for
+@@ -11591,15 +11383,9 @@ sdcc ${VERSION} is now configured for
include files: ${incPath1}
path(argv[0])${incPath2}
${incPath3}
@@ -459,7 +459,7 @@ index 9de81c6..2620e3c 100755
" >&5
printf "%s\n" "
sdcc ${VERSION} is now configured for
-@@ -11171,7 +10957,6 @@ sdcc ${VERSION} is now configured for
+@@ -11643,7 +11429,6 @@ sdcc ${VERSION} is now configured for
mos6502 ${enable_mos6502_port}
mos65c02 ${enable_mos65c02_port}
@@ -467,7 +467,7 @@ index 9de81c6..2620e3c 100755
Disable packihx: ${OPT_DISABLE_PACKIHX}
Disable ucsim: ${OPT_DISABLE_UCSIM}
Disable device lib: ${OPT_DISABLE_DEVICE_LIB}
-@@ -11186,9 +10971,6 @@ sdcc ${VERSION} is now configured for
+@@ -11658,9 +11443,6 @@ sdcc ${VERSION} is now configured for
include/library files: ${datadir}/${inclib_dir_suffix}
include files: ${datadir}/${include_dir_suffix}
library files: ${datadir}/${lib_dir_suffix}
@@ -477,7 +477,7 @@ index 9de81c6..2620e3c 100755
documentation: ${docdir}
prefix: ${prefix}
-@@ -11200,15 +10982,9 @@ sdcc ${VERSION} is now configured for
+@@ -11672,15 +11454,9 @@ sdcc ${VERSION} is now configured for
include files: ${incPath1}
path(argv[0])${incPath2}
${incPath3}
@@ -494,10 +494,10 @@ index 9de81c6..2620e3c 100755
# End of configure/configure.in
diff --git a/configure.ac b/configure.ac
-index ead779c..a3578fe 100644
+index adf5060..bd5a036 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -564,19 +564,6 @@ if test "${include_dir_suffix}" = ""; then
+@@ -542,19 +542,6 @@ if test "${include_dir_suffix}" = ""; then
include_dir_suffix="${inclib_dir_suffix}/include"
fi
@@ -517,7 +517,7 @@ index ead779c..a3578fe 100644
# lib_dir_suffix:
# *nix default: "sdcc/lib"
AC_ARG_VAR([lib_dir_suffix], [appended to datadir to define SDCC's library root directory])
-@@ -584,13 +571,6 @@ if test "${lib_dir_suffix}" = ""; then
+@@ -562,13 +549,6 @@ if test "${lib_dir_suffix}" = ""; then
lib_dir_suffix="${inclib_dir_suffix}/lib"
fi
@@ -531,7 +531,7 @@ index ead779c..a3578fe 100644
# docdir:
# *nix default: "${datadir}/sdcc/doc"
AC_ARG_VAR([docdir], [documentation installation directory])
-@@ -631,19 +611,11 @@ norm_inc_dir_suffix=${include_dir_suffix}
+@@ -609,19 +589,11 @@ norm_inc_dir_suffix=${include_dir_suffix}
adl_NORMALIZE_PATH([norm_inc_dir_suffix], [$sdccconf_h_dir_separator])
AC_DEFINE_UNQUOTED(INCLUDE_DIR_SUFFIX,
DIR_SEPARATOR_STRING "${norm_inc_dir_suffix}", [XXX])
@@ -551,7 +551,7 @@ index ead779c..a3578fe 100644
# relative paths
adl_COMPUTE_RELATIVE_PATHS([expanded_bindir:expanded_datadir:bin2data_dir])
-@@ -836,7 +808,6 @@ AC_DO_DISABLER(packihx, PACKIHX, [Disables building packihx])
+@@ -815,7 +787,6 @@ AC_DO_DISABLER(packihx, PACKIHX, [Disables building packihx])
AC_DO_DISABLER(sdcpp, SDCPP, [Disables building sdcpp])
AC_DO_DISABLER(sdcdb, SDCDB, [Disables building sdcdb])
AC_DO_DISABLER(sdbinutils, SDBINUTILS, [Disables configuring and building of sdbinutils])
@@ -559,7 +559,7 @@ index ead779c..a3578fe 100644
AC_DO_ENABLER(doc, DOC, [Enables building the documentation])
AC_CHECK_PROG([LYX], [lyx], [lyx], [:])
-@@ -915,16 +886,10 @@ if test $OPT_DISABLE_PIC14 = 0; then
+@@ -895,16 +866,10 @@ if test $OPT_DISABLE_PIC14 = 0; then
AC_CONFIG_FILES(src/pic14/Makefile)
test $OPT_DISABLE_DEVICE_LIB = 0 && AC_CONFIG_SUBDIRS(device/lib/pic14)
fi
@@ -574,9 +574,9 @@ index ead779c..a3578fe 100644
- test $OPT_DISABLE_DEVICE_LIB = 0 && AC_CONFIG_SUBDIRS(device/non-free/lib/pic16)
-fi
- if test $OPT_DISABLE_Z80 = 0 || test $OPT_DISABLE_Z180 = 0 || test $OPT_DISABLE_R2K = 0 || test $OPT_DISABLE_R2KA = 0 || test $OPT_DISABLE_R3KA = 0 || test $OPT_DISABLE_SM83 = 0 || test $OPT_DISABLE_TLCS90 = 0 || test $OPT_DISABLE_EZ80_Z80 = 0 || test $OPT_DISABLE_Z80N = 0; then
+ if test $OPT_DISABLE_Z80 = 0 || test $OPT_DISABLE_Z180 = 0 || test $OPT_DISABLE_R2K = 0 || test $OPT_DISABLE_R2KA = 0 || test $OPT_DISABLE_R3KA = 0 || test $OPT_DISABLE_SM83 = 0 || test $OPT_DISABLE_TLCS90 = 0 || test $OPT_DISABLE_EZ80_Z80 = 0 || test $OPT_DISABLE_Z80N = 0 || test $OPT_DISABLE_R800 = 0; then
AC_CONFIG_FILES([src/z80/Makefile])
-@@ -988,7 +953,6 @@ fi
+@@ -969,7 +934,6 @@ fi
test $OPT_DISABLE_DEVICE_LIB = 0 && AC_CONFIG_FILES([device/lib/Makefile])
@@ -584,7 +584,7 @@ index ead779c..a3578fe 100644
AC_CONFIG_FILES([main.mk:main_in.mk
bin/Makefile
-@@ -1010,9 +974,6 @@ AC_CONFIG_FILES([bin/sdar], [chmod +x bin/sdar])
+@@ -991,9 +955,6 @@ AC_CONFIG_FILES([bin/sdar], [chmod +x bin/sdar])
AC_CONFIG_FILES([bin/sdnm], [chmod +x bin/sdnm])
AC_CONFIG_FILES([bin/sdranlib], [chmod +x bin/sdranlib])
AC_CONFIG_FILES([bin/sdobjcopy], [chmod +x bin/sdobjcopy])
@@ -594,7 +594,7 @@ index ead779c..a3578fe 100644
AC_OUTPUT
# I found no better place
-@@ -1030,16 +991,10 @@ adl_NORMALIZE_PATH_MSG(/${prefix2bin_dir}, [binPath], [
+@@ -1011,16 +972,10 @@ adl_NORMALIZE_PATH_MSG(/${prefix2bin_dir}, [binPath], [
adl_NORMALIZE_PATH_MSG(/${prefix2data_dir}/${norm_inc_dir_suffix}, [incPath1], [$dirch])
adl_NORMALIZE_PATH_MSG(/${bin2data_dir}/${norm_inc_dir_suffix}, [incPath2], [$dirch])
adl_NORMALIZE_PATH_MSG(${expanded_datadir}/${norm_inc_dir_suffix}, [incPath3], [$dirch])
@@ -611,7 +611,7 @@ index ead779c..a3578fe 100644
AC_MSG_RESULT([
sdcc ${VERSION} is now configured for
-@@ -1082,7 +1037,6 @@ sdcc ${VERSION} is now configured for
+@@ -1064,7 +1019,6 @@ sdcc ${VERSION} is now configured for
mos6502 ${enable_mos6502_port}
mos65c02 ${enable_mos65c02_port}
@@ -619,7 +619,7 @@ index ead779c..a3578fe 100644
Disable packihx: ${OPT_DISABLE_PACKIHX}
Disable ucsim: ${OPT_DISABLE_UCSIM}
Disable device lib: ${OPT_DISABLE_DEVICE_LIB}
-@@ -1097,9 +1051,6 @@ sdcc ${VERSION} is now configured for
+@@ -1079,9 +1033,6 @@ sdcc ${VERSION} is now configured for
include/library files: ${datadir}/${inclib_dir_suffix}
include files: ${datadir}/${include_dir_suffix}
library files: ${datadir}/${lib_dir_suffix}
@@ -629,7 +629,7 @@ index ead779c..a3578fe 100644
documentation: ${docdir}
prefix: ${prefix}
-@@ -1111,14 +1062,8 @@ sdcc ${VERSION} is now configured for
+@@ -1093,14 +1044,8 @@ sdcc ${VERSION} is now configured for
include files: ${incPath1}
path(argv[[0]])${incPath2}
${incPath3}
@@ -1003,7 +1003,7 @@ index db0d421..9e90d7a 100644
.SUFFIXES:
diff --git a/device/lib/pic16/libc/Makefile.in b/device/lib/pic16/libc/Makefile.in
-index ae76fdd..75fc04a 100644
+index 74147d2..bed548b 100644
--- a/device/lib/pic16/libc/Makefile.in
+++ b/device/lib/pic16/libc/Makefile.in
@@ -88,10 +88,7 @@ PRE_UNINSTALL = :
@@ -1018,7 +1018,7 @@ index ae76fdd..75fc04a 100644
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-@@ -383,8 +380,7 @@ libc18f_a_SOURCES = ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c \
+@@ -384,8 +381,7 @@ libc18f_a_SOURCES = ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c \
string/strpbrk.c string/strrchr.c string/strspn.c \
string/strstr.c string/strtok.c string/strupr.c \
utils/cnvfrac.S utils/cnvint.S utils/cvtdec.S
@@ -1028,7 +1028,7 @@ index ae76fdd..75fc04a 100644
#AM_CFLAGS += --no-optimize-goto
#AM_CFLAGS += --debug-ralloc
-@@ -398,11 +394,10 @@ AM_CPPFLAGS = -I. -I$(top_srcdir)/../../include/pic16 \
+@@ -399,11 +395,10 @@ AM_CPPFLAGS = -I. -I$(top_srcdir)/../../include/pic16 \
#AM_CFLAGS += --noinduction
#AM_CFLAGS += --nojtbound
#AM_CFLAGS += --noloopreverse
@@ -1248,7 +1248,7 @@ index 5c2fce7..8d70807 100644
.SUFFIXES:
diff --git a/doc/INSTALL.txt b/doc/INSTALL.txt
-index 3711c71..9e500a2 100644
+index 8dfadb6..dd17528 100644
--- a/doc/INSTALL.txt
+++ b/doc/INSTALL.txt
@@ -18,9 +18,7 @@ To install:
@@ -1282,7 +1282,7 @@ index 3711c71..9e500a2 100644
You can test the install by entering:
diff --git a/doc/README.txt b/doc/README.txt
-index cd1ef3f..5a0d0a8 100644
+index e62177b..4d09afb 100644
--- a/doc/README.txt
+++ b/doc/README.txt
@@ -37,10 +37,9 @@ Exception are pic device libraries and header files which are derived
@@ -1300,10 +1300,10 @@ index cd1ef3f..5a0d0a8 100644
However: Many think that the Microchip requirement is not legally enforceable,
arguing that the header files only contain noncopyrightable facts.
diff --git a/doc/sdccman.lyx b/doc/sdccman.lyx
-index a57bf15..d6f30c7 100644
+index efaf738..0ad1ba7 100644
--- a/doc/sdccman.lyx
+++ b/doc/sdccman.lyx
-@@ -1150,54 +1150,9 @@ A possible exception are pic device libraries and header files which are
+@@ -1151,54 +1151,9 @@ A possible exception are pic device libraries and header files which are
to be used with authentic Microchip devices" which makes them incompatible
with the GPL, if Microchip has any copyright in them (which might depend
on local copyright laws).
@@ -1361,7 +1361,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\begin_layout Itemize
-@@ -1260,23 +1215,6 @@ makebin:
+@@ -1261,23 +1216,6 @@ makebin:
zlib/libpng License
\end_layout
@@ -1385,7 +1385,7 @@ index a57bf15..d6f30c7 100644
\end_deeper
\begin_layout Itemize
libraries:
-@@ -3062,18 +3000,6 @@ include_dir_suffix environment variable, see table below
+@@ -3194,18 +3132,6 @@ include_dir_suffix environment variable, see table below
\end_inset
@@ -1404,7 +1404,7 @@ index a57bf15..d6f30c7 100644
\begin_inset space ~
\end_inset
-@@ -3086,22 +3012,6 @@ lib_dir_suffix environment variable, see table below
+@@ -3218,22 +3144,6 @@ lib_dir_suffix environment variable, see table below
\end_inset
@@ -1427,7 +1427,7 @@ index a57bf15..d6f30c7 100644
\begin_inset space ~
\end_inset
-@@ -3600,7 +3510,7 @@ These defaults are:
+@@ -3876,7 +3786,7 @@ These defaults are:
\begin_layout Standard
\align center
\begin_inset Tabular
@@ -1436,7 +1436,7 @@ index a57bf15..d6f30c7 100644
<features tabularvalignment="middle">
<column alignment="block" valignment="top" width="0in">
<column alignment="block" valignment="top" width="0in">
-@@ -3884,68 +3794,6 @@ sdcc/include
+@@ -4160,68 +4070,6 @@ sdcc/include
include
\end_layout
@@ -1505,7 +1505,7 @@ index a57bf15..d6f30c7 100644
\end_inset
</cell>
</row>
-@@ -3956,7 +3804,7 @@ lib
+@@ -4232,7 +4080,7 @@ lib
\begin_layout Plain Layout
\emph on
@@ -1514,7 +1514,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\end_inset
-@@ -3965,7 +3813,7 @@ NON_FREE_LIB_DIR_SUFFIX
+@@ -4241,7 +4089,7 @@ NON_FREE_LIB_DIR_SUFFIX
\begin_inset Text
\begin_layout Plain Layout
@@ -1523,7 +1523,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\end_inset
-@@ -3974,7 +3822,7 @@ sdcc/non-free/lib
+@@ -4250,7 +4098,7 @@ sdcc/non-free/lib
\begin_inset Text
\begin_layout Plain Layout
@@ -1532,7 +1532,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\end_inset
-@@ -4373,20 +4221,6 @@ include
+@@ -4649,20 +4497,6 @@ include
\end_inset
@@ -1553,7 +1553,7 @@ index a57bf15..d6f30c7 100644
\backslash
\begin_inset Newline newline
-@@ -4401,20 +4235,6 @@ lib
+@@ -4677,20 +4511,6 @@ lib
\end_inset
@@ -1574,7 +1574,7 @@ index a57bf15..d6f30c7 100644
\backslash
\begin_inset Newline newline
-@@ -4595,20 +4415,6 @@ include
+@@ -4871,20 +4691,6 @@ include
\end_inset
@@ -1595,7 +1595,7 @@ index a57bf15..d6f30c7 100644
\backslash
\begin_inset Newline newline
-@@ -4623,20 +4429,6 @@ lib
+@@ -4899,20 +4705,6 @@ lib
\end_inset
@@ -1616,7 +1616,7 @@ index a57bf15..d6f30c7 100644
\backslash
\begin_inset Newline newline
-@@ -4733,7 +4525,7 @@ Install paths
+@@ -5009,7 +4801,7 @@ Install paths
\begin_layout Standard
\align center
\begin_inset Tabular
@@ -1625,7 +1625,7 @@ index a57bf15..d6f30c7 100644
<features tabularvalignment="middle">
<column alignment="left" valignment="top">
<column alignment="left" valignment="top" width="4.5cm">
-@@ -4889,64 +4681,6 @@ include
+@@ -5165,64 +4957,6 @@ include
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
@@ -1690,7 +1690,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Plain Layout
Library file**
\end_layout
-@@ -4996,64 +4730,6 @@ sdcc
+@@ -5272,64 +5006,6 @@ sdcc
lib
\end_layout
@@ -1755,7 +1755,7 @@ index a57bf15..d6f30c7 100644
\end_inset
</cell>
</row>
-@@ -5376,7 +5052,7 @@ $PATH
+@@ -5652,7 +5328,7 @@ $PATH
\begin_layout Standard
\align center
\begin_inset Tabular
@@ -1764,7 +1764,7 @@ index a57bf15..d6f30c7 100644
<features tabularvalignment="middle">
<column alignment="block" valignment="top" width="0.5cm">
<column alignment="block" valignment="top" width="4.8cm">
-@@ -5654,203 +5330,13 @@ include
+@@ -5930,203 +5606,13 @@ include
</cell>
</row>
<row>
@@ -1969,7 +1969,7 @@ index a57bf15..d6f30c7 100644
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-@@ -5866,21 +5352,13 @@ $DATADIR/
+@@ -6142,21 +5628,13 @@ $DATADIR/
\end_inset
@@ -1992,7 +1992,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -5888,7 +5366,7 @@ $INCLUDE_DIR_SUFFIX
+@@ -6164,7 +5642,7 @@ $INCLUDE_DIR_SUFFIX
\begin_inset Newline newline
\end_inset
@@ -2001,7 +2001,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\end_inset
-@@ -5986,7 +5464,7 @@ model
+@@ -6262,7 +5740,7 @@ model
\begin_layout Standard
\align center
\begin_inset Tabular
@@ -2010,7 +2010,7 @@ index a57bf15..d6f30c7 100644
<features tabularvalignment="middle">
<column alignment="block" valignment="top" width="0.5cm">
<column alignment="block" valignment="top" width="4.5cm">
-@@ -6266,7 +5744,7 @@ lib
+@@ -6542,7 +6020,7 @@ lib
</cell>
</row>
<row>
@@ -2019,7 +2019,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -6275,7 +5753,7 @@ lib
+@@ -6551,7 +6029,7 @@ lib
\end_inset
</cell>
@@ -2028,7 +2028,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -6306,7 +5784,7 @@ $LIB_DIR_SUFFIX/
+@@ -6582,7 +6060,7 @@ $LIB_DIR_SUFFIX/
\end_inset
</cell>
@@ -2037,7 +2037,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -6321,7 +5799,7 @@ lib/
+@@ -6597,7 +6075,7 @@ lib/
\end_inset
</cell>
@@ -2046,7 +2046,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -6344,308 +5822,6 @@ lib
+@@ -6620,308 +6098,6 @@ lib
<model>
\end_layout
@@ -2355,7 +2355,7 @@ index a57bf15..d6f30c7 100644
\end_inset
</cell>
</row>
-@@ -8923,14 +8099,6 @@ In <installdir>/share/sdcc/include
+@@ -9201,14 +8377,6 @@ In <installdir>/share/sdcc/include
the include files
\end_layout
@@ -2370,7 +2370,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Standard
In <installdir>/share/sdcc/lib
\end_layout
-@@ -8939,14 +8107,6 @@ In <installdir>/share/sdcc/lib
+@@ -9217,14 +8385,6 @@ In <installdir>/share/sdcc/lib
the src and target subdirectories with the precompiled relocatables.
\end_layout
@@ -2385,7 +2385,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Standard
In <installdir>/share/sdcc/doc
\end_layout
-@@ -16096,66 +15256,6 @@ splint
+@@ -16452,66 +15612,6 @@ splint
myprogram.c
\end_layout
@@ -2452,7 +2452,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Subsection
Linker Options
\begin_inset Index idx
-@@ -45880,66 +44980,9 @@ http://sourceforge.net/projects/gputils
+@@ -46758,66 +45858,9 @@ http://sourceforge.net/projects/gputils
Pic device specific header and c source files are automatically generated
from MPLAB include files, which are published by Microchip with a special
requirement that they are only to be used with authentic Microchip devices.
@@ -2522,7 +2522,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Newline newline
\end_inset
-@@ -45993,7 +45036,7 @@ Makefile
+@@ -46871,7 +45914,7 @@ Makefile
\begin_inset space ~
\end_inset
@@ -2531,7 +2531,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Newline newline
\end_inset
-@@ -46087,7 +45130,7 @@ Makefile
+@@ -46965,7 +46008,7 @@ Makefile
\begin_inset space ~
\end_inset
@@ -2540,7 +2540,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Newline newline
\end_inset
-@@ -46369,47 +45412,6 @@ status collapsed
+@@ -47247,47 +46290,6 @@ status collapsed
\begin_layout Plain Layout
@@ -2588,7 +2588,7 @@ index a57bf15..d6f30c7 100644
\backslash
/
\end_layout
-@@ -47282,47 +46284,6 @@ status collapsed
+@@ -48160,47 +47162,6 @@ status collapsed
-all-callee-saves
\end_layout
@@ -2636,7 +2636,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Subsection
Port Specific Options
\begin_inset Index idx
-@@ -48599,188 +47560,6 @@ Linker
+@@ -49477,188 +48438,6 @@ Linker
\end_inset
@@ -2825,7 +2825,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\begin_layout Subsection
-@@ -49476,66 +48255,9 @@ name "subsec:PIC16_Header-Files-and-Libraries"
+@@ -50354,66 +49133,9 @@ name "subsec:PIC16_Header-Files-and-Libraries"
Pic device specific header and c source files are automatically generated
from MPLAB include files, which are published by Microchip with a special
requirement that they are only to be used with authentic Microchip devices.
@@ -2895,7 +2895,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\begin_layout Subsection
-@@ -49781,195 +48503,6 @@ vfprintf.c
+@@ -50659,195 +49381,6 @@ vfprintf.c
should also work, but is untested.
\end_layout
@@ -3091,7 +3091,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Subsection
Memory Models
\end_layout
-@@ -74714,6 +73247,12 @@ This document was initially written by Sandeep Dutta and updated by SDCC
+@@ -75717,6 +74250,12 @@ This document was initially written by Sandeep Dutta and updated by SDCC
developers.
\end_layout
@@ -3105,7 +3105,7 @@ index a57bf15..d6f30c7 100644
All product names mentioned herein may be trademarks
\begin_inset Index idx
diff --git a/sdcc.spec b/sdcc.spec
-index b784cbc..f180b51 100644
+index ccb3217..292b642 100644
--- a/sdcc.spec
+++ b/sdcc.spec
@@ -89,9 +89,7 @@ rm -rf $RPM_BUILD_ROOT
@@ -3118,7 +3118,7 @@ index b784cbc..f180b51 100644
%files doc
%defattr(-,root,root)
-@@ -102,6 +100,8 @@ rm -rf $RPM_BUILD_ROOT
+@@ -104,6 +102,8 @@ rm -rf $RPM_BUILD_ROOT
- version updated to 4.2.0
* Sat Feb 20 2021 - pkk AT spth.de
- version updated to 4.0.0
@@ -3141,7 +3141,7 @@ index 8cf401b..19f5113 100644
#define BIN2DATA_DIR "\\.."
#define PREFIX2BIN_DIR "\\bin"
diff --git a/sdccconf_in.h b/sdccconf_in.h
-index ca8d69f..980af8d 100644
+index 9e6e3c7..8681ceb 100644
--- a/sdccconf_in.h
+++ b/sdccconf_in.h
@@ -100,12 +100,6 @@
@@ -3168,10 +3168,10 @@ index ca8d69f..980af8d 100644
#undef OPT_DISABLE_PACKIHX
diff --git a/src/SDCCglobl.h b/src/SDCCglobl.h
-index 87981f4..e2701f2 100644
+index 9f0e52a..02a5fb8 100644
--- a/src/SDCCglobl.h
+++ b/src/SDCCglobl.h
-@@ -287,7 +287,6 @@ struct options
+@@ -290,7 +290,6 @@ struct options
int stack_size; /* MCS51/DS390 - Tells the linker to allocate this space for stack */
int acall_ajmp; /* MCS51 - Use acall/ajmp instead of lcall/ljmp */
int no_ret_without_call; /* MCS51 - Do not use ret independent of acall/lcall */
@@ -3180,7 +3180,7 @@ index 87981f4..e2701f2 100644
int xstack_loc; /* initial location of external stack */
int stack_loc; /* initial value of internal stack pointer */
diff --git a/src/SDCCmain.c b/src/SDCCmain.c
-index 6b50572..089c42f 100644
+index e7e8bd6..3b25061 100644
--- a/src/SDCCmain.c
+++ b/src/SDCCmain.c
@@ -143,7 +143,6 @@ char buffer[PATH_MAX * 2];
@@ -3191,15 +3191,15 @@ index 6b50572..089c42f 100644
#define OPTION_PEEP_RETURN "--peep-return"
#define OPTION_NO_PEEP_RETURN "--no-peep-return"
#define OPTION_NO_OPTSDCC_IN_ASM "--no-optsdcc-in-asm"
-@@ -193,7 +192,6 @@ static const OPTION optionsTable[] = {
- {0, OPTION_STD, NULL, "Determine the language standard (c89, c99, c11, c2x, sdcc89 etc.)"},
+@@ -195,7 +194,6 @@ static const OPTION optionsTable[] = {
+ {0, OPTION_STD, NULL, "Determine the language standard (c89, c99, c11, c23, sdcc89 etc.)"},
{0, OPTION_DOLLARS_IN_IDENT, &options.dollars_in_ident, "Permit '$' as an identifier character"},
{0, OPTION_SIGNED_CHAR, &options.signed_char, "Make \"char\" signed by default"},
- {0, OPTION_USE_NON_FREE, &options.use_non_free, "Search / include non-free licensed libraries and header files"},
{0, NULL, NULL, "Code generation options"},
{'m', NULL, NULL, "Set the port to use e.g. -mz80."},
-@@ -2207,10 +2205,6 @@ preProcess (char **envp)
+@@ -2231,10 +2229,6 @@ preProcess (char **envp)
else
addSet (&preArgvSet, Safe_strdup ("-D__SDCC_CHAR_UNSIGNED"));
@@ -3210,7 +3210,7 @@ index 6b50572..089c42f 100644
/* set the macro for large model */
switch (options.model)
{
-@@ -2454,12 +2448,6 @@ setIncludePath (void)
+@@ -2478,12 +2472,6 @@ setIncludePath (void)
* 6. - $SDCC_HOME/PREFIX2DATA_DIR/INCLUDE_DIR_SUFFIX
* 7. - path(argv[0])/BIN2DATA_DIR/INCLUDE_DIR_SUFFIX
* 8. - DATADIR/INCLUDE_DIR_SUFFIX (only on *nix)
@@ -3223,7 +3223,7 @@ index 6b50572..089c42f 100644
*/
if (!options.nostdinc)
-@@ -2475,17 +2463,6 @@ setIncludePath (void)
+@@ -2499,17 +2487,6 @@ setIncludePath (void)
includeDirsSet = processStrSet (includeDirsSet, NULL, port->target, NULL);
mergeSets (&includeDirsSet, tempSet);
@@ -3241,7 +3241,7 @@ index 6b50572..089c42f 100644
if ((p = getenv (SDCC_INCLUDE_NAME)) != NULL)
{
struct dbuf_s dbuf;
-@@ -2510,9 +2487,6 @@ setLibPath (void)
+@@ -2534,9 +2511,6 @@ setLibPath (void)
* 3. - $SDCC_HOME/PREFIX2DATA_DIR/LIB_DIR_SUFFIX/<model>
* 4. - path(argv[0])/BIN2DATA_DIR/LIB_DIR_SUFFIX/<model>
* 5. - DATADIR/LIB_DIR_SUFFIX/<model> (only on *nix)
@@ -3251,7 +3251,7 @@ index 6b50572..089c42f 100644
*/
if (!options.nostdlib)
-@@ -2529,13 +2503,6 @@ setLibPath (void)
+@@ -2553,13 +2527,6 @@ setLibPath (void)
dbuf_makePath (&dbuf, LIB_DIR_SUFFIX, port->general.get_model ? port->general.get_model () : targetname);
libDirsSet = processStrSet (dataDirsSet, NULL, dbuf_c_str (&dbuf), NULL);
@@ -3266,7 +3266,7 @@ index 6b50572..089c42f 100644
{
addSetHead (&libDirsSet, Safe_strdup (p));
diff --git a/src/pic14/main.c b/src/pic14/main.c
-index ab4bcdf..1747fd6 100644
+index 304c79b..9cbb9e8 100644
--- a/src/pic14/main.c
+++ b/src/pic14/main.c
@@ -42,7 +42,6 @@ static OPTION _pic14_poptions[] =
@@ -3319,7 +3319,7 @@ index 41a1b79..9c642e3 100644
extern pic16_options_t pic16_options;
diff --git a/src/pic16/main.c b/src/pic16/main.c
-index 8809e2c..53c700e 100644
+index 9557a10..d650e66 100644
--- a/src/pic16/main.c
+++ b/src/pic16/main.c
@@ -660,7 +660,6 @@ OPTION pic16_optionsTable[]= {
@@ -3404,10 +3404,10 @@ index b0b0867..2d5cdd3 100644
OBJEXT = .o
diff --git a/support/regression/ports/pic16/spec.mk b/support/regression/ports/pic16/spec.mk
-index 541608a..6e7238f 100644
+index 15b4028..3b79cfe 100644
--- a/support/regression/ports/pic16/spec.mk
+++ b/support/regression/ports/pic16/spec.mk
-@@ -12,13 +12,9 @@ endif
+@@ -16,13 +16,9 @@ EMU_INPUT = -c $(PORTS_DIR)/pic16/gpsim.cmd
ifndef SDCC_BIN_PATH
ifndef CROSSCOMPILING
@@ -3423,7 +3423,7 @@ index 541608a..6e7238f 100644
endif
ifdef CROSSCOMPILING
-@@ -27,7 +23,6 @@ endif
+@@ -31,7 +27,6 @@ endif
SDCCFLAGS += -mpic16 -pp18f452 --less-pedantic -Wl,-q
SDCCFLAGS += --no-peep
@@ -3541,10 +3541,10 @@ index 6db417a..4b35225 100755
);
diff --git a/support/scripts/sdcc.nsi b/support/scripts/sdcc.nsi
-index 8309df1..c0cc223 100644
+index 37393d7..997b2fe 100644
--- a/support/scripts/sdcc.nsi
+++ b/support/scripts/sdcc.nsi
-@@ -491,11 +491,6 @@ ${Section} "SDCC include files" SEC05
+@@ -487,11 +487,6 @@ ${Section} "SDCC include files" SEC05
SetOutPath "$INSTDIR\include"
File "${DEV_ROOT}\include\*.h"
@@ -3556,7 +3556,7 @@ index 8309df1..c0cc223 100644
${SectionEnd}
${Section} "SDCC DS390 library" SEC06
-@@ -593,18 +588,12 @@ ${Section} "SDCC PIC16 library" SEC21
+@@ -589,18 +584,12 @@ ${Section} "SDCC PIC16 library" SEC21
SetOutPath "$INSTDIR\lib\pic16"
File "${DEV_ROOT}\lib\pic16\*.o"
File "${DEV_ROOT}\lib\pic16\*.lib"
@@ -3575,7 +3575,7 @@ index 8309df1..c0cc223 100644
${SectionEnd}
${Section} "SDCC STM8 medium model library" SEC23
-@@ -713,10 +702,6 @@ ${Section} "SDCC library sources" SEC25
+@@ -709,10 +698,6 @@ ${Section} "SDCC library sources" SEC25
File "${DEV_ROOT}\lib\src\pic14\libsdcc\enhanced\*.inc"
# File "${DEV_ROOT}\lib\src\pic14\libsdcc\Makefile"
@@ -3586,7 +3586,7 @@ index 8309df1..c0cc223 100644
SetOutPath "$INSTDIR\lib\src\pic14\libm"
# File "${DEV_ROOT}\lib\src\pic14\libm\*.c"
-@@ -768,10 +753,6 @@ ${Section} "SDCC library sources" SEC25
+@@ -764,10 +749,6 @@ ${Section} "SDCC library sources" SEC25
File "${DEV_ROOT}\lib\src\pic16\libc\utils\*.S"
# File "${DEV_ROOT}\lib\src\pic16\libc\utils\Makefile"
@@ -3597,7 +3597,7 @@ index 8309df1..c0cc223 100644
SetOutPath "$INSTDIR\lib\src\pic16\libio"
File "${DEV_ROOT}\lib\src\pic16\libio\*.ignore"
# File "${DEV_ROOT}\lib\src\pic16\libio\Makefile"
-@@ -1137,13 +1118,9 @@ ${Section} Uninstall SECUNINSTALL
+@@ -1169,13 +1150,9 @@ ${Section} Uninstall SECUNINSTALL
Delete "$INSTDIR\lib\pic14\*.lib"
@@ -3611,7 +3611,7 @@ index 8309df1..c0cc223 100644
Delete "$INSTDIR\lib\hc08\*.lib"
Delete "$INSTDIR\lib\s08\*.lib"
-@@ -1219,9 +1196,7 @@ ${Section} Uninstall SECUNINSTALL
+@@ -1259,9 +1236,7 @@ ${Section} Uninstall SECUNINSTALL
Delete "$INSTDIR\include\pic14\*.h"
Delete "$INSTDIR\include\pic14\*.txt"
Delete "$INSTDIR\include\pic14\*.inc"
@@ -3621,7 +3621,7 @@ index 8309df1..c0cc223 100644
Delete "$INSTDIR\include\pic16\*.txt"
Delete "$INSTDIR\include\mcs51\*.h"
Delete "$INSTDIR\include\hc08\*.h"
-@@ -1298,9 +1273,7 @@ ${Section} Uninstall SECUNINSTALL
+@@ -1334,9 +1309,7 @@ ${Section} Uninstall SECUNINSTALL
Delete "$INSTDIR\uninstall.exe"
RMDir /r "$INSTDIR\lib\src\pic14"
@@ -3631,9 +3631,9 @@ index 8309df1..c0cc223 100644
RMDir "$INSTDIR\lib\src\small"
RMDir "$INSTDIR\lib\src\medium"
RMDir "$INSTDIR\lib\src\large"
-@@ -1328,12 +1301,9 @@ ${Section} Uninstall SECUNINSTALL
- RMDir "$INSTDIR\lib\src\mos6502"
- RMDir "$INSTDIR\lib\src\z80n"
+@@ -1367,12 +1340,9 @@ ${Section} Uninstall SECUNINSTALL
+ RMDir "$INSTDIR\lib\src\mos65c02"
+ RMDir "$INSTDIR\lib\src\s08-stack-auto"
RMDir "$INSTDIR\lib\src"
- RMDir "$INSTDIR\non-free\lib\src"
@@ -3644,9 +3644,9 @@ index 8309df1..c0cc223 100644
RMDir "$INSTDIR\lib\z80"
RMDir "$INSTDIR\lib\z180"
RMDir "$INSTDIR\lib\r2k"
-@@ -1361,15 +1331,12 @@ ${Section} Uninstall SECUNINSTALL
- RMDir "$INSTDIR\lib\mos6502"
- RMDir "$INSTDIR\lib\z80n"
+@@ -1403,15 +1373,12 @@ ${Section} Uninstall SECUNINSTALL
+ RMDir "$INSTDIR\lib\mos65c02"
+ RMDir "$INSTDIR\lib\s08-stack-auto"
RMDir "$INSTDIR\lib"
- RMDir "$INSTDIR\non-free\lib"
@@ -3660,7 +3660,7 @@ index 8309df1..c0cc223 100644
RMDir "$INSTDIR\include\asm\mcs51"
RMDir "$INSTDIR\include\asm\sm83"
RMDir "$INSTDIR\include\asm\ds390"
-@@ -1378,17 +1345,12 @@ ${Section} Uninstall SECUNINSTALL
+@@ -1420,17 +1387,12 @@ ${Section} Uninstall SECUNINSTALL
RMDir "$INSTDIR\include\asm"
RMDir "$INSTDIR\include\z180"
RMDir "$INSTDIR\include\pic14"
diff --git a/gnu/packages/patches/spdlog-fix-tests.patch b/gnu/packages/patches/spdlog-fix-tests.patch
deleted file mode 100644
index 13dffb309e..0000000000
--- a/gnu/packages/patches/spdlog-fix-tests.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Remove after next release and package update:
-https://github.com/gabime/spdlog/commit/2ee8bac78e6525a8ad9a9196e65d502ce390d83a
-
-From 2ee8bac78e6525a8ad9a9196e65d502ce390d83a Mon Sep 17 00:00:00 2001
-From: xvitaly <vitaly@easycoding.org>
-Date: Sun, 23 Jul 2023 10:15:25 +0200
-Subject: [PATCH] Added missing square bracket to fix the level_to_string_view
- test. (#2827)
-
----
- tests/test_misc.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/test_misc.cpp b/tests/test_misc.cpp
-index 9f3cb1744..6199641ff 100644
---- a/tests/test_misc.cpp
-+++ b/tests/test_misc.cpp
-@@ -43,7 +43,7 @@ TEST_CASE("log_levels", "[log_levels]")
- REQUIRE(log_info("Hello", spdlog::level::trace) == "Hello");
- }
-
--TEST_CASE("level_to_string_view", "[convert_to_string_view")
-+TEST_CASE("level_to_string_view", "[convert_to_string_view]")
- {
- REQUIRE(spdlog::level::to_string_view(spdlog::level::trace) == "trace");
- REQUIRE(spdlog::level::to_string_view(spdlog::level::debug) == "debug");
diff --git a/gnu/packages/patches/tinydir-fix-cbehave-test.patch b/gnu/packages/patches/tinydir-fix-cbehave-test.patch
index 84ecee12c2..1cad42c7a0 100644
--- a/gnu/packages/patches/tinydir-fix-cbehave-test.patch
+++ b/gnu/packages/patches/tinydir-fix-cbehave-test.patch
@@ -2,10 +2,22 @@ Make test work with upstream cbehave
(tinydir bundles a modified version)
diff --git a/tests/file_open_test.c b/tests/file_open_test.c
-index 3e659bc..9f6f88d 100644
+index 09b856e..92b13ca 100644
--- a/tests/file_open_test.c
+++ b/tests/file_open_test.c
-@@ -19,4 +19,7 @@ FEATURE(file_open, "File open")
+@@ -4,6 +4,11 @@
+ #include "cbehave.h"
+ #include "util.h"
+
++#define ASSERT(cond, ret) \
++if (!(cond)) {\
++ cbehave_feature_return(__FILE__, __LINE__, ret, _state); \
++ goto _feature_over; \
++}\
+
+ FEATURE(file_open, "File open")
+ SCENARIO("Open file in current directory")
+@@ -34,4 +39,7 @@ FEATURE(file_open, "File open")
SCENARIO_END
FEATURE_END
diff --git a/gnu/packages/patches/wlroots-hwdata-fallback.patch b/gnu/packages/patches/wlroots-hwdata-fallback.patch
new file mode 100644
index 0000000000..6468c7cbf3
--- /dev/null
+++ b/gnu/packages/patches/wlroots-hwdata-fallback.patch
@@ -0,0 +1,46 @@
+backend/drm: add hardcoded hwdata path fallback
+
+Add hardcoded fallback "/usr/share/hwdata/pnp.ids" as a
+temporary solution to get things working in Guix until
+hwdata ships with pkg-config file.
+
+diff --git a/backend/drm/meson.build b/backend/drm/meson.build
+index 6fcb2c15..ed95360a 100644
+--- a/backend/drm/meson.build
++++ b/backend/drm/meson.build
+@@ -1,8 +1,7 @@
+ hwdata = dependency(
+ 'hwdata',
+- required: 'drm' in backends,
++ required: false,
+ native: true,
+- not_found_message: 'Required for the DRM backend.',
+ )
+
+ libdisplay_info = dependency(
+@@ -19,15 +18,21 @@ libliftoff = dependency(
+ required: false,
+ )
+
+-if not (hwdata.found() and libdisplay_info.found() and features['session'])
++if hwdata.found()
++ hwdata_dir = hwdata.get_variable(pkgconfig: 'pkgdatadir')
++ pnp_ids = files(hwdata_dir / 'pnp.ids')
++else
++ pnp_ids = files('/usr/share/hwdata/pnp.ids')
++endif
++
++if not (libdisplay_info.found() and features['session'])
+ subdir_done()
+ endif
+
+-hwdata_dir = hwdata.get_variable(pkgconfig: 'pkgdatadir')
+ pnpids_c = custom_target(
+ 'pnpids.c',
+ output: 'pnpids.c',
+- input: files(hwdata_dir / 'pnp.ids'),
++ input: pnp_ids,
+ feed: true,
+ capture: true,
+ command: files('gen_pnpids.sh'),
+