summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCoprDistGit <copr-devel@lists.fedorahosted.org>2023-10-19 15:16:50 +0000
committerCoprDistGit <copr-devel@lists.fedorahosted.org>2023-10-19 15:16:50 +0000
commit26b77e1382b52f58a50460465a47d5b2050ef99b (patch)
treec8b79d6a28494589676022b7f41e52788a149c1d
parent90c8b037039fb0532f8e8c2758e1932c4fd9ecf8 (diff)
automatic import of Macaulay2
-rw-r--r--.gitignore24
-rw-r--r--Macaulay2-1.15-fplll.patch73
-rw-r--r--Macaulay2-1.15-optflags.patch21
-rw-r--r--Macaulay2-1.16-rightarrow.patch11
-rw-r--r--Macaulay2-1.16-ulimit.patch95
-rw-r--r--Macaulay2-1.17-configure.patch15
-rw-r--r--Macaulay2-1.17-default_make_targets.patch12
-rw-r--r--Macaulay2-1.18-lto.patch35
-rw-r--r--Macaulay2-1.18-no_gftables.patch11
-rw-r--r--Macaulay2-configure-c99.patch18
-rw-r--r--Macaulay2.spec1216
-rw-r--r--com.macaulay2.macaulay2.desktop7
-rw-r--r--com.macaulay2.macaulay2.metainfo.xml35
-rw-r--r--etags.sh7
-rw-r--r--linbox-1.6.3.patch35
-rw-r--r--mpfr-4.1.0.patch1747
-rw-r--r--sources24
17 files changed, 3386 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..51f0984 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,24 @@
+/4ti2-1.6.9.tar.gz
+/Csdp-6.2.0.tgz
+/M2-emacs-8615029.tar.gz
+/Macaulay2-1.21.tar.gz
+/Macaulay2-icons.tar.xz
+/TOPCOM-0.17.8.tar.gz
+/cddlib-094m.tar.gz
+/cohomCalg-0.32.tar.gz
+/factory-4.2.1.tar.gz
+/flint-2.8.4.tar.gz
+/frobby_v0.9.0.tar.gz
+/gfan0.6.2.tar.gz
+/givaro-4.1.1.tar.gz
+/glpk-4.59.tar.gz
+/gtest-1.10.0.tar.gz
+/lapack-3.9.0.tgz
+/libfplll-5.2.0.tar.gz
+/linbox-1.6.3.tar.gz
+/lrslib-071a.tar.gz
+/mathic-1.0.tar.gz
+/mathicgb-1.0.tar.gz
+/memtailor-1.0.tar.gz
+/mpfr-4.1.0.tar.xz
+/mpsolve-3.2.1.tar.gz
diff --git a/Macaulay2-1.15-fplll.patch b/Macaulay2-1.15-fplll.patch
new file mode 100644
index 0000000..c216db9
--- /dev/null
+++ b/Macaulay2-1.15-fplll.patch
@@ -0,0 +1,73 @@
+--- M2/Macaulay2/e/fplll-interface.cpp.orig 2020-05-22 08:58:09.000000000 -0600
++++ M2/Macaulay2/e/fplll-interface.cpp 2020-05-31 20:25:06.775601853 -0600
+@@ -1,10 +1,10 @@
+-#include "fplll-interface.hpp"
+-#include "mutablemat.hpp"
+-
+ #ifdef HAVE_FPLLL
+ #include <stddef.h>
+-#include <fplll.h>
+ #endif
++#include <fplll/fplll.h>
++
++#include "fplll-interface.hpp"
++#include "mutablemat.hpp"
+
+ bool fp_LLL(MutableMatrix *M, MutableMatrix *U, int strategy)
+ {
+@@ -15,15 +15,15 @@ bool fp_LLL(MutableMatrix *M, MutableMat
+ assert(U == NULL);
+ double delta = 0.99;
+ double eta = 0.51;
+- LLLMethod method = LM_WRAPPER;
+- FloatType floatType = FT_DEFAULT;
++ fplll::LLLMethod method = fplll::LM_WRAPPER;
++ fplll::FloatType floatType = fplll::FT_DEFAULT;
+ int precision = 0;
+- int flags = LLL_DEFAULT;
++ int flags = fplll::LLL_DEFAULT;
+
+ int ncols = static_cast<int>(M->n_rows());
+ int nrows = static_cast<int>(M->n_cols());
+
+- ZZ_mat<mpz_t> mat(nrows, ncols);
++ fplll::ZZ_mat<mpz_t> mat(nrows, ncols);
+
+ for (int i = 0; i < nrows; i++)
+ for (int j = 0; j < ncols; j++)
+@@ -31,21 +31,21 @@ bool fp_LLL(MutableMatrix *M, MutableMat
+ ring_elem a;
+ if (M->get_entry(j, i, a))
+ {
+- mpz_set(mat[i][j].getData(), a.get_mpz());
++ mpz_set(mat[i][j].get_data(), a.get_mpz());
+ }
+ }
+
+ int result =
+- lllReduction(mat, delta, eta, method, floatType, precision, flags);
++ lll_reduction(mat, delta, eta, method, floatType, precision, flags);
+
+ switch (result)
+ {
+- case RED_SUCCESS:
++ case fplll::RED_SUCCESS:
+ break;
+- case RED_BABAI_FAILURE:
++ case fplll::RED_BABAI_FAILURE:
+ ERROR("Error in fpLLL");
+ return 0;
+- case RED_LLL_FAILURE:
++ case fplll::RED_LLL_FAILURE:
+ ERROR("infinite loop in LLL");
+ return 0;
+ default:
+@@ -60,7 +60,7 @@ bool fp_LLL(MutableMatrix *M, MutableMat
+ for (int j = 0; j < ncols; j++)
+ for (int i = 0; i < nrows; i++)
+ {
+- mpz_set(a, mat[i][j].getData());
++ mpz_set(a, mat[i][j].get_data());
+ ring_elem b = globalZZ->from_int(a);
+ M->set_entry(j, i, b);
+ }
diff --git a/Macaulay2-1.15-optflags.patch b/Macaulay2-1.15-optflags.patch
new file mode 100644
index 0000000..d27c278
--- /dev/null
+++ b/Macaulay2-1.15-optflags.patch
@@ -0,0 +1,21 @@
+--- M2/configure.ac.orig 2020-05-22 08:58:09.000000000 -0600
++++ M2/configure.ac 2020-05-28 19:59:37.838647299 -0600
+@@ -308,12 +308,12 @@ fi
+ ]
+
+ if test "$OPTIMIZE" = yes
+-then CFLAGS="$CFLAGS -O2"
+- CXXFLAGS="$CXXFLAGS -O2"
+- FCFLAGS="$FCFLAGS -O2"
+-else CFLAGS="$CFLAGS -O0"
+- CXXFLAGS="$CXXFLAGS -O0"
+- FCFLAGS="$FCFLAGS -O0"
++then CFLAGS="-O2 $CFLAGS"
++ CXXFLAGS="-O2 $CXXFLAGS"
++ FCFLAGS="-O2 $FCFLAGS"
++else CFLAGS="-O0 $CFLAGS"
++ CXXFLAGS="-O0 $CXXFLAGS"
++ FCFLAGS="-O0 $FCFLAGS"
+ fi
+
+ AC_SUBST(GCCVERSION)
diff --git a/Macaulay2-1.16-rightarrow.patch b/Macaulay2-1.16-rightarrow.patch
new file mode 100644
index 0000000..1c4abd5
--- /dev/null
+++ b/Macaulay2-1.16-rightarrow.patch
@@ -0,0 +1,11 @@
+--- M2/Macaulay2/packages/Macaulay2Doc/overview_modules.m2.orig 2020-07-11 05:04:29.000000000 -0600
++++ M2/Macaulay2/packages/Macaulay2Doc/overview_modules.m2 2020-07-12 19:27:28.520963206 -0600
+@@ -347,7 +347,7 @@ document {
+ },
+ TEX "Macaulay2 represents each module (at least conceptually) as a subquotient module, that is, a submodule of
+ a quotient of an ambient free module. A subquotient module is determined by two
+- matrices $f : R^m \\rightarrow{} R^n$ and $g : R^p \\rightarrow{} R^n$.
++ matrices $f : R^m \\rightarrow R^n$ and $g : R^p \\rightarrow R^n$.
+ The {\\em subquotient module} with generators $f$ and relations $g$ is by definition the module
+ $M = ((image f) + (image g))/(image g)$.",
+ PARA{},
diff --git a/Macaulay2-1.16-ulimit.patch b/Macaulay2-1.16-ulimit.patch
new file mode 100644
index 0000000..900bafe
--- /dev/null
+++ b/Macaulay2-1.16-ulimit.patch
@@ -0,0 +1,95 @@
+--- M2/libraries/Makefile.library.in.orig 2022-05-13 20:58:36.000000000 -0600
++++ M2/libraries/Makefile.library.in 2022-05-23 06:33:19.410991764 -0600
+@@ -238,10 +238,10 @@ distclean: package-distclean
+ clean::; rm -rf .patched* .untarred* $(LIBNAME)* .checked* .compiled* .configured* .installed* .untarred2* diffs tmp $(UNTARDIR) $(OLDUNTARDIR)
+ distclean: clean ; rm -rf Makefile
+
+-SLIMIT ?= 8192
+-TLIMIT ?= 100
+-MLIMIT ?= 400000
+-VLIMIT ?= 400000
++SLIMIT ?= 16384
++TLIMIT ?= 200
++MLIMIT ?= 800000
++VLIMIT ?= 800000
+ LIMIT := :
+ ifeq (@ULIMIT_T@,yes)
+ LIMIT += ; ulimit -t $(TLIMIT)
+--- M2/Macaulay2/m2/basictests/Makefile.in.orig 2022-05-13 20:58:36.000000000 -0600
++++ M2/Macaulay2/m2/basictests/Makefile.in 2022-05-23 06:33:19.417991753 -0600
+@@ -22,17 +22,17 @@ $(TESTRESULTS) : @pre_exec_prefix@/bin/M
+ ARGS := --silent -q --stop --no-core -e 'srcdir = "@srcdir@/"'
+
+ ifeq "@DEBUG@" "no"
+-TLIMIT ?= 20
+-MLIMIT ?= 600000
+-VLIMIT ?= 600000
++TLIMIT ?= 40
++MLIMIT ?= 1200000
++VLIMIT ?= 1200000
+ else
+-TLIMIT ?= 60
+-MLIMIT ?= 700000
+-VLIMIT ?= 700000
++TLIMIT ?= 120
++MLIMIT ?= 1400000
++VLIMIT ?= 1400000
+ endif
+
+ # make the stack limit always the same as it would be under MacOS
+-SLIMIT ?= 8192
++SLIMIT ?= 16384
+
+ LIMIT :=
+ ifeq (@ULIMIT_T@,yes)
+--- M2/Macaulay2/tests/ComputationsBook/Makefile.chapter.in.orig 2022-05-13 20:58:36.000000000 -0600
++++ M2/Macaulay2/tests/ComputationsBook/Makefile.chapter.in 2022-05-23 06:33:19.424991742 -0600
+@@ -15,16 +15,16 @@ diff:
+
+ LIMIT :=
+ ifeq (@ULIMIT_T@,yes)
+-LIMIT += ulimit -t 1200 ;
++LIMIT += ulimit -t 2400 ;
+ endif
+ ifeq (@ULIMIT_V@,yes)
+-LIMIT += ulimit -v 1600000 ;
++LIMIT += ulimit -v 3200000 ;
+ endif
+ ifeq (@ULIMIT_M@,yes)
+-LIMIT += ulimit -m 800000 ;
++LIMIT += ulimit -m 1600000 ;
+ endif
+ ifeq (@ULIMIT_S@,yes)
+-LIMIT += ulimit -s 8192 ;
++LIMIT += ulimit -s 16384 ;
+ endif
+
+
+--- M2/Macaulay2/tests/Makefile.test.in.orig 2022-05-13 20:58:36.000000000 -0600
++++ M2/Macaulay2/tests/Makefile.test.in 2022-05-23 06:33:19.431991731 -0600
+@@ -6,18 +6,18 @@ DEFERRED ?= no
+
+ DOTS ?= ../..
+ ifeq "@DEBUG@" "no"
+-TLIMIT ?= 90
++TLIMIT ?= 180
+ # one test doesn't work with only 150MB RAM, ext-total.m2, on a 64 bit intel machine:
+-MLIMIT ?= 800000
+-VLIMIT ?= 2000000
++MLIMIT ?= 1600000
++VLIMIT ?= 4000000
+ else
+ # give the debug version more time and space
+-TLIMIT ?= 140
+-MLIMIT ?= 1200000
+-VLIMIT ?= 2000000
++TLIMIT ?= 280
++MLIMIT ?= 2400000
++VLIMIT ?= 4000000
+ endif
+ # make the stack limit always the same as it would be under MacOS
+-SLIMIT ?= 8192
++SLIMIT ?= 16384
+
+ LIMIT :=
+ ifeq (@ULIMIT_T@,yes)
diff --git a/Macaulay2-1.17-configure.patch b/Macaulay2-1.17-configure.patch
new file mode 100644
index 0000000..8086b88
--- /dev/null
+++ b/Macaulay2-1.17-configure.patch
@@ -0,0 +1,15 @@
+--- M2/configure.ac.orig 2021-01-12 14:20:55.509886490 -0700
++++ M2/configure.ac 2021-01-12 14:21:55.866785423 -0700
+@@ -252,9 +252,9 @@ AC_MSG_NOTICE([checking for C compiler f
+
+ dnl always compile with "-g", so we can debug even optimized versions
+ if test "$GCC" = yes
+-then CFLAGS="$CFLAGS -g3"
+- CXXFLAGS="$CXXFLAGS -g3"
+- LDFLAGS="$LDFLAGS -g3"
++then CFLAGS="$CFLAGS -g"
++ CXXFLAGS="$CXXFLAGS -g"
++ LDFLAGS="$LDFLAGS -g"
+ else CFLAGS="$CFLAGS -g"
+ CXXFLAGS="$CXXFLAGS -g"
+ LDFLAGS="$LDFLAGS -g"
diff --git a/Macaulay2-1.17-default_make_targets.patch b/Macaulay2-1.17-default_make_targets.patch
new file mode 100644
index 0000000..fb6da94
--- /dev/null
+++ b/Macaulay2-1.17-default_make_targets.patch
@@ -0,0 +1,12 @@
+--- M2/Macaulay2/Makefile.in.orig 2022-05-23 06:34:31.896886749 -0600
++++ M2/Macaulay2/Makefile.in 2022-05-23 06:35:19.380825646 -0600
+@@ -3,8 +3,7 @@
+ VPATH = @srcdir@
+ include ../include/config.Makefile
+ all: @pre_docdir@/COPYING-GPL-2 @pre_docdir@/COPYING-GPL-3 @pre_docdir@/README @pre_docdir@/LAYOUT
+-SUBDIRS = util c d e system bin m2 man packages editors \
+- $(if $(filter html, @DOCUMENTATION@), html-check-links) tests
++SUBDIRS = util c d e system bin m2 man packages editors tests
+
+ define do-in-subdirs
+ $(foreach d,$(SUBDIRS),
diff --git a/Macaulay2-1.18-lto.patch b/Macaulay2-1.18-lto.patch
new file mode 100644
index 0000000..becd01c
--- /dev/null
+++ b/Macaulay2-1.18-lto.patch
@@ -0,0 +1,35 @@
+--- M2/Macaulay2/c/compat.h.orig 2021-06-13 14:30:17.341325747 -0600
++++ M2/Macaulay2/c/compat.h 2021-06-14 06:52:52.648631798 -0600
+@@ -2,7 +2,7 @@
+
+ #ifndef __cplusplus
+ #undef bool
+-typedef char bool;
++typedef _Bool bool;
+ #endif
+
+ extern char posfmt[];
+--- M2/Macaulay2/d/types.h.orig 2021-06-04 17:33:04.000000000 -0600
++++ M2/Macaulay2/d/types.h 2021-06-13 14:30:27.804335244 -0600
+@@ -37,6 +37,10 @@
+ # define LONGJUMP(env) longjmp(env, 1)
+ #endif
+
++#ifdef __cplusplus
++extern "C" {
++#endif
++
+ struct ArgCell
+ {
+ int argc, envc;
+@@ -50,6 +54,10 @@ struct JumpCell
+ bool is_set;
+ };
+
++#ifdef __cplusplus
++}
++#endif
++
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
diff --git a/Macaulay2-1.18-no_gftables.patch b/Macaulay2-1.18-no_gftables.patch
new file mode 100644
index 0000000..17ebc01
--- /dev/null
+++ b/Macaulay2-1.18-no_gftables.patch
@@ -0,0 +1,11 @@
+--- M2/configure.ac.orig 2021-06-13 14:28:15.330215045 -0600
++++ M2/configure.ac 2021-06-13 14:28:49.449246006 -0600
+@@ -667,7 +667,7 @@ AC_SUBST(BUILTLIBS)
+ AC_SUBST(LIBLIST, " atomic_ops gc gdbm gmp mpir mpfr mpfi readline ntl flint factory lapack mpsolve frobby glpk cddlib fplll linbox gtest ")
+ # The list LIBLIST is the list of libraries that might be used and linked into M2.
+
+-AC_SUBST(PROGLIST, "4ti2 gfan normaliz csdp nauty cddplus lrslib gftables topcom cohomcalg")
++AC_SUBST(PROGLIST, "4ti2 gfan normaliz csdp nauty cddplus lrslib topcom cohomcalg")
+ # The list PROGLIST is the list of programs and libraries for them that are distributed with M2.
+ # Initially, we offer no option for not compiling some of them.
+
diff --git a/Macaulay2-configure-c99.patch b/Macaulay2-configure-c99.patch
new file mode 100644
index 0000000..2cdc1c6
--- /dev/null
+++ b/Macaulay2-configure-c99.patch
@@ -0,0 +1,18 @@
+Avoid an implicit int, which was removed from the C99 revision of the
+C language. This prevents altering the outcome of the check with
+future compilers.
+
+Submitted upstream: <https://github.com/Macaulay2/M2/pull/2814>
+
+diff -ur M2-release-1.21.orig/M2/configure.ac M2-release-1.21/M2/configure.ac
+--- M2-release-1.21.orig/M2/configure.ac 2023-04-15 19:52:33.823153026 +0200
++++ M2-release-1.21/M2/configure.ac 2023-04-15 20:00:57.701024623 +0200
+@@ -1719,7 +1719,7 @@
+ #ifdef HAVE_NETDB_H
+ #include <netdb.h>
+ #endif
+- main() {
++ int main(void) {
+ struct addrinfo *addr;
+ return 0 != getaddrinfo("1.2.3.4", "80", 0, &addr) ? 99 : 0 ;
+ }
diff --git a/Macaulay2.spec b/Macaulay2.spec
new file mode 100644
index 0000000..40eea01
--- /dev/null
+++ b/Macaulay2.spec
@@ -0,0 +1,1216 @@
+# BUNDLING NOTES
+# Macaulay2's memory management scheme requires close cooperation with libgc,
+# and some of the supporting libraries must be compiled with special options to
+# accomplish this. In particular, Macaulay2 needs:
+# - mathicgb configured --without-tbb
+# - mpfr configured with --disable-thread-safe
+# - flint linked with the GC-enabled mpfr
+# - factory (from Singular) configured with --disable-omalloc --enable-streamio
+# and linked with the flint that is linked with the GC-enabled mpfr
+# Since the main Fedora packages are not built in this way, we are forced to
+# bundle these packages to avoid random GC-related crashes. The packages
+# memtailor and mathic, which sit underneath mathicgb, must also be bundled or
+# we get random GC-related crashes for an as yet undiagnosed reason.
+#
+# We have to use the static versions of the libfplll and givaro libraries.
+# They have global objects whose constructors run before GC is initialized.
+# If we allow the shared libraries to be unloaded, which happens as a normal
+# part of Macaulay2's functioning, then GC tries to free objects it did not
+# allocate, which leads to a segfault.
+#
+# We have to bundle the linbox package. It has global constructors that cause
+# the same problem as libfplll.
+
+%global m2url https://github.com/Macaulay2/M2
+
+%global emacscommit 86150290208bd9e468511b4b69a187ce870f303e
+%global emacsurl https://github.com/Macaulay2/M2-emacs
+%global emacsshort %(cut -b -7 <<< %{emacscommit})
+
+# Address randomization interferes with Macaulay2's memory management scheme,
+# and linking with -z now breaks configure.
+%undefine _hardened_build
+
+## define to create -common subpkg
+#global common 1
+#if 0%%{?fedora}
+# use system normaliz
+%global system_normaliz 1
+#endif
+%global ISSUE %{?fedora:Fedora-%{fedora}}%{?rhel:RedHatEnterprise-%{rhel}}
+%global M2_machine %{_target_cpu}-Linux-%{ISSUE}
+
+# The examples contain some python files which should not be byte compiled
+%global _python_bytecompile_extra 0
+
+# Starting with GCC 12, Macaulay2 segfaults during the build on all
+# architectures when LTO is enabled. (With GCC 11, s390x did this, but the
+# other architectures did not.) Until somebody can figure out what is going
+# on, disable LTO universally.
+%define _lto_cflags %{nil}
+
+Summary: System for algebraic geometry and commutative algebra
+Name: Macaulay2
+Version: 1.21
+Release: 6%{?dist}
+
+# GPL-2.0-only OR GPL-3.0-only:
+# - the project as a whole
+# - factory (bundled)
+# GPL-1.0-or-later:
+# - Macaulay2/packages/FormalGroupLaws.m2
+# - Macaulay2/packages/WeylGroups.m2
+# GPL-2.0-only:
+# - Macaulay2/packages/ModuleDeformations.m2
+# - Macaulay2/packages/QuillenSuslin.m2
+# - Macaulay2/packages/Visualize.m2
+# GPL-2.0-or-later:
+# - mathicgb (bundled)
+# - Macaulay2/e/bibasis
+# - Macaulay2/m2/computations.m2
+# - Macaulay2/packages/AlgebraicSplines.m2
+# - Macaulay2/packages/BIBasis.m2
+# - Macaulay2/packages/Binomials.m2
+# - Macaulay2/packages/Chordal.m2
+# - Macaulay2/packages/Cremona.m2
+# - Macaulay2/packages/Cyclotomic.m2
+# - Macaulay2/packages/EdgeIdeals.m2
+# - Macaulay2/packages/FourierMotzkin.m2
+# - Macaulay2/packages/GKMVarieties.m2
+# - Macaulay2/packages/GradedLieAlgebras.m2
+# - Macaulay2/packages/GraphicalModels*
+# - Macaulay2/packages/Graphics.m2
+# - Macaulay2/packages/Graphs.m2
+# - Macaulay2/packages/GroebnerWalk.m2
+# - Macaulay2/packages/HyperplaneArrangements.m2
+# - Macaulay2/packages/InvariantRing*
+# - Macaulay2/packages/KustinMiller.m2
+# - Macaulay2/packages/LieTypes.m2
+# - Macaulay2/packages/MonomialAlgebras.m2
+# - Macaulay2/packages/MultiprojectiveVarieties.m2
+# - Macaulay2/packages/NAGtypes.m2
+# - Macaulay2/packages/Nauty*
+# - Macaulay2/packages/Normaliz.m2
+# - Macaulay2/packages/NumericalAlgebraicGeometry.m2
+# - Macaulay2/packages/PackageCitations.m2
+# - Macaulay2/packages/Posets.m2
+# - Macaulay2/packages/RationalPoints*
+# - Macaulay2/packages/ResLengthThree.m2
+# - Macaulay2/packages/ResolutionsOfStanleyReisnerRings.m2
+# - Macaulay2/packages/Resultants.m2
+# - Macaulay2/packages/RunExternalM2.m2
+# - Macaulay2/packages/SLPexpressions.m2
+# - Macaulay2/packages/SLnEquivariantMatrices.m2
+# - Macaulay2/packages/SimplicialDecomposability.m2
+# - Macaulay2/packages/SparseResultants.m2
+# - Macaulay2/packages/SpecialFanoFourfolds.m2
+# - Macaulay2/packages/StatGraphs.m2
+# - Macaulay2/packages/TriangularSets.m2
+# - Macaulay2/packages/VectorFields.m2
+# GPL-3.0-or-later:
+# - normaliz, when it is bundled
+# - Macaulay2/e/mpreal.h
+# - Macaulay2/packages/BettiCharacters.m2
+# - Macaulay2/packages/CodingTheory.m2
+# - Macaulay2/packages/FGLM.m2
+# - Macaulay2/packages/HighestWeights*
+# - Macaulay2/packages/Jets.m2
+# - Macaulay2/packages/LocalRings
+# - Macaulay2/packages/MonomialIntegerPrograms.m2
+# - Macaulay2/packages/MultiplierIdeals.m2
+# - Macaulay2/packages/NormalToricVarieties.m2
+# - Macaulay2/packages/NumericSolutions.m2
+# - Macaulay2/packages/OldPolyhedra.m2
+# - Macaulay2/packages/OldToricVectorBundles.m2
+# - Macaulay2/packages/PieriMaps.m2
+# - Macaulay2/packages/Polyhedra.m2
+# - Macaulay2/packages/PositivityToricBundles.m2
+# - Macaulay2/packages/SchurRings.m2
+# - Macaulay2/packages/SchurVeronese.m2
+# - Macaulay2/packages/Simplicial*
+# - Macaulay2/packages/SpectralSequences.m2
+# - Macaulay2/packages/TensorComplexes.m2
+# - Macaulay2/packages/ToricTopology.m2
+# - Macaulay2/packages/ToricVectorBundles.m2
+# - Macaulay2/packages/VersalDeformations.m2
+# LGPL-2.0-or-later:
+# - flint (bundled)
+# - linbox (bundled)
+# - mathic (bundled)
+# LGPL-3.0-or-later:
+# - mpfr (bundled)
+# Apache-2.0:
+# - Macaulay2/packages/OpenMath.m2
+# - Macaulay2/packages/SCSCP.m2
+# BSD-3-Clause:
+# - memtailor (bundled)
+# MIT:
+# - Macaulay2/packages/Visualize/css
+# - Macaulay2/packages/Visualize/js
+# MIT AND OFL-1.1-RFN:
+# - Macaulay2/packages/Style
+# LicenseRef-Fedora-Public-Domain:
+# - Macaulay2/e/localring*
+# - Macaulay2/e/mutablecomplex*
+# - Macaulay2/e/NAG*
+# - Macaulay2/e/SLP*
+# - Macaulay2/packages/Depth.m2
+# - Macaulay2/packages/Divisor.m2
+# - Macaulay2/packages/FastMinors.m2
+# - Macaulay2/packages/LatticePolytopes.m2
+# - Macaulay2/packages/NoetherNormalization.m2
+# - Macaulay2/packages/RationalMaps.m2
+# - Macaulay2/packages/SectionRing.m2
+License: (GPL-2.0-only OR GPL-3.0-only) AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-or-later AND LGPL-2.0-or-later AND LGPL-3.0-or-later AND Apache-2.0 AND BSD-3-Clause AND MIT AND OFL-1.1-RFN AND LicenseRef-Fedora-Public-Domain
+URL: https://macaulay2.com/
+%if 0%{?snap:1}
+Source0: %{name}-%{version}-%{snap}.tar.xz
+%else
+Source0: %{m2url}/archive/release-%{version}/%{name}-%{version}.tar.gz
+%endif
+Source1: %{emacsurl}/tarball/%{emacscommit}/M2-emacs-%{emacsshort}.tar.gz
+
+# Various sizes of the planets icon from macaulay2.com. See README.icons in
+# the tar file for details on how these icons were created.
+Source10: Macaulay2-icons.tar.xz
+Source11: com.macaulay2.macaulay2.desktop
+Source12: com.macaulay2.macaulay2.metainfo.xml
+Source20: etags.sh
+
+## BUNDLED code
+# Normaliz must sometimes be bundled due to version differences
+%if ! %system_normaliz
+%global normalizver 3.9.2
+Source100: http://www.math.uiuc.edu/Macaulay2/Downloads/OtherSourceCode/normaliz-%{normalizver}.tar.gz
+Provides: bundled(normaliz) = %{normalizver}
+%endif
+
+# MPFR is bundled because it must be built with different threading options
+%global mpfrver 4.1.0
+Source101: http://www.mpfr.org/mpfr-%{mpfrver}/mpfr-%{mpfrver}.tar.xz
+Provides: bundled(mpfr) = %{mpfrver}
+
+# FLINT is bundled because it must be linked with the specially-built MPFR
+%global flintver 2.8.4
+Source102: http://www.flintlib.org/flint-%{flintver}.tar.gz
+Provides: bundled(flint) = %{flintver}
+
+# FACTORY is bundled because it must be built with special options
+%global factoryver 4.2.1
+Source103: http://faculty.math.illinois.edu/Macaulay2/Downloads/OtherSourceCode/factory-%{factoryver}.tar.gz
+Provides: bundled(factory) = %{factoryver}
+
+# MATHICGB is bundled because it must be built with different threading options
+%global mathicgbver 1.0
+%global mathicgbcommit f3a05da1494843b5e4e7baa18e644cc6f32baeca
+Source104: https://github.com/Macaulay2/mathicgb/tarball/%{mathicgbcommit}/mathicgb-%{mathicgbver}.tar.gz
+Provides: bundled(mathicgb) = %{mathicgbver}
+
+# GTEST is bundled because MATHICGB refuses to build otherwise
+%global gtestver 1.10.0
+Source105: https://faculty.math.illinois.edu/Macaulay2/Downloads/OtherSourceCode/gtest-%{gtestver}.tar.gz
+
+# MEMTAILOR is bundled because it causes garbage collector crashes otherwise
+%global memtailorver 1.0
+%global memtailorcommit 95dbac776c475f4b1c2b08a8e8c6def14c8aaf9a
+Source106: https://github.com/Macaulay2/memtailor/tarball/%{memtailorcommit}/memtailor-%{memtailorver}.tar.gz
+Provides: bundled(memtailor) = %{memtailorver}
+
+# MATHIC is bundled because it causes garbage collector crashes otherwise
+%global mathicver 1.0
+%global mathiccommit 18ff8de1f5b5102ef291e450522c4930cf9eb7f2
+Source107: https://github.com/Macaulay2/mathic/tarball/%{mathiccommit}/mathic-%{mathicver}.tar.gz
+Provides: bundled(mathic) = %{mathicver}
+
+# LINBOX is bundled because it introduces static global objects
+%global linboxver 1.6.3
+Source108: https://github.com/linbox-team/linbox/releases/download/v%{linboxver}/linbox-%{linboxver}.tar.gz
+Provides: bundled(linbox) = %{linboxver}
+
+## PATCHES FOR BUNDLED code
+# Work around an ambiguous overload on 32-bit platforms
+Source200: linbox-1.6.3.patch
+# MPFR bug fixes from mpfr upstream.
+Source201: mpfr-4.1.0.patch
+
+## FAKE library tarballs that convince Macaulay2 to use the system versions
+Source300: frobby_v0.9.0.tar.gz
+Source301: cddlib-094m.tar.gz
+Source302: lapack-3.9.0.tgz
+Source303: 4ti2-1.6.9.tar.gz
+Source304: libfplll-5.2.0.tar.gz
+Source305: gfan0.6.2.tar.gz
+Source306: givaro-4.1.1.tar.gz
+Source307: lrslib-071a.tar.gz
+Source308: TOPCOM-0.17.8.tar.gz
+Source309: cohomCalg-0.32.tar.gz
+Source310: glpk-4.59.tar.gz
+Source311: Csdp-6.2.0.tgz
+Source312: mpsolve-3.2.1.tar.gz
+
+# let Fedora optflags override the defaults
+Patch0: %{name}-1.15-optflags.patch
+# give the build a little more time and space than upstream permits
+Patch1: %{name}-1.16-ulimit.patch
+# drop 'tests' from default make target
+Patch2: %{name}-1.17-default_make_targets.patch
+# disable check for gftables
+Patch3: %{name}-1.18-no_gftables.patch
+# adapt to libfplll 5.2.1
+Patch4: %{name}-1.15-fplll.patch
+# do not override the debug level
+Patch5: %{name}-1.17-configure.patch
+# Fix "error: in conversion to html, unknown TeX control sequence(s): \rightarrow"
+Patch6: %{name}-1.16-rightarrow.patch
+# Fix LTO warnings about mismatched declarations and definitions
+Patch7: %{name}-1.18-lto.patch
+Patch8: Macaulay2-configure-c99.patch
+
+BuildRequires: 4ti2
+BuildRequires: appstream
+BuildRequires: autoconf
+BuildRequires: autoconf-archive
+BuildRequires: bison
+BuildRequires: boost-devel
+BuildRequires: chrpath
+BuildRequires: cohomCalg
+BuildRequires: csdp-tools
+BuildRequires: desktop-file-utils
+%if 0%{?fedora}
+BuildRequires: doxygen-latex
+%else
+BuildRequires: doxygen
+%endif
+BuildRequires: eigen3-static
+# etags
+BuildRequires: emacs
+BuildRequires: factory-gftables
+BuildRequires: flex
+BuildRequires: gawk
+BuildRequires: gcc-c++
+BuildRequires: gcc-gfortran
+BuildRequires: gdb
+BuildRequires: gdbm-devel
+BuildRequires: gettext-devel
+BuildRequires: gfan
+BuildRequires: git-core
+BuildRequires: givaro-static
+BuildRequires: glpk-devel
+BuildRequires: iml-devel
+BuildRequires: info
+BuildRequires: libfplll-static
+BuildRequires: libfrobby-devel
+BuildRequires: libgfan-devel
+BuildRequires: libnormaliz-devel >= 3.9.2
+BuildRequires: libtool
+BuildRequires: lrslib-devel
+BuildRequires: lrslib-utils
+BuildRequires: make
+BuildRequires: mpsolve-devel
+BuildRequires: nauty
+BuildRequires: normaliz
+BuildRequires: ntl-devel
+BuildRequires: pari-devel
+BuildRequires: pkgconfig(atomic_ops)
+BuildRequires: pkgconfig(bdw-gc) >= 8.0.4
+BuildRequires: pkgconfig(cddlib)
+BuildRequires: pkgconfig(expat)
+BuildRequires: pkgconfig(fflas-ffpack)
+BuildRequires: pkgconfig(flexiblas)
+BuildRequires: pkgconfig(gmp)
+BuildRequires: pkgconfig(gtest)
+BuildRequires: pkgconfig(libffi)
+BuildRequires: pkgconfig(libxml-2.0)
+BuildRequires: pkgconfig(m4ri)
+BuildRequires: pkgconfig(m4rie)
+BuildRequires: pkgconfig(libmariadb)
+BuildRequires: pkgconfig(mpfi)
+BuildRequires: pkgconfig(nauty)
+BuildRequires: pkgconfig(ncurses)
+BuildRequires: pkgconfig(qd)
+BuildRequires: pkgconfig(readline)
+BuildRequires: pkgconfig(tbb)
+BuildRequires: pkgconfig(tinyxml2)
+BuildRequires: polymake
+BuildRequires: python3-devel
+BuildRequires: texinfo
+BuildRequires: time
+BuildRequires: TOPCOM
+BuildRequires: transfig
+BuildRequires: valgrind
+
+Requires: 4ti2
+Requires: cohomCalg
+Requires: csdp-tools
+Requires: emacs-filesystem
+Requires: factory-gftables
+Requires: gfan
+Requires: hicolor-icon-theme
+Requires: lrslib-utils
+Requires: nauty
+Requires: normaliz
+Requires: TOPCOM
+
+# M2-help
+Requires: xdg-utils
+
+Recommends: mathicgb
+
+%if 0%{?common}
+Requires: %{name}-common = %{version}-%{release}
+%else
+Obsoletes: Macaulay2-common < %{version}-%{release}
+Provides: Macaulay2-common = %{version}-%{release}
+%endif
+Obsoletes: Macaulay2-doc < %{version}-%{release}
+Provides: Macaulay2-doc = %{version}-%{release}
+Obsoletes: Macaulay2-emacs < %{version}-%{release}
+Provides: Macaulay2-emacs = %{version}-%{release}
+
+Provides: macaulay2 = %{version}-%{release}
+
+# Macaulay2 no longer builds successfully on 32-bit platforms
+# https://bugzilla.redhat.com/show_bug.cgi?id=1874318
+ExcludeArch: %{ix86} %{arm}
+
+# Do not advertise the bundled mpfr
+%global __provides_exclude libmpfr.so*
+
+
+%description
+Macaulay 2 is a new software system devoted to supporting research in
+algebraic geometry and commutative algebra written by Daniel R. Grayson
+and Michael E. Stillman
+
+%package common
+Summary: Common files for %{name}
+Requires: %{name} = %{version}-%{release}
+BuildArch: noarch
+%description common
+%{summary}.
+
+
+%prep
+%setup -q -n M2-release-%{version}/M2
+%setup -q -n M2-release-%{version}/M2 -T -D -a 10
+tar -C Macaulay2/editors/emacs --strip-components=1 -xzf %{SOURCE1}
+
+install -p -m755 %{SOURCE20} ./etags
+
+## bundled code
+%if ! %system_normaliz
+install -p -m644 %{SOURCE100} BUILD/tarfiles/
+%endif
+install -p -m644 %{SOURCE101} %{SOURCE102} %{SOURCE103} %{SOURCE105} \
+ %{SOURCE108} BUILD/tarfiles/
+sed -i 's/\(VERSION = \).*/\1%{mpfrver}/' libraries/mpfr/Makefile.in
+sed -e 's/\(VERSION = \).*/\1%{linboxver}/' \
+ -e 's/^#\(PATCHFILE\)/\1/' \
+ -e 's,--with-gmp.*,GIVARO_CFLAGS=-I$(LIBRARIESDIR) GIVARO_LIBS="%{_libdir}/libgivaro.a",' \
+ -i libraries/linbox/Makefile.in
+tar -C submodules/mathicgb -xf %{SOURCE104} --strip-components=1
+tar -C submodules/memtailor -xf %{SOURCE106} --strip-components=1
+tar -C submodules/mathic -xf %{SOURCE107} --strip-components=1
+
+## patches for bundled code
+sed -e 's,--with-blas,&=%{_includedir}/flexiblas --with-ntl,' \
+ -e 's,2\.6\.0,%{flintver},' \
+ -i libraries/flint/Makefile.in
+cp -p %{SOURCE200} libraries/linbox/patch-%{linboxver}
+sed -e '/^TARFILE =/iPATCHFILE = @abs_srcdir@/patch-$(VERSION)' \
+ -i libraries/mpfr/Makefile.in
+cp -p %{SOURCE201} libraries/mpfr/patch-%{mpfrver}
+
+## fake library tarballs
+install -p -m644 %{SOURCE300} %{SOURCE301} %{SOURCE302} %{SOURCE303} \
+ %{SOURCE304} %{SOURCE305} %{SOURCE306} %{SOURCE307} %{SOURCE308} \
+ %{SOURCE309} %{SOURCE310} %{SOURCE311} %{SOURCE312} BUILD/tarfiles/
+sed -i '/PRECONFIGURE/d' libraries/{4ti2,cddlib,givaro,normaliz,topcom}/Makefile.in
+sed -i 's/VERSION = 4\.0\.4/VERSION = 5.2.0/;/PATCHFILE/d' libraries/fplll/Makefile.in
+sed -i '/PATCHFILE/d' libraries/{csdp,frobby,gfan,givaro,mpsolve,normaliz,topcom}/Makefile.in
+sed -i '/INSTALLCMD/,/stdinc/d' libraries/frobby/Makefile.in
+sed -i 's,install \(lib.*\.a\),ln -s %{_libdir}/\1,' libraries/lapack/Makefile.in
+
+## fake givaro submodule
+tar -C submodules/givaro --strip-components=1 -xzf %{SOURCE306}
+
+%patch0 -p1 -b .optflags
+%patch1 -p1 -b .ulimit
+%patch2 -p1 -b .default_make_targets
+%patch3 -p1 -b .no_gftables
+# factory-gftables symlink
+mkdir -p BUILD/%{_target_platform}/usr-dist/common/share/Macaulay2/Core
+ln -s %{_datadir}/factory \
+ BUILD/%{_target_platform}/usr-dist/common/share/Macaulay2/Core/factory
+%patch4 -p1 -b .fplll
+%patch5 -p1 -b .configure
+%patch6 -p1 -b .rightarrow
+%patch7 -p1 -b .lto
+%patch8 -p2 -b .configure-c99
+
+# repeatable builds: inject a node name
+sed -i 's,`uname -n`,build.fedoraproject.org,' configure.ac
+
+# gdb is used during the build; let it autoload some files
+if [ "$HOME" = "/builddir" ]; then
+ echo "set auto-load safe-path /" > /builddir/.gdbinit
+fi
+
+# Use, but don't build, cddlib, fflas-ffpack, and gc. Use the static versions
+# of libfplll and givaro. Link with flexiblas instead of the reference blas
+# and lapack. Fix typos.
+sed -e 's/BUILD_cddlib=yes/BUILD_cddlib=no/' \
+ -e 's/BUILD_gc=yes/BUILD_gc=no/' \
+ -e 's/BUILD_fflas_ffpack=yes/BUILD_fflas_ffpack=no/' \
+ -e 's,-lfplll,%{_libdir}/libfplll.a -lqd,' \
+ -e 's,`\$PKG_CONFIG --libs givaro`,%{_libdir}/libgivaro.a,' \
+ -e 's,-lgivaro,%{_libdir}/libgivaro.a,' \
+ -e 's,-llapack -lrefblas,-lflexiblas,' \
+ -e 's,\$added_fclibs != yes,"$added_fclibs" != yes,' \
+ -i configure.ac
+
+# We call it flint. Upstream calls it flint2.
+sed -i 's/\(LIBNAME = flint\)2/\1/' libraries/flint/Makefile.in
+
+# Cannot do git submodule operations on a koji builder
+sed -i 's/git-checkout-in-\$1, git-checkout-warning-for-\$1//' GNUmakefile.in
+
+# (re)generate configure
+autoreconf -fi .
+
+
+%build
+%ifarch s390x
+# For as yet unknown reasons, when this package is built with optimization
+# level -O2 on s390x, the mathicgb code accesses out-of-bounds array elements.
+# In addition, valgrind shows accesses to uninitialized elements of arrays
+# that should not have any uninitialized elements. The code eventually
+# segfaults. When built with -O1 and LTO, the linker segfaults. Until we can
+# diagnose and fix these issues, we build with -O1 and without LTO on s390x.
+%define _lto_cflags %{nil}
+optflags=$(sed 's/-O2/-O/g' <<< "%{build_cflags}")
+%else
+optflags="%{build_cflags}"
+%endif
+
+# Possible bug in Macaulay2 1.19: the memtailor, mathic, and mathicgb headers
+# cannot be found. We work around this here. See if the problem has been fixed
+# in later versions.
+CPPFLAGS="-I$PWD/submodules/memtailor/src -I$PWD/submodules/mathic/src -I$PWD/submodules/mathicgb/src"
+
+## configure macro currently broken, due to some odd prefix-checks. probably fixable -- Rex
+mkdir -p BUILD/%{_target_platform}
+pushd BUILD/%{_target_platform}
+CPPFLAGS="$CPPFLAGS -I%{_includedir}/cddlib -I%{_includedir}/frobby" \
+CFLAGS="$optflags -fsigned-char" \
+CXXFLAGS="$optflags -fsigned-char" \
+LIBS="-lflexiblas" \
+../../configure \
+ --build=%{_build} \
+ --host=%{_host} \
+ --with-issue=%{ISSUE} \
+ --prefix=%{_prefix} \
+ --disable-dumpdata \
+ --enable-shared \
+ --disable-fc-lib-ldflags \
+ --disable-strip \
+ --enable-fplll \
+ --enable-linbox \
+ --with-integer-package=gmp \
+ --with-unbuilt-programs="cddplus nauty" \
+ --enable-build-libraries="mpfr flint factory lapack fplll givaro linbox gtest"
+ # The list of libraries and submodules above should include only those that:
+ # 1. We bundle (mpfr, flint, factory, and linbox)
+ # 2. We sneakily substitute one library for another (lapack -> flexiblas)
+ # 3. Have to be linked with the static library (fplll and givaro)
+popd
+
+# link with static libraries when global constructors run prior to GC
+# initialization. Otherwise, unloading the shared object causes a crash.
+# We have to do this because we pick up references to -lgivaro from other
+# packages during the configure script execution.
+for fil in $(grep -Erl -e '-lfplll|-lgivaro' .); do
+ sed -e 's,-lfplll,%{_libdir}/libfplll.a,' \
+ -e 's,-lgivaro,%{_libdir}/libgivaro.a,' \
+ -i.orig $fil
+ touch -r $fil.orig $fil
+ rm -f $fil.orig
+done
+
+make -C BUILD/%{_target_platform} VERBOSE=true Verbose=true IgnoreExampleErrors=true
+
+# log errors
+find BUILD/%{_target_platform}/ -name *.errors -execdir echo {} \; -execdir cat {} \;
+
+
+%install
+%make_install -C BUILD/%{_target_platform} IgnoreExampleErrors=true
+
+# link, don't copy, the binaries
+mbindir=%{buildroot}%{_libexecdir}/Macaulay2/bin
+for fil in checkregularity chiro2circuits chiro2cocircuits cohomcalg csdp lrs \
+ normaliz points2allfinetriangs points2alltriangs points2chiro \
+ points2finetriang points2finetriangs points2flips points2nallfinetriangs \
+ points2nalltriangs points2nfinetriangs points2nflips points2ntriangs \
+ points2triangs points2volume; do
+ rm -f $mbindir/$fil
+ ln -s %{_bindir}/$fil $mbindir/$fil
+done
+
+# app img
+for sz in 64 72 96 128 192 256 512; do
+ sz2=${sz}x${sz}
+ mkdir -p %{buildroot}%{_datadir}/icons/hicolor/$sz2/apps
+ install -p -m644 icons/NinePlanets-${sz2}.png \
+ %{buildroot}%{_datadir}/icons/hicolor/$sz2/apps/%{name}.png
+done
+
+desktop-file-install --vendor="" \
+ --dir=%{buildroot}%{_datadir}/applications \
+ %{SOURCE11}
+
+mkdir -p %{buildroot}%{_metainfodir}
+install -pm 644 %{SOURCE12} %{buildroot}%{_metainfodir}
+appstreamcli validate --nonet %{buildroot}%{_metainfodir}/com.macaulay2.macaulay2.metainfo.xml
+
+# Byte compile the Emacs files, and move the documentation
+pushd %{buildroot}%{_emacs_sitelispdir}/macaulay2
+mv M2-emacs* %{buildroot}%{_pkgdocdir}
+mv README.md %{buildroot}%{_pkgdocdir}/README-emacs.md
+%{_emacs_bytecompile} *.el
+popd
+
+## unpackaged files
+# info dir
+rm -fv %{buildroot}%{_infodir}/dir
+
+# Delete misinstalled memtailor, mathic, and mathicgb libraries
+rm -fr %{buildroot}/builddir
+
+
+%check
+# The test suite has grown to the point where it takes many hours to run.
+# Just run the most basic tests.
+make check -C BUILD/%{_target_platform}/Macaulay2/e
+make check -C BUILD/%{_target_platform}/Macaulay2/bin
+
+
+%files
+%{_bindir}/M2
+%{_bindir}/M2-binary
+%{_prefix}/lib/Macaulay2/
+%{_libexecdir}/Macaulay2/
+
+%if 0%{?common}
+%files common
+%endif
+%{_datadir}/Macaulay2/
+%{_datadir}/applications/com.macaulay2.macaulay2.desktop
+%{_datadir}/icons/hicolor/*/*/*
+%{_metainfodir}/com.macaulay2.macaulay2.metainfo.xml
+%{_docdir}/Macaulay2/
+%{_infodir}/*.info*
+%{_mandir}/man1/*
+%{_emacs_sitelispdir}/macaulay2/
+
+
+%changelog
+* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Sat Apr 15 2023 Florian Weimer <fweimer@redhat.com> - 1.21-5
+- Port configure script to C99
+
+* Mon Feb 20 2023 Jonathan Wakely <jwakely@redhat.com> - 1.21-4
+- Rebuilt for Boost 1.81
+
+* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Thu Jan 12 2022 Jerry James <loganjerry@gmail.com> - 1.21-2
+- Rebuild for libfplll 5.4.4
+
+* Thu Dec 22 2022 Jerry James <loganjerry@gmail.com> - 1.21-1
+- Version 1.21
+- Drop upstreamed patch for crash when building documentation
+- Use rdns names for the desktop and metainfo files
+
+* Tue Dec 20 2022 Jerry James <loganjerry@gmail.com> - 1.20-2
+- Convert License tag to SPDX
+
+* Sun Sep 25 2022 Rich Mattes <richmattes@gmail.com> - 1.20-2
+- Rebuild for tinyxml2-9.0.0
+
+* Thu Aug 4 2022 Jerry James <loganjerry@gmail.com> - 1.20-1
+- Version 1.20
+
+* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.19.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Wed May 04 2022 Thomas Rodgers <trodgers@redhat.com> - 1.19.1-2
+- Rebuilt for Boost 1.78
+
+* Mon Feb 21 2022 Jerry James <loganjerry@gmail.com> - 1.19.1-1
+- Version 1.19.1
+- Disable LTO to work around segfaults
+
+* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.19-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Wed Nov 24 2021 Jerry James <loganjerry@gmail.com> - 1.19-1
+- Version 1.19
+
+* Fri Aug 06 2021 Jonathan Wakely <jwakely@redhat.com> - 1.18-4
+- Rebuilt for Boost 1.76
+
+* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.18-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Tue Jun 29 2021 Jerry James <loganjerry@gmail.com> - 1.18-2
+- Rebuild for ntl 11.5.1
+
+* Thu Jun 17 2021 Jerry James <loganjerry@gmail.com> - 1.18-1
+- Version 1.18
+
+* Thu Feb 18 2021 Jerry James <loganjerry@gmail.com> - 1.17-2
+- Reduce optimization level on s390x to work around FTBFS
+- Install metainfo
+- Add -mathic patch to silence GCC warnings
+- Add -lto patch to silence LTO warnings
+
+* Mon Jan 25 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.17-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Sat Jan 16 2021 Jerry James <loganjerry@gmail.com> - 1.17-1
+- Version 1.17
+- Drop upstreamed patches: -nauty-paths, -format
+- Merge -gcc11 patch into mathicgb-1.0.patch
+
+* Thu Oct 15 2020 Jeff Law <law@redhat.com> - 1.16-2
+- Add missing #includes for gcc-11
+
+* Mon Aug 31 2020 Jerry James <loganjerry@gmail.com> - 1.16-1
+- Version 1.16
+- Drop upstreamed patch: -xdg_open
+- Add -ulimit patch for the slower builders
+- Add -format and -rightarrow patches
+- Bundle packages due to garbage collector crashes: linbox, memtailor, mathic
+- Drop the XEmacs subpackage; XEmacs support no longer works
+
+* Sun Aug 16 2020 Iñaki Úcar <iucar@fedoraproject.org> - 1.15.1.0-5
+- https://fedoraproject.org/wiki/Changes/FlexiBLAS_as_BLAS/LAPACK_manager
+
+* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.15.1.0-4
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.15.1.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Wed Jul 1 2020 Jeff Law <law@redhat.com> - 1.15.1.0-2
+- Disable LTO
+
+* Wed Jun 3 2020 Jerry James <loganjerry@gmail.com> - 1.15.1.0-1
+- Version 1.15.1.0
+- Drop upstreamed patches: -no_Werror, -mpir, -pthreads, -fflas-ffpack,
+ -fno-common, -gtest, -pthreads
+
+* Tue Feb 11 2020 Jerry James <loganjerry@gmail.com> - 1.14.0.1-4
+- Add -fno-common patch to fix FTBFS with GCC 10
+
+* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.14.0.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Fri Jan 10 2020 Jerry James <loganjerry@gmail.com> - 1.14.0.1-3
+- Rebuild for ntl 11.4.3
+
+* Fri Nov 1 2019 Jerry James <loganjerry@gmail.com> - 1.14.0.1-2
+- Rebuild for givaro 4.1.1, fflas-ffpack 2.4.3, and linbox 1.6.3
+
+* Thu Sep 26 2019 Jerry James <loganjerry@gmail.com> - 1.14.0.1-1
+- Macaulay2-1.14.0.1
+- Drop upstreamed -format and -exception patches
+- Also bundle libmpc since it is linked with mpfr
+- Drop fix for F26 symlink-file snafu
+- Build with python 3 instead of python 2
+
+* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.12.0.1-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.12.0.1-5
+- Rebuild for readline 8.0
+
+* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.12.0.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Tue Nov 20 2018 Jerry James <loganjerry@gmail.com> - 1.12.0.1-3
+- Rebuild for lrslib 070
+
+* Wed Oct 10 2018 Jerry James <loganjerry@gmail.com> - 1.12.0.1-2
+- Rebuild for ntl 11.3.0
+- Build with openblas instead of atlas (bz 1618938)
+
+* Fri Aug 10 2018 Jerry James <loganjerry@gmail.com> - 1.12.0.1-1
+- Macaulay2-1.12.0.1
+- Replace tiny icon of unknown origin with various sizes of upstream's icon
+- Remove deprecated entries from the desktop file
+- Add upstream mpfr 3.1.6 patches
+
+* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.11-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Tue Jul 3 2018 Jerry James <loganjerry@gmail.com> - 1.11-2
+- Rebuild for ntl 11.1.0
+- Remove scriptlets that call install-info
+- Do not byte compile python files in the examples
+
+* Sat Jun 2 2018 Jerry James <loganjerry@gmail.com> - 1.11-1
+- Macaulay2-1.11
+- Drop upstreamed patches: -verbose_build, -givaro, -pari, -endian
+- New patches: -fflas-ffpack, -format, -exception, -fplll, -configure
+- Update bundled software
+- Refresh INFO_FILES list
+
+* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.9.2-8
+- Escape macros in %%changelog
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.2-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Thu Jan 18 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.9.2-6
+- Remove obsolete scriptlets
+
+* Wed Oct 11 2017 Jerry James <loganjerry@gmail.com> - 1.9.2-5
+- Link rather than copy the normaliz binary
+- Fix accidental replacement of factory symlink with a directory
+
+* Sat Sep 30 2017 Jerry James <loganjerry@gmail.com> - 1.9.2-4
+- Rebuild for ntl 10.5.0
+
+* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.2-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Wed Apr 5 2017 Jerry James <loganjerry@gmail.com> - 1.9.2-1
+- Macaulay2-1.9.2
+- Drop upstreamed patches: -disable_broken_debug_functions, -gc, -rpath,
+ -rh_configure_hack
+- Add patches: -givaro, -gtest, -pari
+- Create fake library and submodule tarballs to fool the build system into
+ building in support for system libraries
+- Bundle mpfr, flint, and factory to avoid garbage collector crashes
+- Replace the (X)Emacs triggers with (x)emacs-filesystem dependencies
+- New URLs
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-34
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Thu Jan 12 2017 Igor Gnatenko <ignatenko@redhat.com> - 1.6-33
+- Rebuild for readline 7.x
+
+* Thu Oct 20 2016 Jerry James <loganjerry@gmail.com> - 1.6-32
+- Rebuild for ntl 10.1.0
+
+* Mon Sep 5 2016 Jerry James <loganjerry@gmail.com> - 1.6-31
+- Rebuild for ntl 9.11.0
+
+* Fri Aug 12 2016 Jerry James <loganjerry@gmail.com> - 1.6-30
+- Rebuild for fflas-ffpack 2.2.2, givaro 4.0.2, and linbox 1.4.2
+
+* Mon Jul 25 2016 Jerry James <loganjerry@gmail.com> - 1.6-29
+- Rebuild for ntl 9.10.0
+
+* Thu Jun 2 2016 Jerry James <loganjerry@gmail.com> - 1.6-28
+- Rebuild for ntl 9.9.1
+
+* Fri Apr 29 2016 Jerry James <loganjerry@gmail.com> - 1.6-27
+- Rebuild for ntl 9.8.0
+- Nauty is now available
+- Drop -gcc-template-bug patch; gcc bug has been fixed
+
+* Sat Mar 19 2016 Jerry James <loganjerry@gmail.com> - 1.6-26
+- Rebuild for ntl 9.7.0
+
+* Sat Feb 20 2016 Jerry James <loganjerry@gmail.com> - 1.6-25
+- Rebuild for ntl 9.6.4
+- Add -gcc-template-bug patch to work around gcc bug (bz 1307282)
+
+* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-24
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Thu Jan 14 2016 Jonathan Wakely <jwakely@redhat.com> - 1.6-23
+- Rebuilt for Boost 1.60
+
+* Fri Dec 4 2015 Jerry James <loganjerry@gmail.com> - 1.6-22
+- Rebuild for ntl 9.6.2
+- Add python2 BR for the tests
+
+* Sat Oct 17 2015 Kalev Lember <klember@redhat.com> - 1.6-21
+- Rebuilt for libntl soname bump
+
+* Fri Oct 16 2015 Jerry James <loganjerry@gmail.com> - 1.6-20
+- Rebuild for ntl 9.4.0
+
+* Tue Sep 29 2015 Rex Dieter <rdieter@fedoraproject.org> 1.6-19
+- refresh config.guess/config.sub hack, fix FTBFS on aarch64
+
+* Sat Sep 19 2015 Jerry James <loganjerry@gmail.com> - 1.6-18
+- Rebuild for flint 2.5.2 and ntl 9.3.0
+
+* Thu Aug 27 2015 Jonathan Wakely <jwakely@redhat.com> - 1.6-17
+- Rebuilt for Boost 1.59
+
+* Wed Jul 29 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.6-16
+- Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159
+
+* Wed Jul 22 2015 David Tardon <dtardon@redhat.com> - 1.6-15
+- rebuild for Boost 1.58
+
+* Tue Jun 16 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.6-14
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Mon May 18 2015 Jerry James <loganjerry@gmail.com> - 1.6-13
+- Rebuild for ntl 9.1.1 and cddlib-094h
+
+* Fri May 15 2015 Jerry James <loganjerry@gmail.com> - 1.6-12
+- Bump and rebuild
+
+* Sat May 9 2015 Jerry James <loganjerry@gmail.com> - 1.6-11
+- Rebuild for ntl 9.1.0
+
+* Mon Feb 2 2015 Jerry James <loganjerry@gmail.com> - 1.6-10
+- Rebuild for ntl 8.1.2
+
+* Mon Jan 26 2015 Petr Machata <pmachata@redhat.com> - 1.6-9
+- Rebuild for boost 1.57.0
+
+* Thu Jan 15 2015 Jerry James <loganjerry@gmail.com> - 1.6-8
+- Rebuild for ntl 8.1.0
+- Fix the desktop file name
+
+* Wed Oct 29 2014 Jerry James <loganjerry@gmail.com> - 1.6-7
+- Rebuild for ntl 6.2.1
+- Revert Apr 8 HTML creation timeout, now handled upstream
+- Revert use of -common subpkg; various arches timeout differently
+
+* Wed Sep 24 2014 Rex Dieter <rdieter@fedoraproject.org> 1.6-6
+- enable -common subpkg (to be more compatible with upstream packaging)
+
+* Fri Aug 15 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.6-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Wed Jun 25 2014 Rex Dieter <rdieter@fedoraproject.org> 1.6-4
+- restore --build/--host configure options lost in 1.6 update, should help arm
+
+* Fri Jun 06 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.6-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Fri May 23 2014 Petr Machata <pmachata@redhat.com> - 1.6-2
+- Rebuild for boost 1.55.0
+
+* Mon May 19 2014 Rex Dieter <rdieter@fedoraproject.org> 1.6-1
+- Macaulay2-1.6 (#1074594)
+- ExcludeArch: %%arm (#1099598)
+
+* Wed May 14 2014 Rex Dieter <rdieter@fedoraproject.org> 1.5-8
+- rebuild (gc)
+
+* Tue Apr 8 2014 Jerry James <loganjerry@gmail.com> - 1.5-7
+- Build for all arches
+- Increase HTML creation timeouts for slower processors, such as ARM
+- Add --build and --host invocations to configure to fix mismatched ARM names
+
+* Wed Apr 2 2014 Jerry James <loganjerry@gmail.com> - 1.5-6
+- Rebuild for ntl 6.1.0
+
+* Fri Mar 21 2014 Jerry James <loganjerry@gmail.com> - 1.5-5
+- The normaliz patch was used; bring it back
+- Complete the removal of the system_normaliz variable
+- Link with RPM_LD_FLAGS
+- Due to use of a static library, explicitly link with -lflint
+
+* Fri Jan 24 2014 Rex Dieter <rdieter@fedoraproject.org> - 1.5-5
+- drop unused patches (4ti2, normalize)
+
+* Tue Jan 21 2014 Rex Dieter <rdieter@fedoraproject.org> - 1.5-4
+- utilize %%_libexecdir/Macaulay2/... for helper/system binaries
+- libdir: %%_libdir => %%_prefix/lib
+- -common subpkg option (not used yet)
+
+* Tue Jan 14 2014 Jerry James <loganjerry@gmail.com> - 1.5-3
+- Update normaliz interface for normaliz 2.8 and later
+
+* Tue Jul 30 2013 Petr Machata <pmachata@redhat.com> - 1.5-2
+- Rebuild for boost 1.54.0
+
+* Thu May 23 2013 Rex Dieter <rdieter@fedoraproject.org> 1.5-1
+- Release: 1 (using non-snapshot release tarball now)
+
+* Tue May 21 2013 Rex Dieter <rdieter@fedoraproject.org> - 1.5-0.7.20130401
+- update to 20130401 r15955 snapshot release
+- (Build)Requires: factory-gftables (see bug #965655)
+- refresh INFO_FILES content
+
+* Mon May 6 2013 Jerry James <loganjerry@gmail.com> - 1.5-0.6.20130214
+- Rebuild for m4ri 20130416
+
+* Fri Feb 15 2013 Rex Dieter <rdieter@fedoraproject.org> 1.5-0.5.20130214
+- r15838 (20130214 snapshot)
+
+* Wed Feb 13 2013 Rex Dieter <rdieter@fedoraproject.org> 1.5-0.4.20120807
+- BR: doxygen-latex
+
+* Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.5-0.3.20120807
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Tue Aug 07 2012 Rex Dieter <rdieter@fedoraproject.org> 1.5-0.2.20120807
+- 1.5 20120807 r15022 snapshot
+
+* Thu Jul 19 2012 Rex Dieter <rdieter@fedoraproject.org> 1.4-9
+- rebuild against (Singular's) libfac/factory 3.1.3
+
+* Wed Jul 18 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Tue Jul 03 2012 Rex Dieter <rdieter@fedoraproject.org> 1.4-7
+- rebuild (pari)
+
+* Sun Jul 1 2012 pcpa <paulo.cesar.pereira.de.andrade@gmail.com> - 1.4-6
+- Link to gmp not mpir.
+- Rebuild with pari 2.5.
+
+* Wed May 30 2012 Rex Dieter <rdieter@fedoraproject.org>
+- 1.4-5
+- License: GPLv2 or GPLv3 (#821036)
+- pkgconfig-style deps
+
+* Tue Feb 28 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4-4
+- Rebuilt for c++ ABI breakage
+
+* Thu Jan 12 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Fri Sep 30 2011 Rex Dieter <rdieter@fedoraproject.org> 1.4-2
+- rebuild (gdbm)
+
+* Thu May 26 2011 Rex Dieter <rdieter@fedoraproject.org> 1.4-1
+- 1.4
+
+* Thu May 26 2011 Rex Dieter <rdieter@fedoraproject.org> 1.3.1-9
+- Typo in INFO_FILES (#708086)
+
+* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.1-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Wed Jun 30 2010 Rex Dieter <rdieter@fedoraproject.org> - 1.3.1-7
+- BR: cddlib-static (#609698)
+
+* Tue Mar 16 2010 Rex Dieter <rdieter@fedoraproject.org> - 1.3.1-6
+- rebuild (factory/libfac)
+
+* Tue Mar 16 2010 Mark Chappell <tremble@fedoraproject.org> - 1.3.1-5
+- Run install-info on all of the .info files we installed
+- Re-enable the now functional ppc64 build
+
+* Wed Mar 10 2010 Mark Chappell <tremble@fedoraproject.org> - 1.3.1-4
+- Add in missing Requires runtime dependancies
+
+* Wed Mar 10 2010 Mark Chappell <tremble@fedoraproject.org> - 1.3.1-3
+- GPLv3/GPLv2 conflict, use compat-readline5 - bz#511299
+
+* Tue Mar 09 2010 Mark Chappell <tremble@fedoraproject.org> - 1.3.1-2
+- Replace DSO patch with one accepted upstream
+- Completely disable static linking
+
+* Wed Feb 24 2010 Mark Chappell <tremble@fedoraproject.org> - 1.3.1-1
+- Upstream version increment
+- Remove unused patch
+- Remove patch applied upstream
+- Ensure consistent use of buildroot macro instead of RPM_BUILD_ROOT
+- Fix implicit linking DSO failure
+- Don't package empty .okay files which simply indicate test passes
+
+* Tue Dec 8 2009 Michael Schwendt <mschwendt@fedoraproject.org> - 1.2-7
+- Explicitly BR factory-static and libfac-static in accordance with the
+ Packaging Guidelines (factory-devel/libfac-devel are still static-only).
+
+* Tue Sep 22 2009 Rex Dieter <rdieter@fedoraproject.org> - 1.2-6
+- fixup/optimize scriplets
+
+* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Fri Apr 17 2009 Rex Dieter <rdieter@fedoraproject.org> - 1.2-4
+- rebuild for ntl-devel (shared)
+
+* Wed Feb 25 2009 Rex Dieter <rdieter@fedoraproject.org> - 1.2-3
+- BR: libfac-devel,factory-devel >= 3.1
+- restore ExcludeArch: ppc64 (#253847)
+
+* Mon Feb 23 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Fri Feb 13 2009 Rex Dieter <rdieter@fedoraproject.org> 1.2-1
+- Macaulay-1.2
+
+* Thu Oct 02 2008 Rex Dieter <rdieter@fedoraproject.org> 1.1-2
+- respin (factory/libfac)
+
+* Tue Mar 11 2008 Rex Dieter <rdieter@fedoraproject.org> 1.1-1
+- Macaulay2-1.1
+- Obsoletes/Provides: Macaulay2-common (upstream compatibility)
+- re-enable ppc64 (#253847)
+- IgnoreExampleErrors=true
+
+* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 0.9.95-10
+- Autorebuild for GCC 4.3
+
+* Tue Dec 18 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 0.9.95-9
+- Provides: macaulay2
+- respin against new(er) factory,libfac,ntl
+
+* Wed Aug 22 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 0.9.95-8
+- ExcludeArch: ppc64 (#253847)
+
+* Tue Aug 21 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 0.9.95-7
+- BR: gawk
+
+* Tue Aug 21 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 0.9.95-6
+- gc-7.0 patches
+
+* Sat Aug 11 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 0.9.95-5
+- License: GPLv2
+
+* Mon Jan 15 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 0.9.95-4
+- Ob/Pr: Macaulay2-doc, not -docs (#222609)
+
+* Sat Jan 06 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 0.9.95-3
+- re-enable ppc build (#201739)
+
+* Tue Jan 02 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 0.9.95-2
+- ./configure --disable-strip, for usable -debuginfo (#220893)
+
+* Mon Dec 18 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.95-1
+- Macaulay2-0.9.95
+
+* Wed Nov 22 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.20-0.5.20060808svn
+- .desktop Categories: -Application,Scientific,X-Fedora +ConsoleOnly
+
+* Tue Aug 29 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.20-0.4.20060808svn
+- fc6 respin
+
+* Tue Aug 08 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.20-0.3.20060808svn
+- ExcludeArch: ppc (bug #201739)
+- %%ghost (x)emacs site-lisp bits (using hints from fedora-rpmdevtools)
+
+* Tue Aug 08 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.20-0.2.20060808svn
+- 20060808 snapshot
+
+* Mon Jul 24 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.20-0.1.20060724svn
+- 2006-07-15-0.9.20
+
+* Wed Jul 12 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.10-0.6.20060710svn
+- 0.9.10
+
+-* Mon Jul 10 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.8-0.6.cvs20060327
+- BR: ncurses-devel
+
+* Fri May 05 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.8-0.4.cvs20060327
+- 64bit patch (#188709)
+
+* Wed Apr 12 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.8-0.3.cvs20060327
+- omit x86_64, for now (#188709)
+
+* Tue Apr 11 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.8-0.2.cvs20060327
+- 0.9.8 (cvs, no tarball yet)
+- drop -doc subpkg (in main now)
+
+* Mon Apr 10 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.2-22
+- fix icon location (#188384)
+
+* Thu Mar 30 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.2-21
+- really disable %%check (fails on fc5+ anyway)
+
+* Fri Jan 20 2006 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.2-20
+- .desktop: drop Category=Development
+- app icon: follow icon spec
+- drop -emacs subpkg (in main now)
+
+* Fri Sep 16 2005 Rex Dieter <rexdieter[AT]users.sf.net> - 0.9.2-19
+- disable 'make check' (fc5/buildsystem error), besides, we get a
+ good consistency check when M2 builds all the doc examples.
+
+* Wed Sep 14 2005 Rex Dieter <rexdieter[AT]users.sf.net> - 0.9.2-18
+- rebuild against gc-6.6
+
+* Thu May 26 2005 Michael Schwendt <mschwendt[AT]users.sf.net> - 0.9.2-17
+- rebuild (build system x86_64 repository access failed for 0.9.2-16)
+- fix build for GCC 4 (#156223)
+
+* Thu Apr 7 2005 Michael Schwendt <mschwendt[AT]users.sf.net> - 0.9.2-15
+- rebuilt
+
+* Mon Feb 21 2005 Rex Dieter <rexdieter[AT]users.sf.net> 0:0.9.2-14
+- x86_64 issues (%%_libdir -> %%_prefix/lib )
+- remove desktop_file macro usage
+
+* Sat Oct 23 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.13
+- BR: time (again)
+- omit m2_dir/setup (not needed/wanted)
+
+* Mon Oct 18 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.12
+- actually *apply* gcc34 patch this time.
+
+* Mon Oct 18 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.11
+- gcc34 patch
+
+* Fri Oct 1 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.10
+- explicit BR versions for gc-devel, libfac-devel, factory-devel
+
+* Tue Aug 10 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.9
+- BR: time
+
+* Thu Jun 03 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.8
+- .desktop: remove Terminaloptions to be desktop agnostic
+- .desktop: Categories += Education;Math;Development (Devel only
+ added so it shows *somewhere* in gnome menus)
+
+* Tue Jun 01 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.7
+- disable default 'make check' (util/screen fails on fc2)
+
+* Tue Mar 30 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.6
+- desktop-file is now on by default
+- use separate (not inline) .desktop file
+
+* Mon Jan 05 2004 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.5
+- fix BuildRequires: desktop-file-utils to satisfy rpmlint.
+- put emacs files in emacs subdir too (to follow supplied docs)
+- *really* nuke .cvsignore files
+- fix desktop-file-install --add-cateagories usage
+
+* Tue Dec 23 2003 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.4
+- -emacs: use %%defattr
+- -emacs: fix M2-init.el
+
+* Mon Nov 17 2003 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.3
+- update/simplify macros
+- desktop_file support.
+- emacs subpkg.
+- relax Req's on subpkgs to just: Requires: %%name = %%epoch:%%version
+- use non-versioned BuildRequires
+- remove redundant BuildRequires: gmp-devel
+- remove gc patch, no longer needed.
+- delete/not-package a bunch of unuseful files.
+- use --disable-strip when debug_package is in use.
+
+* Thu Nov 13 2003 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.2
+- no longer explictly Requires: emacs
+
+* Wed Nov 05 2003 Rex Dieter <rexdieter at sf.net> 0:0.9.2-0.fdr.1
+- missing Epoch: 0
+
+* Fri Sep 12 2003 Rex Dieter <rexdieter at sf.net> 0.9.2-0.fdr.0
+- fedora'ize
+
diff --git a/com.macaulay2.macaulay2.desktop b/com.macaulay2.macaulay2.desktop
new file mode 100644
index 0000000..3bbebc5
--- /dev/null
+++ b/com.macaulay2.macaulay2.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=Macaulay2
+Exec=M2
+Icon=Macaulay2
+Terminal=true
+Type=Application
+Categories=ConsoleOnly;Education;Math;
diff --git a/com.macaulay2.macaulay2.metainfo.xml b/com.macaulay2.macaulay2.metainfo.xml
new file mode 100644
index 0000000..2ae837e
--- /dev/null
+++ b/com.macaulay2.macaulay2.metainfo.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop-application">
+ <id>com.macaulay2.macaulay2</id>
+ <metadata_license>0BSD</metadata_license>
+ <project_license>GPL-2.0-only OR GPL-3.0-only</project_license>
+ <name>Macaulay2</name>
+ <summary>System for algebraic geometry and commutative algebra</summary>
+ <description>
+ <p>
+ Macaulay 2 is a software system devoted to supporting research in
+ algebraic geometry and commutative algebra written by Daniel R. Grayson
+ and Michael E. Stillman.
+ </p>
+ </description>
+ <launchable type="desktop-id">com.macaulay2.macaulay2.desktop</launchable>
+ <screenshots>
+ <screenshot type="default">
+ <image>https://faculty.math.illinois.edu/Macaulay2/Screenshots/texmacs.png</image>
+ <caption>Macaulay2 with TeXmacs</caption>
+ </screenshot>
+ <screenshot>
+ <image>https://faculty.math.illinois.edu/Macaulay2/Screenshots/emacs-M2-c.png</image>
+ <caption>Macaulay2 with Emacs</caption>
+ </screenshot>
+ </screenshots>
+ <update_contact>loganjerry@gmail.com</update_contact>
+ <url type="homepage">https://macaulay2.com/</url>
+ <url type="bugtracker">https://github.com/Macaulay2/M2/issues</url>
+ <url type="contact">https://groups.google.com/g/macaulay2</url>
+ <content_rating type="oars-1.0"></content_rating>
+ <provides>
+ <binary>M2</binary>
+ <binary>M2-binary</binary>
+ </provides>
+</component>
diff --git a/etags.sh b/etags.sh
new file mode 100644
index 0000000..17d0c2e
--- /dev/null
+++ b/etags.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+for ETAGS in etags.emacs etags ; do
+ test -x /usr/bin/$ETAGS && exec $ETAGS ${1+"$@"}
+done
+
+exit 1
diff --git a/linbox-1.6.3.patch b/linbox-1.6.3.patch
new file mode 100644
index 0000000..f2481c0
--- /dev/null
+++ b/linbox-1.6.3.patch
@@ -0,0 +1,35 @@
+--- linbox-1.6.3/configure.ac.orig 2019-06-07 07:22:08.000000000 -0600
++++ linbox-1.6.3/configure.ac 2020-06-05 12:24:32.920910975 -0600
+@@ -65,9 +65,8 @@ AC_PROG_CXX
+
+ AC_COMPILER_NAME
+
+-STDFLAG=${CXXFLAGS}
++STDFLAG=""
+
+-CXXFLAGS=""
+
+ # We need a C++11 compiler now - AB 2014-12-12
+ # clang-3.8 does not support __float128 without explicitly passing it -std=c++11
+@@ -187,10 +186,6 @@ echo "----------------------------------
+ echo " START LINBOX CONFIG "
+ echo "-----------------------------------------------"
+
+-# Checks which SIMD optimization flags to use and set SIMD_CFLAGS accordingly
+-INSTR_SET
+-AC_SUBST(SIMD_FLAGS)
+-
+ dnl gcc-4.9.2 bug See https://trac.sagemath.org/ticket/17635#comment:178
+ AS_IF([ test "x$CCNAM" = "xgcc492" ],[CXXFLAGS="${CXXFLAGS} -fpermissive"],[])
+
+--- linbox-1.6.3/linbox/algorithms/gauss/gauss-solve-gf2.inl.orig 2019-06-07 07:22:08.000000000 -0600
++++ linbox-1.6.3/linbox/algorithms/gauss/gauss-solve-gf2.inl 2020-02-01 16:19:20.692143829 -0700
+@@ -72,7 +72,7 @@ namespace LinBox
+
+ Vector1 w(F2, A.coldim());
+
+- for(typename Vector1::iterator it=w.begin()+(ptrdiff_t)Rank;it!=w.end();++it)
++ for(typename Vector1::iterator it=w.begin()+(long)Rank;it!=w.end();++it)
+ F2.assign(*it,F2.zero);
+
+ return this->solve(x, w, Rank, Q, L, A, P, b);
diff --git a/mpfr-4.1.0.patch b/mpfr-4.1.0.patch
new file mode 100644
index 0000000..30775a5
--- /dev/null
+++ b/mpfr-4.1.0.patch
@@ -0,0 +1,1747 @@
+--- mpfr-4.1.0/PATCHES.orig 2021-02-11 12:40:40.079363480 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-11 12:40:40.119363040 +0000
+@@ -0,0 +1 @@
++decimal128-conv
+--- mpfr-4.1.0/VERSION.orig 2020-07-10 11:52:33.000000000 +0000
++++ mpfr-4.1.0/VERSION 2021-02-11 12:40:40.119363040 +0000
+@@ -1 +1 @@
+-4.1.0
++4.1.0-p1
+--- mpfr-4.1.0/src/get_d128.c.orig 2020-04-08 22:39:35.000000000 +0000
++++ mpfr-4.1.0/src/get_d128.c 2021-02-11 12:40:40.103363216 +0000
+@@ -40,22 +40,21 @@
+ static _Decimal128
+ get_decimal128_nan (void)
+ {
+- return (_Decimal128) MPFR_DBL_NAN;
++ return 0.0dl / 0.0dl;
+ }
+
+ /* construct the decimal128 Inf with given sign */
+ static _Decimal128
+ get_decimal128_inf (int negative)
+ {
+- return (_Decimal128) (negative ? MPFR_DBL_INFM : MPFR_DBL_INFP);
++ return negative ? - 1.0dl / 0.0dl : 1.0dl / 0.0dl;
+ }
+
+ /* construct the decimal128 zero with given sign */
+ static _Decimal128
+ get_decimal128_zero (int negative)
+ {
+- _Decimal128 zero = 0;
+- return (_Decimal128) (negative ? -zero : zero);
++ return negative ? - 0.0dl : 0.0dl;
+ }
+
+ /* construct the decimal128 smallest non-zero with given sign:
+--- mpfr-4.1.0/src/mpfr.h.orig 2020-07-10 11:52:33.000000000 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-11 12:40:40.115363084 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0"
++#define MPFR_VERSION_STRING "4.1.0-p1"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+--- mpfr-4.1.0/src/version.c.orig 2020-07-10 11:52:33.000000000 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-11 12:40:40.119363040 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0";
++ return "4.1.0-p1";
+ }
+--- mpfr-4.1.0/PATCHES.orig 2021-02-11 12:43:51.761257868 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-11 12:43:51.801257430 +0000
+@@ -0,0 +1 @@
++random_deviate
+--- mpfr-4.1.0/VERSION.orig 2021-02-11 12:40:40.119363040 +0000
++++ mpfr-4.1.0/VERSION 2021-02-11 12:43:51.801257430 +0000
+@@ -1 +1 @@
+-4.1.0-p1
++4.1.0-p2
+--- mpfr-4.1.0/src/mpfr.h.orig 2021-02-11 12:40:40.115363084 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-11 12:43:51.801257430 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0-p1"
++#define MPFR_VERSION_STRING "4.1.0-p2"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+--- mpfr-4.1.0/src/random_deviate.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/random_deviate.c 2021-02-11 12:43:51.789257562 +0000
+@@ -289,6 +289,7 @@
+ mpfr_random_size_t p = mpfr_get_prec (z); /* Number of bits in result */
+ mpz_t t;
+ int inex;
++ mpfr_exp_t negxe;
+
+ if (n == 0)
+ {
+@@ -370,14 +371,22 @@
+ mpz_setbit (t, 0); /* Set the trailing bit so result is always inexact */
+ if (neg)
+ mpz_neg (t, t);
+- /* Is -x->e representable as a mpfr_exp_t? */
+- MPFR_ASSERTN (x->e <= (mpfr_uexp_t)(-1) >> 1);
++ /* Portable version of the negation of x->e, with a check of overflow. */
++ if (MPFR_UNLIKELY (x->e > MPFR_EXP_MAX))
++ {
++ /* Overflow, except when x->e = MPFR_EXP_MAX + 1 = - MPFR_EXP_MIN. */
++ MPFR_ASSERTN (MPFR_EXP_MIN + MPFR_EXP_MAX == -1 &&
++ x->e == (mpfr_random_size_t) MPFR_EXP_MAX + 1);
++ negxe = MPFR_EXP_MIN;
++ }
++ else
++ negxe = - (mpfr_exp_t) x->e;
+ /*
+ * Let mpfr_set_z_2exp do all the work of rounding to the requested
+ * precision, setting overflow/underflow flags, and returning the right
+ * inexact value.
+ */
+- inex = mpfr_set_z_2exp (z, t, -x->e, rnd);
++ inex = mpfr_set_z_2exp (z, t, negxe, rnd);
+ mpz_clear (t);
+ return inex;
+ }
+--- mpfr-4.1.0/src/version.c.orig 2021-02-11 12:40:40.119363040 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-11 12:43:51.801257430 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0-p1";
++ return "4.1.0-p2";
+ }
+--- mpfr-4.1.0/PATCHES.orig 2021-02-11 12:46:49.075316772 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-11 12:46:49.115316335 +0000
+@@ -0,0 +1 @@
++set_z_2exp-overflow
+--- mpfr-4.1.0/VERSION.orig 2021-02-11 12:43:51.801257430 +0000
++++ mpfr-4.1.0/VERSION 2021-02-11 12:46:49.115316335 +0000
+@@ -1 +1 @@
+-4.1.0-p2
++4.1.0-p3
+--- mpfr-4.1.0/src/mpfr.h.orig 2021-02-11 12:43:51.801257430 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-11 12:46:49.115316335 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0-p2"
++#define MPFR_VERSION_STRING "4.1.0-p3"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+--- mpfr-4.1.0/src/set_z_exp.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/set_z_exp.c 2021-02-11 12:46:49.103316466 +0000
+@@ -28,10 +28,11 @@
+ int
+ mpfr_set_z_2exp (mpfr_ptr f, mpz_srcptr z, mpfr_exp_t e, mpfr_rnd_t rnd_mode)
+ {
+- mp_size_t fn, zn, dif, en;
++ mp_size_t fn, zn, dif;
+ int k, sign_z, inex;
+ mp_limb_t *fp, *zp;
+- mpfr_exp_t exp;
++ mpfr_exp_t exp, nmax;
++ mpfr_uexp_t uexp;
+
+ sign_z = mpz_sgn (z);
+ if (MPFR_UNLIKELY (sign_z == 0)) /* ignore the exponent for 0 */
+@@ -43,10 +44,15 @@
+ MPFR_ASSERTD (sign_z == MPFR_SIGN_POS || sign_z == MPFR_SIGN_NEG);
+
+ zn = ABSIZ(z); /* limb size of z */
+- /* compute en = floor(e/GMP_NUMB_BITS) */
+- en = (e >= 0) ? e / GMP_NUMB_BITS : (e + 1) / GMP_NUMB_BITS - 1;
+ MPFR_ASSERTD (zn >= 1);
+- if (MPFR_UNLIKELY (zn + en > MPFR_EMAX_MAX / GMP_NUMB_BITS + 1))
++ nmax = MPFR_EMAX_MAX / GMP_NUMB_BITS + 1;
++ /* Detect early overflow with zn + en > nmax,
++ where en = floor(e / GMP_NUMB_BITS).
++ This is checked without an integer overflow (even assuming some
++ future version of GMP, where limitations may be removed). */
++ if (MPFR_UNLIKELY (e >= 0 ?
++ zn > nmax - e / GMP_NUMB_BITS :
++ zn + (e + 1) / GMP_NUMB_BITS - 1 > nmax))
+ return mpfr_overflow (f, rnd_mode, sign_z);
+ /* because zn + en >= MPFR_EMAX_MAX / GMP_NUMB_BITS + 2
+ implies (zn + en) * GMP_NUMB_BITS >= MPFR_EMAX_MAX + GMP_NUMB_BITS + 1
+@@ -64,8 +70,21 @@
+ and exp = zn * GMP_NUMB_BITS + e - k
+ <= (zn + en) * GMP_NUMB_BITS - k + GMP_NUMB_BITS - 1
+ <= MPFR_EMAX_MAX + 2 * GMP_NUMB_BITS - 1 */
+- exp = (mpfr_prec_t) zn * GMP_NUMB_BITS + e - k;
++ /* We need to compute exp = zn * GMP_NUMB_BITS + e - k with well-defined
++ operations (no integer overflows / no implementation-defined results).
++ The mathematical result of zn * GMP_NUMB_BITS may be larger than
++ the largest value of mpfr_exp_t while exp could still be less than
++ __gmpfr_emax. Thanks to early overflow detection, we can compute the
++ result in modular arithmetic, using mpfr_uexp_t, and convert it to
++ mpfr_exp_t. */
++ uexp = (mpfr_uexp_t) zn * GMP_NUMB_BITS + (mpfr_uexp_t) e - k;
++
++ /* Convert to signed in a portable way (see doc/README.dev).
++ On most platforms, this can be optimized to identity (no-op). */
++ exp = uexp > MPFR_EXP_MAX ? -1 - (mpfr_exp_t) ~uexp : (mpfr_exp_t) uexp;
++
+ /* The exponent will be exp or exp + 1 (due to rounding) */
++
+ if (MPFR_UNLIKELY (exp > __gmpfr_emax))
+ return mpfr_overflow (f, rnd_mode, sign_z);
+ if (MPFR_UNLIKELY (exp + 1 < __gmpfr_emin))
+--- mpfr-4.1.0/src/version.c.orig 2021-02-11 12:43:51.801257430 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-11 12:46:49.115316335 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0-p2";
++ return "4.1.0-p3";
+ }
+--- mpfr-4.1.0/tests/tset_z_exp.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tset_z_exp.c 2021-02-11 12:46:49.103316466 +0000
+@@ -97,49 +97,149 @@
+ mpfr_get_si is a rather indirect test of a low level routine. */
+
+ static void
+-check (long i, mpfr_rnd_t rnd)
++check (long i, mpfr_rnd_t rnd, int reduced)
+ {
+- mpfr_t f;
++ mpfr_t f1, f2, f3;
+ mpz_t z;
+- mpfr_exp_t e;
++ mpfr_exp_t e, old_emin, old_emax;
+ int inex;
++ mpfr_flags_t flags;
++
++ old_emin = mpfr_get_emin ();
++ old_emax = mpfr_get_emax ();
+
+ /* using CHAR_BIT * sizeof(long) bits of precision ensures that
+ mpfr_set_z_2exp is exact below */
+- mpfr_init2 (f, CHAR_BIT * sizeof(long));
++ mpfr_inits2 (CHAR_BIT * sizeof(long), f1, f2, f3, (mpfr_ptr) 0);
+ mpz_init (z);
+ mpz_set_ui (z, i);
+ /* the following loop ensures that no overflow occurs */
+ do
+ e = randexp ();
+ while (e > mpfr_get_emax () - CHAR_BIT * sizeof(long));
+- inex = mpfr_set_z_2exp (f, z, e, rnd);
+- if (inex != 0)
++
++ mpfr_clear_flags ();
++ inex = mpfr_set_z_2exp (f1, z, e, rnd);
++ flags = __gmpfr_flags;
++
++ if (inex != 0 || flags != 0 ||
++ (mpfr_div_2si (f2, f1, e, rnd), mpfr_get_si (f2, MPFR_RNDZ) != i))
+ {
+- printf ("Error in mpfr_set_z_2exp for i=%ld, e=%ld,"
+- " wrong ternary value\n", i, (long) e);
+- printf ("expected 0, got %d\n", inex);
++ printf ("Error in mpfr_set_z_2exp for i=%ld e=%" MPFR_EXP_FSPEC
++ "d rnd_mode=%d\n", i, (mpfr_eexp_t) e, rnd);
++ mpfr_set_si_2exp (f2, i, e, MPFR_RNDN);
++ printf ("expected "); mpfr_dump (f2);
++ printf ("with inex = %d and flags =", 0);
++ flags_out (0);
++ printf ("got "); mpfr_dump (f1);
++ printf ("with inex = %d and flags =", inex);
++ flags_out (flags);
+ exit (1);
+ }
+- mpfr_div_2si (f, f, e, rnd);
+- if (mpfr_get_si (f, MPFR_RNDZ) != i)
++
++ if (reduced)
+ {
+- printf ("Error in mpfr_set_z_2exp for i=%ld e=", i);
+- if (e < LONG_MIN)
+- printf ("(<LONG_MIN)");
+- else if (e > LONG_MAX)
+- printf ("(>LONG_MAX)");
+- else
+- printf ("%ld", (long) e);
+- printf (" rnd_mode=%d\n", rnd);
+- printf ("expected %ld\n", i);
+- printf ("got "); mpfr_dump (f);
+- exit (1);
++ mpfr_exp_t ef, emin, emax;
++ int inex2, inex3;
++ mpfr_flags_t flags2, flags3;
++
++ ef = i == 0 ? 0 : mpfr_get_exp (f1);
++ for (emin = ef - 2; emin <= ef + 2; emin++)
++ for (emax = emin; emax <= ef + 2; emax++)
++ {
++ inex3 = mpfr_set (f3, f1, rnd);
++ MPFR_ASSERTN (inex3 == 0);
++ mpfr_set_emin (emin);
++ mpfr_set_emax (emax);
++ mpfr_clear_flags ();
++ inex2 = mpfr_set_z_2exp (f2, z, e, rnd);
++ flags2 = __gmpfr_flags;
++ mpfr_clear_flags ();
++ inex3 = mpfr_check_range (f3, 0, rnd);
++ flags3 = __gmpfr_flags;
++ if (!(mpfr_equal_p (f2, f3) &&
++ SAME_SIGN (inex2, inex3) &&
++ flags2 == flags3))
++ {
++ printf ("Error in mpfr_set_z_2exp for i=%ld e=%"
++ MPFR_EXP_FSPEC "d rnd_mode=%d\nand emin=%"
++ MPFR_EXP_FSPEC "d emax=%" MPFR_EXP_FSPEC
++ "d\n", i, (mpfr_eexp_t) e, rnd,
++ (mpfr_eexp_t) emin, (mpfr_eexp_t) emax);
++ printf ("expected "); mpfr_dump (f3);
++ printf ("with inex = %d and flags =", inex3);
++ flags_out (flags3);
++ printf ("got "); mpfr_dump (f2);
++ printf ("with inex = %d and flags =", inex2);
++ flags_out (flags2);
++ exit (1);
++ }
++ }
++ mpfr_set_emin (old_emin);
++ mpfr_set_emax (old_emax);
+ }
+- mpfr_clear (f);
++
++ mpfr_clears (f1, f2, f3, (mpfr_ptr) 0);
+ mpz_clear (z);
+ }
+
++static void
++check_huge (void)
++{
++ if (getenv ("MPFR_CHECK_LARGEMEM") != NULL)
++ {
++ mpfr_t x;
++ mpz_t z;
++ long e;
++
++ /* Increase tests_memory_limit to the maximum in order to avoid
++ an obvious failure due to insufficient memory. */
++ tests_memory_limit = (size_t) -1; /* no memory limit */
++
++ mpfr_init2 (x, 32);
++
++ /* In r14140, with a 32-bit ABI (GCC's -m32):
++ - With UBsan (-fsanitize=undefined -fno-sanitize-recover),
++ this fails with:
++ set_z_2exp.c:71:26: runtime error: signed integer overflow:
++ 67108864 * 32 cannot be represented in type 'long int'
++ - With -D_MPFR_EXP_FORMAT=4, this fails with:
++ Expected 0.10001000000000000000000000000000E5
++ Got 0
++ */
++ mpz_init_set_ui (z, 17);
++ e = 0x7ffffff0;
++ mpz_mul_2exp (z, z, e);
++ mpz_add_ui (z, z, 1);
++ mpfr_set_z_2exp (x, z, -e, MPFR_RNDN);
++ if (mpfr_cmp_ui0 (x, 17) != 0)
++ {
++ printf ("Error 1 in check_huge\n");
++ printf ("Expected 0.10001000000000000000000000000000E5\n");
++ printf ("Got ");
++ mpfr_dump (x);
++ exit (1);
++ }
++ mpz_clear (z);
++
++ mpz_init_set_ui (z, 17);
++ mpz_mul_2exp (z, z, 0xffffffb0);
++ mpz_add_ui (z, z, 1);
++ mpfr_set_z_2exp (x, z, -1, MPFR_RNDN);
++ if (! MPFR_IS_INF (x) || MPFR_IS_NEG (x))
++ {
++ printf ("Error 2 in check_huge\n");
++ printf ("Expected @Inf@\n");
++ printf ("Got ");
++ mpfr_dump (x);
++ exit (1);
++ }
++ mpz_clear (z);
++
++ mpfr_clear (x);
++ }
++}
++
+ int
+ main (int argc, char *argv[])
+ {
+@@ -147,11 +247,13 @@
+
+ tests_start_mpfr ();
+
+- check (0, MPFR_RNDN);
++ check (0, MPFR_RNDN, 0);
+ for (j = 0; j < 200000; j++)
+- check (randlimb () & LONG_MAX, RND_RAND ());
++ check (randlimb () & LONG_MAX, RND_RAND (), j < 200);
+ check0 ();
+
++ check_huge ();
++
+ tests_end_mpfr ();
+
+ return 0;
+--- mpfr-4.1.0/PATCHES.orig 2021-02-11 12:48:27.322243271 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-11 12:48:27.370242746 +0000
+@@ -0,0 +1 @@
++prototypes
+--- mpfr-4.1.0/VERSION.orig 2021-02-11 12:46:49.115316335 +0000
++++ mpfr-4.1.0/VERSION 2021-02-11 12:48:27.370242746 +0000
+@@ -1 +1 @@
+-4.1.0-p3
++4.1.0-p4
+--- mpfr-4.1.0/src/atan.c.orig 2020-04-22 15:27:07.000000000 +0000
++++ mpfr-4.1.0/src/atan.c 2021-02-11 12:48:27.354242922 +0000
+@@ -56,7 +56,7 @@
+ };
+
+ static void
+-set_table (mpfr_t y, const mp_limb_t x[3])
++set_table (mpfr_ptr y, const mp_limb_t x[3])
+ {
+ mpfr_prec_t p = MPFR_PREC(y);
+ mp_size_t n = MPFR_PREC2LIMBS(p);
+--- mpfr-4.1.0/src/const_euler.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/const_euler.c 2021-02-11 12:48:27.354242922 +0000
+@@ -181,7 +181,7 @@
+ }
+
+ int
+-mpfr_const_euler_internal (mpfr_t x, mpfr_rnd_t rnd)
++mpfr_const_euler_internal (mpfr_ptr x, mpfr_rnd_t rnd)
+ {
+ mpfr_const_euler_bs_t sum;
+ mpz_t t, u, v;
+--- mpfr-4.1.0/src/eint.c.orig 2020-03-09 15:31:45.000000000 +0000
++++ mpfr-4.1.0/src/eint.c 2021-02-11 12:48:27.354242922 +0000
+@@ -36,7 +36,7 @@
+ Return PREC(y) when the truncated series does not converge.
+ */
+ static mpfr_exp_t
+-mpfr_eint_aux (mpfr_t y, mpfr_srcptr x)
++mpfr_eint_aux (mpfr_ptr y, mpfr_srcptr x)
+ {
+ mpfr_t eps; /* dynamic (absolute) error bound on t */
+ mpfr_t erru, errs;
+--- mpfr-4.1.0/src/erandom.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/erandom.c 2021-02-11 12:48:27.354242922 +0000
+@@ -80,7 +80,7 @@
+
+ /* return an exponential random deviate with mean 1 as a MPFR */
+ int
+-mpfr_erandom (mpfr_t z, gmp_randstate_t r, mpfr_rnd_t rnd)
++mpfr_erandom (mpfr_ptr z, gmp_randstate_t r, mpfr_rnd_t rnd)
+ {
+ mpfr_random_deviate_t x, p, q;
+ int inex;
+--- mpfr-4.1.0/src/fpif.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/fpif.c 2021-02-11 12:48:27.354242922 +0000
+@@ -291,7 +291,8 @@
+ * until one has integer types larger than 128 bits).
+ */
+ static unsigned char*
+-mpfr_fpif_store_exponent (unsigned char *buffer, size_t *buffer_size, mpfr_t x)
++mpfr_fpif_store_exponent (unsigned char *buffer, size_t *buffer_size,
++ mpfr_ptr x)
+ {
+ unsigned char *result;
+ mpfr_uexp_t uexp;
+@@ -372,7 +373,7 @@
+ * than 128 bits).
+ */
+ static int
+-mpfr_fpif_read_exponent_from_file (mpfr_t x, FILE * fh)
++mpfr_fpif_read_exponent_from_file (mpfr_ptr x, FILE * fh)
+ {
+ mpfr_exp_t exponent;
+ mpfr_uexp_t uexp;
+@@ -456,7 +457,7 @@
+ * format
+ */
+ static unsigned char*
+-mpfr_fpif_store_limbs (unsigned char *buffer, size_t *buffer_size, mpfr_t x)
++mpfr_fpif_store_limbs (unsigned char *buffer, size_t *buffer_size, mpfr_ptr x)
+ {
+ unsigned char *result;
+ mpfr_prec_t precision;
+@@ -492,7 +493,7 @@
+ * Assume buffer is not NULL.
+ */
+ static void
+-mpfr_fpif_read_limbs (mpfr_t x, unsigned char *buffer, size_t nb_byte)
++mpfr_fpif_read_limbs (mpfr_ptr x, unsigned char *buffer, size_t nb_byte)
+ {
+ size_t mp_bytes_per_limb;
+ size_t nb_partial_byte;
+@@ -522,7 +523,7 @@
+ * return 0 if successful
+ */
+ int
+-mpfr_fpif_export (FILE *fh, mpfr_t x)
++mpfr_fpif_export (FILE *fh, mpfr_ptr x)
+ {
+ int status;
+ unsigned char *buf;
+@@ -582,7 +583,7 @@
+ * Return 0 if the import was successful.
+ */
+ int
+-mpfr_fpif_import (mpfr_t x, FILE *fh)
++mpfr_fpif_import (mpfr_ptr x, FILE *fh)
+ {
+ int status;
+ mpfr_prec_t precision;
+--- mpfr-4.1.0/src/li2.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/li2.c 2021-02-11 12:48:27.354242922 +0000
+@@ -31,7 +31,7 @@
+ for determinating the relative error.
+ */
+ static int
+-li2_series (mpfr_t sum, mpfr_srcptr z, mpfr_rnd_t rnd_mode)
++li2_series (mpfr_ptr sum, mpfr_srcptr z, mpfr_rnd_t rnd_mode)
+ {
+ int i;
+ mpfr_t s, u, v, w;
+--- mpfr-4.1.0/src/lngamma.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/lngamma.c 2021-02-11 12:48:27.354242922 +0000
+@@ -31,7 +31,7 @@
+ precision should be >= 4.
+ */
+ static void
+-mpfr_gamma_alpha (mpfr_t s, mpfr_prec_t p)
++mpfr_gamma_alpha (mpfr_ptr s, mpfr_prec_t p)
+ {
+ MPFR_LOG_FUNC
+ (("p=%Pu", p),
+--- mpfr-4.1.0/src/mpfr-impl.h.orig 2020-06-10 21:50:12.000000000 +0000
++++ mpfr-4.1.0/src/mpfr-impl.h 2021-02-11 12:48:27.354242922 +0000
+@@ -2474,7 +2474,8 @@
+ __MPFR_DECLSPEC mpz_srcptr mpfr_bernoulli_cache (unsigned long);
+ __MPFR_DECLSPEC void mpfr_bernoulli_freecache (void);
+
+-__MPFR_DECLSPEC int mpfr_sincos_fast (mpfr_t, mpfr_t, mpfr_srcptr, mpfr_rnd_t);
++__MPFR_DECLSPEC int mpfr_sincos_fast (mpfr_ptr, mpfr_ptr, mpfr_srcptr,
++ mpfr_rnd_t);
+
+ __MPFR_DECLSPEC double mpfr_scale2 (double, int);
+
+@@ -2485,7 +2486,7 @@
+ mpfr_prec_t);
+
+ __MPFR_DECLSPEC void mpfr_mpz_init (mpz_ptr);
+-__MPFR_DECLSPEC void mpfr_mpz_init2 (mpz_t, mp_bitcnt_t);
++__MPFR_DECLSPEC void mpfr_mpz_init2 (mpz_ptr, mp_bitcnt_t);
+ __MPFR_DECLSPEC void mpfr_mpz_clear (mpz_ptr);
+
+ __MPFR_DECLSPEC int mpfr_odd_p (mpfr_srcptr);
+--- mpfr-4.1.0/src/mpfr.h.orig 2021-02-11 12:46:49.115316335 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-11 12:48:27.366242791 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0-p3"
++#define MPFR_VERSION_STRING "4.1.0-p4"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+@@ -781,8 +781,8 @@
+ __MPFR_DECLSPEC int mpfr_strtofr (mpfr_ptr, const char *, char **, int,
+ mpfr_rnd_t);
+
+-__MPFR_DECLSPEC void mpfr_round_nearest_away_begin (mpfr_t);
+-__MPFR_DECLSPEC int mpfr_round_nearest_away_end (mpfr_t, int);
++__MPFR_DECLSPEC void mpfr_round_nearest_away_begin (mpfr_ptr);
++__MPFR_DECLSPEC int mpfr_round_nearest_away_end (mpfr_ptr, int);
+
+ __MPFR_DECLSPEC size_t mpfr_custom_get_size (mpfr_prec_t);
+ __MPFR_DECLSPEC void mpfr_custom_init (void *, mpfr_prec_t);
+@@ -1080,10 +1080,12 @@
+ #define mpfr_set_uj_2exp __gmpfr_set_uj_2exp
+ #define mpfr_get_sj __gmpfr_mpfr_get_sj
+ #define mpfr_get_uj __gmpfr_mpfr_get_uj
+-__MPFR_DECLSPEC int mpfr_set_sj (mpfr_t, intmax_t, mpfr_rnd_t);
+-__MPFR_DECLSPEC int mpfr_set_sj_2exp (mpfr_t, intmax_t, intmax_t, mpfr_rnd_t);
+-__MPFR_DECLSPEC int mpfr_set_uj (mpfr_t, uintmax_t, mpfr_rnd_t);
+-__MPFR_DECLSPEC int mpfr_set_uj_2exp (mpfr_t, uintmax_t, intmax_t, mpfr_rnd_t);
++__MPFR_DECLSPEC int mpfr_set_sj (mpfr_ptr, intmax_t, mpfr_rnd_t);
++__MPFR_DECLSPEC int mpfr_set_sj_2exp (mpfr_ptr, intmax_t, intmax_t,
++ mpfr_rnd_t);
++__MPFR_DECLSPEC int mpfr_set_uj (mpfr_ptr, uintmax_t, mpfr_rnd_t);
++__MPFR_DECLSPEC int mpfr_set_uj_2exp (mpfr_ptr, uintmax_t, intmax_t,
++ mpfr_rnd_t);
+ __MPFR_DECLSPEC intmax_t mpfr_get_sj (mpfr_srcptr, mpfr_rnd_t);
+ __MPFR_DECLSPEC uintmax_t mpfr_get_uj (mpfr_srcptr, mpfr_rnd_t);
+
+--- mpfr-4.1.0/src/nrandom.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/nrandom.c 2021-02-11 12:48:27.354242922 +0000
+@@ -155,7 +155,7 @@
+
+ /* return a normal random deviate with mean 0 and variance 1 as a MPFR */
+ int
+-mpfr_nrandom (mpfr_t z, gmp_randstate_t r, mpfr_rnd_t rnd)
++mpfr_nrandom (mpfr_ptr z, gmp_randstate_t r, mpfr_rnd_t rnd)
+ {
+ mpfr_random_deviate_t x, p, q;
+ int inex;
+--- mpfr-4.1.0/src/pool.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/pool.c 2021-02-11 12:48:27.354242922 +0000
+@@ -35,7 +35,7 @@
+ static MPFR_THREAD_ATTR __mpz_struct mpz_tab[MPFR_POOL_NENTRIES];
+
+ MPFR_HOT_FUNCTION_ATTR void
+-mpfr_mpz_init (mpz_t z)
++mpfr_mpz_init (mpz_ptr z)
+ {
+ if (MPFR_LIKELY (n_alloc > 0))
+ {
+@@ -54,7 +54,7 @@
+ }
+
+ MPFR_HOT_FUNCTION_ATTR void
+-mpfr_mpz_init2 (mpz_t z, mp_bitcnt_t n)
++mpfr_mpz_init2 (mpz_ptr z, mp_bitcnt_t n)
+ {
+ /* The condition on n is used below as the argument n will be ignored if
+ the mpz_t is obtained from the MPFR stack of previously used mpz_t.
+@@ -82,7 +82,7 @@
+
+
+ MPFR_HOT_FUNCTION_ATTR void
+-mpfr_mpz_clear (mpz_t z)
++mpfr_mpz_clear (mpz_ptr z)
+ {
+ /* We only put objects with at most MPFR_POOL_MAX_SIZE in the mpz_t pool,
+ to avoid it takes too much memory (and anyway the speedup is mainly
+--- mpfr-4.1.0/src/random_deviate.c.orig 2021-02-11 12:43:51.789257562 +0000
++++ mpfr-4.1.0/src/random_deviate.c 2021-02-11 12:48:27.354242922 +0000
+@@ -64,7 +64,7 @@
+
+ /* allocate and set to (0,1) */
+ void
+-mpfr_random_deviate_init (mpfr_random_deviate_t x)
++mpfr_random_deviate_init (mpfr_random_deviate_ptr x)
+ {
+ mpz_init (x->f);
+ x->e = 0;
+@@ -72,21 +72,22 @@
+
+ /* reset to (0,1) */
+ void
+-mpfr_random_deviate_reset (mpfr_random_deviate_t x)
++mpfr_random_deviate_reset (mpfr_random_deviate_ptr x)
+ {
+ x->e = 0;
+ }
+
+ /* deallocate */
+ void
+-mpfr_random_deviate_clear (mpfr_random_deviate_t x)
++mpfr_random_deviate_clear (mpfr_random_deviate_ptr x)
+ {
+ mpz_clear (x->f);
+ }
+
+ /* swap two random deviates */
+ void
+-mpfr_random_deviate_swap (mpfr_random_deviate_t x, mpfr_random_deviate_t y)
++mpfr_random_deviate_swap (mpfr_random_deviate_ptr x,
++ mpfr_random_deviate_ptr y)
+ {
+ mpfr_random_size_t s;
+ unsigned long t;
+@@ -107,7 +108,7 @@
+
+ /* ensure x has at least k bits */
+ static void
+-random_deviate_generate (mpfr_random_deviate_t x, mpfr_random_size_t k,
++random_deviate_generate (mpfr_random_deviate_ptr x, mpfr_random_size_t k,
+ gmp_randstate_t r, mpz_t t)
+ {
+ /* Various compile time checks on mpfr_random_deviate_t */
+@@ -223,7 +224,7 @@
+
+ /* return position of leading bit, counting from 1 */
+ static mpfr_random_size_t
+-random_deviate_leading_bit (mpfr_random_deviate_t x, gmp_randstate_t r)
++random_deviate_leading_bit (mpfr_random_deviate_ptr x, gmp_randstate_t r)
+ {
+ mpfr_random_size_t l;
+ random_deviate_generate (x, W, r, 0);
+@@ -243,7 +244,7 @@
+
+ /* return kth bit of fraction, representing 2^-k */
+ int
+-mpfr_random_deviate_tstbit (mpfr_random_deviate_t x, mpfr_random_size_t k,
++mpfr_random_deviate_tstbit (mpfr_random_deviate_ptr x, mpfr_random_size_t k,
+ gmp_randstate_t r)
+ {
+ if (k == 0)
+@@ -256,7 +257,8 @@
+
+ /* compare two random deviates, x < y */
+ int
+-mpfr_random_deviate_less (mpfr_random_deviate_t x, mpfr_random_deviate_t y,
++mpfr_random_deviate_less (mpfr_random_deviate_ptr x,
++ mpfr_random_deviate_ptr y,
+ gmp_randstate_t r)
+ {
+ mpfr_random_size_t k = 1;
+@@ -280,7 +282,7 @@
+ /* set mpfr_t z = (neg ? -1 : 1) * (n + x) */
+ int
+ mpfr_random_deviate_value (int neg, unsigned long n,
+- mpfr_random_deviate_t x, mpfr_t z,
++ mpfr_random_deviate_ptr x, mpfr_ptr z,
+ gmp_randstate_t r, mpfr_rnd_t rnd)
+ {
+ /* r is used to add as many bits as necessary to match the precision of z */
+--- mpfr-4.1.0/src/random_deviate.h.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/random_deviate.h 2021-02-11 12:48:27.354242922 +0000
+@@ -76,7 +76,7 @@
+ /* set mpfr_t z = (neg ? -1 : 1) * (n + x) */
+ __MPFR_DECLSPEC int
+ mpfr_random_deviate_value (int, unsigned long,
+- mpfr_random_deviate_ptr, mpfr_t,
++ mpfr_random_deviate_ptr, mpfr_ptr,
+ gmp_randstate_t, mpfr_rnd_t);
+
+ #if defined(__cplusplus)
+--- mpfr-4.1.0/src/rndna.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/rndna.c 2021-02-11 12:48:27.354242922 +0000
+@@ -61,7 +61,7 @@
+ and prepares rop to give it one more bit of precision
+ and to save its old value within it. */
+ void
+-mpfr_round_nearest_away_begin (mpfr_t rop)
++mpfr_round_nearest_away_begin (mpfr_ptr rop)
+ {
+ mpfr_t tmp;
+ mp_size_t xsize;
+@@ -129,7 +129,7 @@
+ copying it back the result of the applied function
+ and performing additional roundings. */
+ int
+-mpfr_round_nearest_away_end (mpfr_t rop, int inex)
++mpfr_round_nearest_away_end (mpfr_ptr rop, int inex)
+ {
+ mpfr_t tmp;
+ mp_size_t xsize;
+--- mpfr-4.1.0/src/set_sj.c.orig 2020-06-01 10:39:52.000000000 +0000
++++ mpfr-4.1.0/src/set_sj.c 2021-02-11 12:48:27.354242922 +0000
+@@ -26,13 +26,13 @@
+ #ifdef _MPFR_H_HAVE_INTMAX_T
+
+ int
+-mpfr_set_sj (mpfr_t x, intmax_t j, mpfr_rnd_t rnd)
++mpfr_set_sj (mpfr_ptr x, intmax_t j, mpfr_rnd_t rnd)
+ {
+ return mpfr_set_sj_2exp (x, j, 0, rnd);
+ }
+
+ int
+-mpfr_set_sj_2exp (mpfr_t x, intmax_t j, intmax_t e, mpfr_rnd_t rnd)
++mpfr_set_sj_2exp (mpfr_ptr x, intmax_t j, intmax_t e, mpfr_rnd_t rnd)
+ {
+ if (j >= 0)
+ return mpfr_set_uj_2exp (x, j, e, rnd);
+--- mpfr-4.1.0/src/set_str.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/set_str.c 2021-02-11 12:48:27.354242922 +0000
+@@ -23,7 +23,7 @@
+ #include "mpfr-impl.h"
+
+ int
+-mpfr_set_str (mpfr_t x, const char *str, int base, mpfr_rnd_t rnd)
++mpfr_set_str (mpfr_ptr x, const char *str, int base, mpfr_rnd_t rnd)
+ {
+ char *p;
+
+--- mpfr-4.1.0/src/set_uj.c.orig 2020-06-01 10:39:52.000000000 +0000
++++ mpfr-4.1.0/src/set_uj.c 2021-02-11 12:48:27.354242922 +0000
+@@ -29,13 +29,13 @@
+ #define uintmaxpml (sizeof(uintmax_t) / sizeof(mp_limb_t))
+
+ int
+-mpfr_set_uj (mpfr_t x, uintmax_t j, mpfr_rnd_t rnd)
++mpfr_set_uj (mpfr_ptr x, uintmax_t j, mpfr_rnd_t rnd)
+ {
+ return mpfr_set_uj_2exp (x, j, 0, rnd);
+ }
+
+ int
+-mpfr_set_uj_2exp (mpfr_t x, uintmax_t j, intmax_t e, mpfr_rnd_t rnd)
++mpfr_set_uj_2exp (mpfr_ptr x, uintmax_t j, intmax_t e, mpfr_rnd_t rnd)
+ {
+ int cnt, inex;
+ mp_size_t i, k;
+--- mpfr-4.1.0/src/sin_cos.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/sin_cos.c 2021-02-11 12:48:27.354242922 +0000
+@@ -463,7 +463,7 @@
+ Return err such that the relative error is bounded by 2^err ulps.
+ */
+ static int
+-sincos_aux (mpfr_t s, mpfr_t c, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
++sincos_aux (mpfr_ptr s, mpfr_ptr c, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+ {
+ mpfr_prec_t prec_s, sh;
+ mpz_t Q, S, C, Q2, S2, C2, y;
+@@ -577,7 +577,7 @@
+ Assumes s differs from c.
+ */
+ int
+-mpfr_sincos_fast (mpfr_t s, mpfr_t c, mpfr_srcptr x, mpfr_rnd_t rnd)
++mpfr_sincos_fast (mpfr_ptr s, mpfr_ptr c, mpfr_srcptr x, mpfr_rnd_t rnd)
+ {
+ int inexs, inexc;
+ mpfr_t x_red, ts, tc;
+--- mpfr-4.1.0/src/strtofr.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/strtofr.c 2021-02-11 12:48:27.354242922 +0000
+@@ -226,7 +226,7 @@
+ BUT if it returns 0 (NAN or INF), the ternary value is also '0'
+ (ie NAN and INF are exact) */
+ static int
+-parse_string (mpfr_t x, struct parsed_string *pstr,
++parse_string (mpfr_ptr x, struct parsed_string *pstr,
+ const char **string, int base)
+ {
+ const char *str = *string;
+@@ -451,7 +451,7 @@
+ and the precision of x.
+ Returns the ternary value. */
+ static int
+-parsed_string_to_mpfr (mpfr_t x, struct parsed_string *pstr, mpfr_rnd_t rnd)
++parsed_string_to_mpfr (mpfr_ptr x, struct parsed_string *pstr, mpfr_rnd_t rnd)
+ {
+ mpfr_prec_t precx, prec, ysize_bits, pstr_size;
+ mpfr_exp_t exp;
+@@ -934,7 +934,7 @@
+ }
+
+ int
+-mpfr_strtofr (mpfr_t x, const char *string, char **end, int base,
++mpfr_strtofr (mpfr_ptr x, const char *string, char **end, int base,
+ mpfr_rnd_t rnd)
+ {
+ int res;
+--- mpfr-4.1.0/src/vasprintf.c.orig 2020-06-01 10:39:52.000000000 +0000
++++ mpfr-4.1.0/src/vasprintf.c 2021-02-11 12:48:27.354242922 +0000
+@@ -963,7 +963,7 @@
+ #define NDIGITS 8
+
+ MPFR_RETURNS_NONNULL static char *
+-mpfr_get_str_wrapper (mpfr_exp_t *exp, int base, size_t n, const mpfr_t op,
++mpfr_get_str_wrapper (mpfr_exp_t *exp, int base, size_t n, mpfr_srcptr op,
+ const struct printf_spec spec)
+ {
+ size_t ndigits;
+--- mpfr-4.1.0/src/version.c.orig 2021-02-11 12:46:49.115316335 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-11 12:48:27.370242746 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0-p3";
++ return "4.1.0-p4";
+ }
+--- mpfr-4.1.0/src/zeta.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/src/zeta.c 2021-02-11 12:48:27.354242922 +0000
+@@ -35,7 +35,7 @@
+ sum(tc[i]*product((s+2j)*(s+2j-1)/n^2,j=1..i-1), i=1..p)*s*n^(-s-1)
+ */
+ static void
+-mpfr_zeta_part_b (mpfr_t b, mpfr_srcptr s, int n, int p, mpfr_t *tc)
++mpfr_zeta_part_b (mpfr_ptr b, mpfr_srcptr s, int n, int p, mpfr_t *tc)
+ {
+ mpfr_t s1, d, u;
+ unsigned long n2;
+@@ -130,7 +130,7 @@
+ n - an integer
+ Output: sum - a floating-point number approximating sum(1/i^s, i=1..n-1) */
+ static void
+-mpfr_zeta_part_a (mpfr_t sum, mpfr_srcptr s, int n)
++mpfr_zeta_part_a (mpfr_ptr sum, mpfr_srcptr s, int n)
+ {
+ mpfr_t u, s1;
+ int i;
+@@ -158,7 +158,7 @@
+ Output: z - Zeta(s) rounded to the precision of z with direction rnd_mode
+ */
+ static int
+-mpfr_zeta_pos (mpfr_t z, mpfr_srcptr s, mpfr_rnd_t rnd_mode)
++mpfr_zeta_pos (mpfr_ptr z, mpfr_srcptr s, mpfr_rnd_t rnd_mode)
+ {
+ mpfr_t b, c, z_pre, f, s1;
+ double beta, sd, dnep;
+@@ -356,8 +356,8 @@
+ At input, p is Pi rounded down.
+ The comments in the code are for rnd = RNDD. */
+ static void
+-mpfr_reflection_overflow (mpfr_t z, mpfr_t s1, const mpfr_t s, mpfr_t y,
+- mpfr_t p, mpfr_rnd_t rnd)
++mpfr_reflection_overflow (mpfr_ptr z, mpfr_ptr s1, mpfr_srcptr s, mpfr_ptr y,
++ mpfr_ptr p, mpfr_rnd_t rnd)
+ {
+ mpz_t sint;
+
+@@ -432,7 +432,7 @@
+ }
+
+ int
+-mpfr_zeta (mpfr_t z, mpfr_srcptr s, mpfr_rnd_t rnd_mode)
++mpfr_zeta (mpfr_ptr z, mpfr_srcptr s, mpfr_rnd_t rnd_mode)
+ {
+ mpfr_t z_pre, s1, y, p;
+ long add;
+--- mpfr-4.1.0/tests/tcmp2.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tcmp2.c 2021-02-11 12:48:27.350242965 +0000
+@@ -24,7 +24,7 @@
+
+ /* set bit n of x to b, where bit 0 is the most significant one */
+ static void
+-set_bit (mpfr_t x, unsigned int n, int b)
++set_bit (mpfr_ptr x, unsigned int n, int b)
+ {
+ unsigned l;
+ mp_size_t xn;
+--- mpfr-4.1.0/tests/tdiv.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tdiv.c 2021-02-11 12:48:27.350242965 +0000
+@@ -369,7 +369,7 @@
+ /* given y = o(x/u), x, u, find the inexact flag by
+ multiplying y by u */
+ static int
+-get_inexact (mpfr_t y, mpfr_t x, mpfr_t u)
++get_inexact (mpfr_ptr y, mpfr_ptr x, mpfr_ptr u)
+ {
+ mpfr_t xx;
+ int inex;
+--- mpfr-4.1.0/tests/teq.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/teq.c 2021-02-11 12:48:27.350242965 +0000
+@@ -23,7 +23,7 @@
+ #include "mpfr-test.h"
+
+ static void
+-teq (mpfr_t x)
++teq (mpfr_ptr x)
+ {
+ mpfr_t y;
+ unsigned long k, px, mx;
+--- mpfr-4.1.0/tests/terandom_chisq.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/terandom_chisq.c 2021-02-11 12:48:27.350242965 +0000
+@@ -26,7 +26,7 @@
+ * exponential distribution. We only take differences of this function so the
+ * offset doesn't matter; here Phi(0) = 0. */
+ static void
+-exponential_cumulative (mpfr_t z, mpfr_t x, mpfr_rnd_t rnd)
++exponential_cumulative (mpfr_ptr z, mpfr_ptr x, mpfr_rnd_t rnd)
+ {
+ mpfr_neg (z, x, rnd);
+ mpfr_expm1 (z, z, rnd);
+@@ -43,7 +43,7 @@
+ * TAOCP, Vol 2, 3.3.1, Table 1. It more accurate than the similar formula,
+ * DLMF 8.11.10. */
+ static void
+-chisq_prob (mpfr_t q, long nu, mpfr_t chisqp)
++chisq_prob (mpfr_ptr q, long nu, mpfr_ptr chisqp)
+ {
+ mpfr_t t;
+ mpfr_rnd_t rnd;
+@@ -170,7 +170,7 @@
+ * this function. low precision means prec = 2, 3, or 4. High values of
+ * precision will result in integer overflow. */
+ static long
+-sequential (mpfr_t x)
++sequential (mpfr_ptr x)
+ {
+ long expt, prec;
+
+--- mpfr-4.1.0/tests/tfmma.c.orig 2020-03-24 13:47:38.000000000 +0000
++++ mpfr-4.1.0/tests/tfmma.c 2021-02-11 12:48:27.350242965 +0000
+@@ -24,7 +24,7 @@
+
+ /* check both mpfr_fmma and mpfr_fmms */
+ static void
+-random_test (mpfr_t a, mpfr_t b, mpfr_t c, mpfr_t d, mpfr_rnd_t rnd)
++random_test (mpfr_ptr a, mpfr_ptr b, mpfr_ptr c, mpfr_ptr d, mpfr_rnd_t rnd)
+ {
+ mpfr_t ref, res, ab, cd;
+ int inex_ref, inex_res;
+--- mpfr-4.1.0/tests/tfmod.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tfmod.c 2021-02-11 12:48:27.350242965 +0000
+@@ -62,8 +62,8 @@
+ }
+
+ static void
+-test_failed (mpfr_t erem, mpfr_t grem, int eret, int gret, mpfr_t x, mpfr_t y,
+- mpfr_rnd_t rnd)
++test_failed (mpfr_ptr erem, mpfr_ptr grem, int eret, int gret,
++ mpfr_ptr x, mpfr_ptr y, mpfr_rnd_t rnd)
+ {
+ printf ("error: mpfr_fmod (r, x, y, rnd)\n x = ");
+ mpfr_out_str (stdout, 10, 0, x, MPFR_RNDD);
+@@ -83,7 +83,7 @@
+ }
+
+ static void
+-check (mpfr_t r0, mpfr_t x, mpfr_t y, mpfr_rnd_t rnd)
++check (mpfr_ptr r0, mpfr_ptr x, mpfr_ptr y, mpfr_rnd_t rnd)
+ {
+ int inex0, inex1;
+ mpfr_t r1;
+--- mpfr-4.1.0/tests/tfprintf.c.orig 2020-06-01 10:39:52.000000000 +0000
++++ mpfr-4.1.0/tests/tfprintf.c 2021-02-11 12:48:27.350242965 +0000
+@@ -65,7 +65,7 @@
+ const int prec_max_printf = 5000;
+
+ static void
+-check (FILE *fout, const char *fmt, mpfr_t x)
++check (FILE *fout, const char *fmt, mpfr_ptr x)
+ {
+ if (mpfr_fprintf (fout, fmt, x) == -1)
+ {
+--- mpfr-4.1.0/tests/tgamma.c.orig 2020-06-01 00:15:37.000000000 +0000
++++ mpfr-4.1.0/tests/tgamma.c 2021-02-11 12:48:27.350242965 +0000
+@@ -890,7 +890,7 @@
+ computing with a working precision p2. Assume that x is not an
+ integer <= 2. */
+ static void
+-exp_lgamma (mpfr_t x, mpfr_prec_t p1, mpfr_prec_t p2)
++exp_lgamma (mpfr_ptr x, mpfr_prec_t p1, mpfr_prec_t p2)
+ {
+ mpfr_t yd, yu, zd, zu;
+ int inexd, inexu, sign;
+--- mpfr-4.1.0/tests/tnrandom_chisq.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tnrandom_chisq.c 2021-02-11 12:48:27.350242965 +0000
+@@ -26,7 +26,7 @@
+ * for the normal distribution. We only take differences of this function so
+ * the offset doesn't matter; here Phi(0) = 0. */
+ static void
+-normal_cumulative (mpfr_t z, mpfr_t x, mpfr_rnd_t rnd)
++normal_cumulative (mpfr_ptr z, mpfr_ptr x, mpfr_rnd_t rnd)
+ {
+ mpfr_sqrt_ui (z, 2, rnd);
+ mpfr_div (z, x, z, rnd);
+@@ -44,7 +44,7 @@
+ * TAOCP, Vol 2, 3.3.1, Table 1. It more accurate than the similar formula,
+ * DLMF 8.11.10. */
+ static void
+-chisq_prob (mpfr_t q, long nu, mpfr_t chisqp)
++chisq_prob (mpfr_ptr q, long nu, mpfr_ptr chisqp)
+ {
+ mpfr_t t;
+ mpfr_rnd_t rnd;
+@@ -166,7 +166,7 @@
+ * this function. low precision means prec = 2, 3, or 4. High values of
+ * precision will result in integer overflow. */
+ static long
+-sequential (mpfr_t x)
++sequential (mpfr_ptr x)
+ {
+ long expt, prec;
+
+--- mpfr-4.1.0/tests/tprintf.c.orig 2020-06-01 10:39:52.000000000 +0000
++++ mpfr-4.1.0/tests/tprintf.c 2021-02-11 12:48:27.350242965 +0000
+@@ -74,7 +74,7 @@
+ int stdout_redirect;
+
+ static void
+-check (const char *fmt, mpfr_t x)
++check (const char *fmt, mpfr_ptr x)
+ {
+ if (mpfr_printf (fmt, x) == -1)
+ {
+--- mpfr-4.1.0/tests/trint.c.orig 2020-02-12 13:04:50.000000000 +0000
++++ mpfr-4.1.0/tests/trint.c 2021-02-11 12:48:27.350242965 +0000
+@@ -367,7 +367,7 @@
+ #endif
+
+ static void
+-err (const char *str, mp_size_t s, mpfr_t x, mpfr_t y, mpfr_prec_t p,
++err (const char *str, mp_size_t s, mpfr_ptr x, mpfr_ptr y, mpfr_prec_t p,
+ mpfr_rnd_t r, int trint, int inexact)
+ {
+ printf ("Error: %s\ns = %u, p = %u, r = %s, trint = %d, inexact = %d\nx = ",
+--- mpfr-4.1.0/tests/tsinh_cosh.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tsinh_cosh.c 2021-02-11 12:48:27.350242965 +0000
+@@ -23,7 +23,7 @@
+ #include "mpfr-test.h"
+
+ static void
+-failed (mpfr_t x, mpfr_t esh, mpfr_t gsh, mpfr_t ech, mpfr_t gch)
++failed (mpfr_ptr x, mpfr_ptr esh, mpfr_ptr gsh, mpfr_ptr ech, mpfr_ptr gch)
+ {
+ printf ("error : mpfr_sinh_cosh (x) x = ");
+ mpfr_out_str (stdout, 10, 0, x, MPFR_RNDD);
+@@ -43,7 +43,7 @@
+
+ /* check against sinh, cosh */
+ static void
+-check (mpfr_t x, mpfr_rnd_t rnd)
++check (mpfr_ptr x, mpfr_rnd_t rnd)
+ {
+ mpfr_t s, c, sx, cx;
+ int isc, is, ic;
+--- mpfr-4.1.0/tests/tsqr.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tsqr.c 2021-02-11 12:48:27.350242965 +0000
+@@ -33,7 +33,7 @@
+
+ static void
+ error1 (mpfr_rnd_t rnd, mpfr_prec_t prec,
+- mpfr_t in, mpfr_t outmul, mpfr_t outsqr)
++ mpfr_t in, mpfr_ptr outmul, mpfr_ptr outsqr)
+ {
+ printf("ERROR: for %s and prec=%lu\nINPUT=", mpfr_print_rnd_mode(rnd),
+ (unsigned long) prec);
+@@ -44,7 +44,7 @@
+ }
+
+ static void
+-error2 (mpfr_rnd_t rnd, mpfr_prec_t prec, mpfr_t in, mpfr_t out,
++error2 (mpfr_rnd_t rnd, mpfr_prec_t prec, mpfr_ptr in, mpfr_ptr out,
+ int inexactmul, int inexactsqr)
+ {
+ printf("ERROR: for %s and prec=%lu\nINPUT=", mpfr_print_rnd_mode(rnd),
+--- mpfr-4.1.0/tests/tsum.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tsum.c 2021-02-11 12:48:27.350242965 +0000
+@@ -59,7 +59,7 @@
+ }
+
+ static void
+-get_exact_sum (mpfr_t sum, mpfr_t *tab, int n)
++get_exact_sum (mpfr_ptr sum, mpfr_t *tab, int n)
+ {
+ int i;
+
+@@ -1198,7 +1198,7 @@
+ }
+
+ static int
+-mpfr_sum_naive (mpfr_t s, mpfr_t *x, int n, mpfr_rnd_t rnd)
++mpfr_sum_naive (mpfr_ptr s, mpfr_t *x, int n, mpfr_rnd_t rnd)
+ {
+ int ret, i;
+ switch (n)
+--- mpfr-4.1.0/PATCHES.orig 2021-02-11 12:50:22.384987438 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-11 12:50:22.424987002 +0000
+@@ -0,0 +1 @@
++digamma-hugemem
+--- mpfr-4.1.0/VERSION.orig 2021-02-11 12:48:27.370242746 +0000
++++ mpfr-4.1.0/VERSION 2021-02-11 12:50:22.424987002 +0000
+@@ -1 +1 @@
+-4.1.0-p4
++4.1.0-p5
+--- mpfr-4.1.0/src/digamma.c.orig 2020-06-18 17:17:18.000000000 +0000
++++ mpfr-4.1.0/src/digamma.c 2021-02-11 12:50:22.412987133 +0000
+@@ -214,19 +214,27 @@
+ (("x[%Pu]=%.*Rg rnd=%d", mpfr_get_prec(x), mpfr_log_prec, x, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec(y), mpfr_log_prec, y, inex));
+
+- /* compute a precision q such that x+1 is exact */
+- if (MPFR_PREC(x) < MPFR_GET_EXP(x))
+- q = MPFR_EXP(x);
+- else
+- q = MPFR_PREC(x) + 1;
+-
+- /* for very large x, use |digamma(x) - log(x)| < 1/x < 2^(1-EXP(x)) */
+- if (MPFR_PREC(y) + 10 < MPFR_EXP(x))
++ /* For very large x, use |digamma(x) - log(x)| < 1/x < 2^(1-EXP(x)).
++ However, for a fixed value of GUARD, MPFR_CAN_ROUND() might fail
++ with probability 1/2^GUARD, in which case the default code will
++ fail since it requires x+1 to be exact, thus a huge precision if
++ x is huge. There are two workarounds:
++ * either perform a Ziv's loop, by increasing GUARD at each step.
++ However, this might fail if x is moderately large, in which case
++ more terms of the asymptotic expansion would be needed.
++ * implement a full asymptotic expansion (with Ziv's loop). */
++#define GUARD 30
++ if (MPFR_PREC(y) + GUARD < MPFR_EXP(x))
+ {
+ /* this ensures EXP(x) >= 3, thus x >= 4, thus log(x) > 1 */
+- mpfr_init2 (t, MPFR_PREC(y) + 10);
+- mpfr_log (t, x, MPFR_RNDZ);
+- if (MPFR_CAN_ROUND (t, MPFR_PREC(y) + 10, MPFR_PREC(y), rnd_mode))
++ mpfr_init2 (t, MPFR_PREC(y) + GUARD);
++ mpfr_log (t, x, MPFR_RNDN);
++ /* |t - digamma(x)| <= 1/2*ulp(t) + |digamma(x) - log(x)|
++ <= 1/2*ulp(t) + 2^(1-EXP(x))
++ <= 1/2*ulp(t) + 2^(-PREC(y)-GUARD)
++ <= ulp(t)
++ since |t| >= 1 thus ulp(t) >= 2^(1-PREC(y)-GUARD) */
++ if (MPFR_CAN_ROUND (t, MPFR_PREC(y) + GUARD, MPFR_PREC(y), rnd_mode))
+ {
+ inex = mpfr_set (y, t, rnd_mode);
+ mpfr_clear (t);
+@@ -235,6 +243,21 @@
+ mpfr_clear (t);
+ }
+
++ /* compute a precision q such that x+1 is exact */
++ if (MPFR_PREC(x) < MPFR_GET_EXP(x))
++ {
++ /* The goal of the first assertion is to let the compiler ignore
++ the second one when MPFR_EMAX_MAX <= MPFR_PREC_MAX. */
++ MPFR_ASSERTD (MPFR_EXP(x) <= MPFR_EMAX_MAX);
++ MPFR_ASSERTN (MPFR_EXP(x) <= MPFR_PREC_MAX);
++ q = MPFR_EXP(x);
++ }
++ else
++ q = MPFR_PREC(x) + 1;
++
++ /* FIXME: q can be much too large, e.g. equal to the maximum exponent! */
++ MPFR_LOG_MSG (("q=%Pu\n", q));
++
+ mpfr_init2 (x_plus_j, q);
+
+ mpfr_init2 (t, p);
+--- mpfr-4.1.0/src/mpfr.h.orig 2021-02-11 12:48:27.366242791 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-11 12:50:22.424987002 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0-p4"
++#define MPFR_VERSION_STRING "4.1.0-p5"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+--- mpfr-4.1.0/src/version.c.orig 2021-02-11 12:48:27.370242746 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-11 12:50:22.424987002 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0-p4";
++ return "4.1.0-p5";
+ }
+--- mpfr-4.1.0/tests/tdigamma.c.orig 2020-06-18 17:17:18.000000000 +0000
++++ mpfr-4.1.0/tests/tdigamma.c 2021-02-11 12:50:22.412987133 +0000
+@@ -49,12 +49,54 @@
+ mpfr_clear (y);
+ }
+
++/* With some GMP_CHECK_RANDOMIZE values, test_generic triggers an error
++ tests_addsize(): too much memory (576460752303432776 bytes)
++ Each time on prec = 200, n = 3, xprec = 140.
++ The following test is a more general testcase.
++*/
++static void
++bug20210206 (void)
++{
++#define NPREC 4
++ mpfr_t x, y[NPREC], z;
++ mpfr_exp_t emin, emax;
++ int i, precx, precy[NPREC] = { 200, 400, 520, 1416 };
++
++ emin = mpfr_get_emin ();
++ emax = mpfr_get_emax ();
++ set_emin (MPFR_EMIN_MIN);
++ set_emax (MPFR_EMAX_MAX);
++
++ for (i = 0; i < NPREC; i++)
++ mpfr_init2 (y[i], precy[i]);
++ mpfr_init2 (z, precy[0]);
++
++ for (precx = MPFR_PREC_MIN; precx < 150; precx++)
++ {
++ mpfr_init2 (x, precx);
++ mpfr_setmax (x, __gmpfr_emax);
++ for (i = 0; i < NPREC; i++)
++ mpfr_digamma (y[i], x, MPFR_RNDA);
++ mpfr_set (z, y[1], MPFR_RNDA);
++ MPFR_ASSERTN (mpfr_equal_p (y[0], z));
++ mpfr_clear (x);
++ }
++
++ for (i = 0; i < NPREC; i++)
++ mpfr_clear (y[i]);
++ mpfr_clear (z);
++
++ set_emin (emin);
++ set_emax (emax);
++}
++
+ int
+ main (int argc, char *argv[])
+ {
+ tests_start_mpfr ();
+
+ special ();
++ bug20210206 ();
+
+ test_generic (MPFR_PREC_MIN, 200, 20);
+
+--- mpfr-4.1.0/PATCHES.orig 2021-02-11 12:52:52.519350662 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-11 12:52:52.563350183 +0000
+@@ -0,0 +1 @@
++digamma-interm-zero
+--- mpfr-4.1.0/VERSION.orig 2021-02-11 12:50:22.424987002 +0000
++++ mpfr-4.1.0/VERSION 2021-02-11 12:52:52.563350183 +0000
+@@ -1 +1 @@
+-4.1.0-p5
++4.1.0-p6
+--- mpfr-4.1.0/src/digamma.c.orig 2021-02-11 12:50:22.412987133 +0000
++++ mpfr-4.1.0/src/digamma.c 2021-02-11 12:52:52.547350357 +0000
+@@ -296,21 +296,26 @@
+ errt = mpfr_digamma_approx (t, x_plus_j);
+ expt = MPFR_GET_EXP (t);
+ mpfr_sub (t, t, u, MPFR_RNDN);
+- if (MPFR_GET_EXP (t) < expt)
+- errt += expt - MPFR_EXP(t);
+- /* Warning: if u is zero (which happens when x_plus_j >= min at the
+- beginning of the while loop above), EXP(u) is not defined.
+- In this case we have no error from u. */
+- if (MPFR_NOTZERO(u) && MPFR_GET_EXP (t) < MPFR_GET_EXP (u))
+- erru += MPFR_EXP(u) - MPFR_EXP(t);
+- if (errt > erru)
+- errt = errt + 1;
+- else if (errt == erru)
+- errt = errt + 2;
+- else
+- errt = erru + 1;
+- if (MPFR_CAN_ROUND (t, p - errt, MPFR_PREC(y), rnd_mode))
+- break;
++ /* Warning! t may be zero (more likely in small precision). Note
++ that in this case, this is an exact zero, not an underflow. */
++ if (MPFR_NOTZERO(t))
++ {
++ if (MPFR_GET_EXP (t) < expt)
++ errt += expt - MPFR_EXP(t);
++ /* Warning: if u is zero (which happens when x_plus_j >= min at the
++ beginning of the while loop above), EXP(u) is not defined.
++ In this case we have no error from u. */
++ if (MPFR_NOTZERO(u) && MPFR_GET_EXP (t) < MPFR_GET_EXP (u))
++ erru += MPFR_EXP(u) - MPFR_EXP(t);
++ if (errt > erru)
++ errt = errt + 1;
++ else if (errt == erru)
++ errt = errt + 2;
++ else
++ errt = erru + 1;
++ if (MPFR_CAN_ROUND (t, p - errt, MPFR_PREC(y), rnd_mode))
++ break;
++ }
+ MPFR_ZIV_NEXT (loop, p);
+ mpfr_set_prec (t, p);
+ mpfr_set_prec (u, p);
+--- mpfr-4.1.0/src/mpfr.h.orig 2021-02-11 12:50:22.424987002 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-11 12:52:52.559350226 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0-p5"
++#define MPFR_VERSION_STRING "4.1.0-p6"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+--- mpfr-4.1.0/src/version.c.orig 2021-02-11 12:50:22.424987002 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-11 12:52:52.559350226 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0-p5";
++ return "4.1.0-p6";
+ }
+--- mpfr-4.1.0/tests/tdigamma.c.orig 2021-02-11 12:50:22.412987133 +0000
++++ mpfr-4.1.0/tests/tdigamma.c 2021-02-11 12:52:52.547350357 +0000
+@@ -90,6 +90,26 @@
+ set_emax (emax);
+ }
+
++/* another test that fails with GMP_CHECK_RANDOMIZE=1612741376857003
++ on revision 14398 */
++static void
++bug20210208 (void)
++{
++ mpfr_t x, y;
++ int inex;
++
++ mpfr_init2 (x, 73);
++ mpfr_init2 (y, 1);
++ mpfr_set_str (x, "1.4613470547060071827450", 10, MPFR_RNDN);
++ mpfr_clear_flags ();
++ inex = mpfr_digamma (y, x, MPFR_RNDU);
++ MPFR_ASSERTN (mpfr_cmp_si_2exp (y, -1, -12) == 0);
++ MPFR_ASSERTN (inex > 0);
++ MPFR_ASSERTN (__gmpfr_flags == MPFR_FLAGS_INEXACT);
++ mpfr_clear (x);
++ mpfr_clear (y);
++}
++
+ int
+ main (int argc, char *argv[])
+ {
+@@ -97,6 +117,7 @@
+
+ special ();
+ bug20210206 ();
++ bug20210208 ();
+
+ test_generic (MPFR_PREC_MIN, 200, 20);
+
+--- mpfr-4.1.0/PATCHES.orig 2021-02-11 12:53:38.382850990 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-11 12:53:38.426850512 +0000
+@@ -0,0 +1 @@
++jn-interm-zero
+--- mpfr-4.1.0/VERSION.orig 2021-02-11 12:52:52.563350183 +0000
++++ mpfr-4.1.0/VERSION 2021-02-11 12:53:38.426850512 +0000
+@@ -1 +1 @@
+-4.1.0-p6
++4.1.0-p7
+--- mpfr-4.1.0/src/jyn_asympt.c.orig 2020-07-10 10:33:32.000000000 +0000
++++ mpfr-4.1.0/src/jyn_asympt.c 2021-02-11 12:53:38.410850685 +0000
+@@ -69,6 +69,8 @@
+ MPFR_ZIV_INIT (loop, w);
+ for (;;)
+ {
++ int ok = 1;
++
+ mpfr_set_prec (c, w);
+ mpfr_init2 (s, w);
+ mpfr_init2 (P, w);
+@@ -92,6 +94,13 @@
+ /* now s approximates sin(z)+cos(z), and c approximates sin(z)-cos(z),
+ with total absolute error bounded by 2^(1-w). */
+
++ /* if s or c is zero, MPFR_GET_EXP will fail below */
++ if (MPFR_IS_ZERO(s) || MPFR_IS_ZERO(c))
++ {
++ ok = 0;
++ goto clear;
++ }
++
+ /* precompute 1/(8|z|) */
+ mpfr_si_div (iz, MPFR_IS_POS(z) ? 1 : -1, z, MPFR_RNDN); /* err <= 1 */
+ mpfr_div_2ui (iz, iz, 3, MPFR_RNDN);
+@@ -257,6 +266,9 @@
+ err = (err >= err2) ? err + 1 : err2 + 1;
+ /* the absolute error on c is bounded by 2^(err - w) */
+
++ err -= MPFR_GET_EXP (c);
++
++ clear:
+ mpfr_clear (s);
+ mpfr_clear (P);
+ mpfr_clear (Q);
+@@ -266,8 +278,7 @@
+ mpfr_clear (err_s);
+ mpfr_clear (err_u);
+
+- err -= MPFR_GET_EXP (c);
+- if (MPFR_LIKELY (MPFR_CAN_ROUND (c, w - err, MPFR_PREC(res), r)))
++ if (ok && MPFR_LIKELY (MPFR_CAN_ROUND (c, w - err, MPFR_PREC(res), r)))
+ break;
+ if (diverge != 0)
+ {
+--- mpfr-4.1.0/src/mpfr.h.orig 2021-02-11 12:52:52.559350226 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-11 12:53:38.422850555 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0-p6"
++#define MPFR_VERSION_STRING "4.1.0-p7"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+--- mpfr-4.1.0/src/version.c.orig 2021-02-11 12:52:52.559350226 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-11 12:53:38.426850512 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0-p6";
++ return "4.1.0-p7";
+ }
+--- mpfr-4.1.0/tests/tj0.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tj0.c 2021-02-11 12:53:38.410850685 +0000
+@@ -27,6 +27,25 @@
+ #define REDUCE_EMAX 262143 /* otherwise arg. reduction is too expensive */
+ #include "tgeneric.c"
+
++/* bug found in revision 14399 with GMP_CHECK_RANDOMIZE=1612721106588971 */
++static void
++bug20210208 (void)
++{
++ mpfr_t x, y;
++ int inex;
++
++ mpfr_init2 (x, 79);
++ mpfr_init2 (y, 1);
++ mpfr_set_str (x, "2.552495117262005805960565e+02", 10, MPFR_RNDN);
++ mpfr_clear_flags ();
++ inex = mpfr_j0 (y, x, MPFR_RNDZ);
++ MPFR_ASSERTN (mpfr_cmp_si_2exp (y, -1, -5) == 0);
++ MPFR_ASSERTN (inex > 0);
++ MPFR_ASSERTN (__gmpfr_flags == MPFR_FLAGS_INEXACT);
++ mpfr_clear (x);
++ mpfr_clear (y);
++}
++
+ int
+ main (int argc, char *argv[])
+ {
+@@ -35,6 +54,8 @@
+
+ tests_start_mpfr ();
+
++ bug20210208 ();
++
+ mpfr_init (x);
+ mpfr_init (y);
+
+--- mpfr-4.1.0/PATCHES.orig 2021-02-17 17:22:34.594973310 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-17 17:22:34.702972090 +0000
+@@ -0,0 +1 @@
++digamma-interm-zero2
+--- mpfr-4.1.0/VERSION.orig 2021-02-11 12:53:38.426850512 +0000
++++ mpfr-4.1.0/VERSION 2021-02-17 17:22:34.702972090 +0000
+@@ -1 +1 @@
+-4.1.0-p7
++4.1.0-p8
+--- mpfr-4.1.0/src/digamma.c.orig 2021-02-11 12:52:52.547350357 +0000
++++ mpfr-4.1.0/src/digamma.c 2021-02-17 17:22:34.690972226 +0000
+@@ -173,16 +173,19 @@
+ mpfr_digamma (v, u, MPFR_RNDN); /* error <= 1/2 ulp */
+ expv = MPFR_GET_EXP (v);
+ mpfr_sub (v, v, t, MPFR_RNDN);
+- if (MPFR_GET_EXP (v) < MPFR_GET_EXP (t))
+- e1 += MPFR_EXP(t) - MPFR_EXP(v); /* scale error for t wrt new v */
+- /* now take into account the 1/2 ulp error for v */
+- if (expv - MPFR_EXP(v) - 1 > e1)
+- e1 = expv - MPFR_EXP(v) - 1;
+- else
+- e1 ++;
+- e1 ++; /* rounding error for mpfr_sub */
+- if (MPFR_CAN_ROUND (v, p - e1, MPFR_PREC(y), rnd_mode))
+- break;
++ if (MPFR_NOTZERO(v))
++ {
++ if (MPFR_GET_EXP (v) < MPFR_GET_EXP (t))
++ e1 += MPFR_EXP(t) - MPFR_EXP(v); /* scale error for t wrt new v */
++ /* now take into account the 1/2 ulp error for v */
++ if (expv - MPFR_EXP(v) - 1 > e1)
++ e1 = expv - MPFR_EXP(v) - 1;
++ else
++ e1 ++;
++ e1 ++; /* rounding error for mpfr_sub */
++ if (MPFR_CAN_ROUND (v, p - e1, MPFR_PREC(y), rnd_mode))
++ break;
++ }
+ MPFR_ZIV_NEXT (loop, p);
+ mpfr_set_prec (t, p);
+ mpfr_set_prec (v, p);
+@@ -416,10 +419,8 @@
+ }
+ }
+
+- if (MPFR_IS_NEG(x))
+- inex = mpfr_digamma_reflection (y, x, rnd_mode);
+ /* if x < 1/2 we use the reflection formula */
+- else if (MPFR_EXP(x) < 0)
++ if (MPFR_IS_NEG(x) || MPFR_EXP(x) < 0)
+ inex = mpfr_digamma_reflection (y, x, rnd_mode);
+ else
+ inex = mpfr_digamma_positive (y, x, rnd_mode);
+--- mpfr-4.1.0/src/mpfr.h.orig 2021-02-11 12:53:38.422850555 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-17 17:22:34.702972090 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0-p7"
++#define MPFR_VERSION_STRING "4.1.0-p8"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+--- mpfr-4.1.0/src/version.c.orig 2021-02-11 12:53:38.426850512 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-17 17:22:34.702972090 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0-p7";
++ return "4.1.0-p8";
+ }
+--- mpfr-4.1.0/tests/tdigamma.c.orig 2021-02-11 12:52:52.547350357 +0000
++++ mpfr-4.1.0/tests/tdigamma.c 2021-02-17 17:22:34.690972226 +0000
+@@ -110,6 +110,26 @@
+ mpfr_clear (y);
+ }
+
++/* another test that fails with GMP_CHECK_RANDOMIZE=1613197421465830
++ on revision 14429 */
++static void
++bug20210215 (void)
++{
++ mpfr_t x, y;
++ int inex;
++
++ mpfr_init2 (x, 510);
++ mpfr_init2 (y, 4);
++ mpfr_set_str (x, "-8.2923051438433494998166335341807999322052669984208422481227138906096000469898717007386115912802685588348601663465077353194268894939972221117314512518182580e+35", 10, MPFR_RNDN);
++ mpfr_clear_flags ();
++ inex = mpfr_digamma (y, x, MPFR_RNDU);
++ MPFR_ASSERTN (mpfr_cmp_ui0 (y, 88) == 0);
++ MPFR_ASSERTN (inex > 0);
++ MPFR_ASSERTN (__gmpfr_flags == MPFR_FLAGS_INEXACT);
++ mpfr_clear (x);
++ mpfr_clear (y);
++}
++
+ int
+ main (int argc, char *argv[])
+ {
+@@ -118,6 +138,7 @@
+ special ();
+ bug20210206 ();
+ bug20210208 ();
++ bug20210215 ();
+
+ test_generic (MPFR_PREC_MIN, 200, 20);
+
+--- mpfr-4.1.0/PATCHES.orig 2021-02-17 17:25:46.396981483 +0000
++++ mpfr-4.1.0/PATCHES 2021-02-17 17:25:46.440981068 +0000
+@@ -0,0 +1 @@
++jyn_asympt-interm-zero
+--- mpfr-4.1.0/VERSION.orig 2021-02-17 17:22:34.702972090 +0000
++++ mpfr-4.1.0/VERSION 2021-02-17 17:25:46.440981068 +0000
+@@ -1 +1 @@
+-4.1.0-p8
++4.1.0-p9
+--- mpfr-4.1.0/src/jyn_asympt.c.orig 2021-02-11 12:53:38.410850685 +0000
++++ mpfr-4.1.0/src/jyn_asympt.c 2021-02-17 17:25:46.424981219 +0000
+@@ -69,7 +69,7 @@
+ MPFR_ZIV_INIT (loop, w);
+ for (;;)
+ {
+- int ok = 1;
++ int ok = 0;
+
+ mpfr_set_prec (c, w);
+ mpfr_init2 (s, w);
+@@ -96,10 +96,7 @@
+
+ /* if s or c is zero, MPFR_GET_EXP will fail below */
+ if (MPFR_IS_ZERO(s) || MPFR_IS_ZERO(c))
+- {
+- ok = 0;
+- goto clear;
+- }
++ goto clear; /* with ok=0 */
+
+ /* precompute 1/(8|z|) */
+ mpfr_si_div (iz, MPFR_IS_POS(z) ? 1 : -1, z, MPFR_RNDN); /* err <= 1 */
+@@ -227,6 +224,9 @@
+ mpfr_sub (s, c, s, MPFR_RNDN);
+ #endif
+ }
++ if (MPFR_IS_ZERO(s))
++ goto clear; /* with ok=0 */
++ ok = 1;
+ if ((n & 2) != 0)
+ mpfr_neg (s, s, MPFR_RNDN);
+ if (MPFR_GET_EXP (s) > err)
+--- mpfr-4.1.0/src/mpfr.h.orig 2021-02-17 17:22:34.702972090 +0000
++++ mpfr-4.1.0/src/mpfr.h 2021-02-17 17:25:46.436981105 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.1.0-p8"
++#define MPFR_VERSION_STRING "4.1.0-p9"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+--- mpfr-4.1.0/src/version.c.orig 2021-02-17 17:22:34.702972090 +0000
++++ mpfr-4.1.0/src/version.c 2021-02-17 17:25:46.440981068 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.1.0-p8";
++ return "4.1.0-p9";
+ }
+--- mpfr-4.1.0/tests/mpfr-test.h.orig 2020-06-29 13:57:32.000000000 +0000
++++ mpfr-4.1.0/tests/mpfr-test.h 2021-02-17 17:25:46.424981219 +0000
+@@ -191,6 +191,8 @@
+
+ #define mpfr_cmp0(x,y) (MPFR_ASSERTN (!MPFR_IS_NAN (x) && !MPFR_IS_NAN (y)), mpfr_cmp (x,y))
+ #define mpfr_cmp_ui0(x,i) (MPFR_ASSERTN (!MPFR_IS_NAN (x)), mpfr_cmp_ui (x,i))
++#define mpfr_cmp_si_2exp0(x,i,e) (MPFR_ASSERTN (!MPFR_IS_NAN (x)), \
++ mpfr_cmp_si_2exp (x,i,e))
+
+ /* define CHECK_EXTERNAL if you want to check mpfr against another library
+ with correct rounding. You'll probably have to modify mpfr_print_raw()
+--- mpfr-4.1.0/tests/tj1.c.orig 2020-01-08 18:11:13.000000000 +0000
++++ mpfr-4.1.0/tests/tj1.c 2021-02-17 17:25:46.424981219 +0000
+@@ -55,14 +55,14 @@
+ /* since |x| is just above 2^e, |j1(x)| is just above 2^(e-1),
+ thus y should be 2^(e-1) and the inexact flag should be
+ of opposite sign of x */
+- MPFR_ASSERTN(mpfr_cmp_si_2exp (y, sign, e - 1) == 0);
++ MPFR_ASSERTN(mpfr_cmp_si_2exp0 (y, sign, e - 1) == 0);
+ MPFR_ASSERTN(VSIGN (inex) * sign < 0);
+ }
+ else
+ {
+ /* here |y| should be 0.5*2^emin and the inexact flag should
+ have the sign of x */
+- MPFR_ASSERTN(mpfr_cmp_si_2exp (y, sign, e) == 0);
++ MPFR_ASSERTN(mpfr_cmp_si_2exp0 (y, sign, e) == 0);
+ MPFR_ASSERTN(VSIGN (inex) * sign > 0);
+ }
+ }
+@@ -72,6 +72,26 @@
+ mpfr_clear (y);
+ }
+
++/* a test that fails with GMP_CHECK_RANDOMIZE=1613146232984428
++ on revision 14429 */
++static void
++bug20210215 (void)
++{
++ mpfr_t x, y;
++ int inex;
++
++ mpfr_init2 (x, 221);
++ mpfr_init2 (y, 1);
++ mpfr_set_str (x, "1.6484611511696130037307738844228498447763863563070374544054791168614e+01", 10, MPFR_RNDN);
++ mpfr_clear_flags ();
++ inex = mpfr_j1 (y, x, MPFR_RNDZ);
++ MPFR_ASSERTN (mpfr_cmp_si_2exp0 (y, -1, -9) == 0);
++ MPFR_ASSERTN (inex > 0);
++ MPFR_ASSERTN (__gmpfr_flags == MPFR_FLAGS_INEXACT);
++ mpfr_clear (x);
++ mpfr_clear (y);
++}
++
+ int
+ main (int argc, char *argv[])
+ {
+@@ -79,6 +99,8 @@
+
+ tests_start_mpfr ();
+
++ bug20210215 ();
++
+ test_small ();
+
+ mpfr_init (x);
diff --git a/sources b/sources
new file mode 100644
index 0000000..c55e4d9
--- /dev/null
+++ b/sources
@@ -0,0 +1,24 @@
+0737a44e5a8a6f005f5da335e8b6551f 4ti2-1.6.9.tar.gz
+1edbbbc5b5a8238eb3ab7773d3e4fcf4 Csdp-6.2.0.tgz
+5f7c0270602f8f4c85ec3be69ed8e462 M2-emacs-8615029.tar.gz
+d4c39877ba95556d9affaf24c44da989 Macaulay2-1.21.tar.gz
+fd63f5a26a91a8c87812b597c8176626 Macaulay2-icons.tar.xz
+1c1bd2cbe79acf298d41634494440174 TOPCOM-0.17.8.tar.gz
+b544a1400423ee71388a5c4c907eb3b1 cddlib-094m.tar.gz
+5de43fbe9c17220bb140263abcca3012 cohomCalg-0.32.tar.gz
+91031b6019ebbf9d4617cb79e5d14974 factory-4.2.1.tar.gz
+484e62dd7326a4af6e2072f4edbc769f flint-2.8.4.tar.gz
+2848fd987ea9de3221e6d3cf127ea7e4 frobby_v0.9.0.tar.gz
+3d033d0914acc642696f045f089d4afc gfan0.6.2.tar.gz
+975b8397dcc89e22bb72a3696c339aa2 givaro-4.1.1.tar.gz
+a5b12cf4403ea46d8d10d9b7ebfbe7a2 glpk-4.59.tar.gz
+ecd1fa65e7de707cd5c00bdac56022cd gtest-1.10.0.tar.gz
+de95babce9a7bf6afbdaa094a5743d24 lapack-3.9.0.tgz
+f76a73580b48fd9a5fa447fb3897c818 libfplll-5.2.0.tar.gz
+4466b2daf6f0aec5c1f5530cedf77126 linbox-1.6.3.tar.gz
+313d8c02390698541b353b9fd2652b8d lrslib-071a.tar.gz
+da242c618b547069bd68700982fd94fe mathic-1.0.tar.gz
+3902bf21f72dfc5abd77f23dd2174b3c mathicgb-1.0.tar.gz
+4464e8ef59a2b8988fa18c20227572fa memtailor-1.0.tar.gz
+bdd3d5efba9c17da8d83a35ec552baef mpfr-4.1.0.tar.xz
+3edbd98a3b599c4d0a31afd5484ffbdd mpsolve-3.2.1.tar.gz