mirror of
https://src.fedoraproject.org/rpms/sagemath.git
synced 2025-04-22 03:39:03 -04:00
Also: - Drop LANGUAGES variable setting, now ignored by the sagemath build system. - Drop unused SAGE_CBLAS variable from /usr/bin/sage. - Do not force the C locale when launching sagemath. - Allow the user to override SAGE_DEBUG in /usr/bin/sage. - Add -ecm, -giac, and -latte patches to fix interactions with external tools. - Add -sigfpe patch from upstream. - Fix flask_autoindex and flask_openid imports in sagenb. - Add Education category to the desktop file (bz 1624545). - Fix SINGULAR_SO variable in /usr/bin/sage (bz 1636759 and 1655248). - Invoke twistd-2 instead of twistd (bz 1640890). - Improve jupyter integration (bz 1663165). - Move existing jupyter integration into the notebook subpackage. - Require python-jupyter-filesystem instead of owning its directories. - Drop one more remnant of the F24 to F25 upgrade fixup.
143 lines
4.9 KiB
Diff
143 lines
4.9 KiB
Diff
--- src/sage/libs/ecl.pyx.orig 2018-08-03 05:10:08.000000000 -0600
|
|
+++ src/sage/libs/ecl.pyx 2019-01-18 11:33:53.642921158 -0700
|
|
@@ -16,7 +16,7 @@ from __future__ import print_function, a
|
|
#adapted to work with pure Python types.
|
|
|
|
from libc.stdlib cimport abort
|
|
-from libc.signal cimport SIGINT, SIGBUS, SIGSEGV, SIGCHLD
|
|
+from libc.signal cimport SIGINT, SIGBUS, SIGSEGV, SIGCHLD, SIGFPE
|
|
from libc.signal cimport raise_ as signal_raise
|
|
from posix.signal cimport sigaction, sigaction_t
|
|
cimport cysignals.signals
|
|
@@ -48,9 +48,14 @@ cdef extern from "eclsig.h":
|
|
void ecl_sig_off()
|
|
cdef sigaction_t ecl_sigint_handler
|
|
cdef sigaction_t ecl_sigbus_handler
|
|
+ cdef sigaction_t ecl_sigfpe_handler
|
|
cdef sigaction_t ecl_sigsegv_handler
|
|
cdef mpz_t ecl_mpz_from_bignum(cl_object obj)
|
|
cdef cl_object ecl_bignum_from_mpz(mpz_t num)
|
|
+ cdef int fegetexcept()
|
|
+ cdef int feenableexcept(int)
|
|
+ cdef int fedisableexcept(int)
|
|
+ cdef int ecl_feflags
|
|
|
|
cdef cl_object string_to_object(char * s):
|
|
return ecl_read_from_cstring(s)
|
|
@@ -239,6 +244,7 @@ def init_ecl():
|
|
global ecl_has_booted
|
|
cdef char *argv[1]
|
|
cdef sigaction_t sage_action[32]
|
|
+ cdef int sage_fpes
|
|
cdef int i
|
|
|
|
if ecl_has_booted:
|
|
@@ -258,6 +264,8 @@ def init_ecl():
|
|
for i in range(1,32):
|
|
sigaction(i, NULL, &sage_action[i])
|
|
|
|
+ sage_fpes = fegetexcept()
|
|
+
|
|
#initialize ECL
|
|
ecl_set_option(ECL_OPT_SIGNAL_HANDLING_THREAD, 0)
|
|
cl_boot(1, argv)
|
|
@@ -265,8 +273,12 @@ def init_ecl():
|
|
#save signal handler from ECL
|
|
sigaction(SIGINT, NULL, &ecl_sigint_handler)
|
|
sigaction(SIGBUS, NULL, &ecl_sigbus_handler)
|
|
+ sigaction(SIGFPE, NULL, &ecl_sigfpe_handler)
|
|
sigaction(SIGSEGV, NULL, &ecl_sigsegv_handler)
|
|
|
|
+ #save ECL's floating point exception flags
|
|
+ ecl_feflags = fegetexcept()
|
|
+
|
|
#verify that no SIGCHLD handler was installed
|
|
cdef sigaction_t sig_test
|
|
sigaction(SIGCHLD, NULL, &sig_test)
|
|
@@ -277,6 +289,9 @@ def init_ecl():
|
|
for i in range(1,32):
|
|
sigaction(i, &sage_action[i], NULL)
|
|
|
|
+ fedisableexcept(ecl_feflags)
|
|
+ feenableexcept(sage_fpes)
|
|
+
|
|
#initialise list of objects and bind to global variable
|
|
# *SAGE-LIST-OF-OBJECTS* to make it rooted in the reachable tree for the GC
|
|
list_of_objects=cl_cons(Cnil,cl_cons(Cnil,Cnil))
|
|
--- src/sage/libs/eclsig.h.orig 2018-08-03 05:10:08.000000000 -0600
|
|
+++ src/sage/libs/eclsig.h 2019-01-18 11:33:53.642921158 -0700
|
|
@@ -9,25 +9,59 @@
|
|
|
|
|
|
#include <signal.h>
|
|
+
|
|
+/* Rummage around to determine how ECL was configured */
|
|
+#define ECL_AVOID_FPE_H /* Prevent some local includes */
|
|
+#include <ecl/config-internal.h>
|
|
+
|
|
+#ifdef HAVE_FENV_H
|
|
+#include <fenv.h>
|
|
+#ifndef FE_ALL_EXCEPT
|
|
+#define FE_ALL_EXCEPT FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INVALID
|
|
+#endif
|
|
+#else
|
|
+#ifndef FE_ALL_EXCEPT
|
|
+#define FE_ALL_EXCEPT 0
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#ifndef HAVE_FEENABLEEXCEPT
|
|
+/* These are GNU extensions */
|
|
+#define fegetexcept() 0
|
|
+#define feenablexcept(flags)
|
|
+#define fdisableexcept(flags)
|
|
+#endif
|
|
+
|
|
static struct sigaction ecl_sigint_handler;
|
|
static struct sigaction ecl_sigbus_handler;
|
|
+static struct sigaction ecl_sigfpe_handler;
|
|
static struct sigaction ecl_sigsegv_handler;
|
|
static struct sigaction sage_sigint_handler;
|
|
static struct sigaction sage_sigbus_handler;
|
|
+static struct sigaction sage_sigfpe_handler;
|
|
static struct sigaction sage_sigsegv_handler;
|
|
+static int ecl_feflags;
|
|
+static int sage_feflags;
|
|
|
|
static inline void set_ecl_signal_handler(void)
|
|
{
|
|
sigaction(SIGINT, &ecl_sigint_handler, &sage_sigint_handler);
|
|
sigaction(SIGBUS, &ecl_sigbus_handler, &sage_sigbus_handler);
|
|
+ sigaction(SIGFPE, &ecl_sigfpe_handler, &sage_sigfpe_handler);
|
|
sigaction(SIGSEGV, &ecl_sigsegv_handler, &sage_sigsegv_handler);
|
|
+ /* sage_feflags should be 0; we don't set them otherwise */
|
|
+ sage_feflags = fedisableexcept(FE_ALL_EXCEPT);
|
|
+ feenableexcept(ecl_feflags);
|
|
}
|
|
|
|
static inline void unset_ecl_signal_handler(void)
|
|
{
|
|
sigaction(SIGINT, &sage_sigint_handler, NULL);
|
|
sigaction(SIGBUS, &sage_sigbus_handler, NULL);
|
|
+ sigaction(SIGFPE, &sage_sigfpe_handler, NULL);
|
|
sigaction(SIGSEGV, &sage_sigsegv_handler, NULL);
|
|
+ ecl_feflags = fedisableexcept(FE_ALL_EXCEPT);
|
|
+ feenableexcept(sage_feflags);
|
|
}
|
|
|
|
/* This MUST be a macro because sig_on() must be in the same
|
|
--- src/sage/libs/mpmath/ext_impl.pyx.orig 2018-08-03 05:10:08.000000000 -0600
|
|
+++ src/sage/libs/mpmath/ext_impl.pyx 2019-01-18 11:33:53.643921141 -0700
|
|
@@ -164,9 +164,9 @@ opts_double_precision.rounding = ROUND_N
|
|
opts_mini_prec.prec = 5
|
|
opts_mini_prec.rounding = ROUND_D
|
|
|
|
-cdef double _double_inf = float("1e300") * float("1e300")
|
|
-cdef double _double_ninf = -_double_inf
|
|
-cdef double _double_nan = _double_inf - _double_inf
|
|
+cdef double _double_inf = float("inf")
|
|
+cdef double _double_ninf = float("-inf")
|
|
+cdef double _double_nan = float("nan")
|
|
|
|
cdef inline void MPF_init(MPF *x):
|
|
"""Allocate space and set value to zero.
|