Add -buildroot patch and only build cython interfaces once.

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.
This commit is contained in:
Jerry James 2019-01-19 09:07:04 -07:00
parent 1a0bd1afc6
commit 87098dcde0
8 changed files with 301 additions and 56 deletions

13
sagemath-buildroot.patch Normal file
View file

@ -0,0 +1,13 @@
diff -up src/setup.py.orig src/setup.py
--- src/setup.py.orig 2018-08-29 08:35:19.955079610 -0600
+++ src/setup.py 2019-01-18 11:28:06.915666783 -0700
@@ -386,6 +386,9 @@ class sage_build_cython(Command):
with open(self._version_file, 'w') as f:
f.write(self._version_stamp)
+ # Remove buildroot paths from the generated files
+ subprocess.check_call(["find", "build/cythonized/sage", "-type", "f", "-exec", "sed", "-i", "s|@@BUILDROOT@@||g", "{}", "+"])
+
# Finally, copy relevant cythonized files from build/cythonized
# tree into the build-lib tree
for (dst_dir, src_files) in self.get_cythonized_package_files():

12
sagemath-ecm.patch Normal file
View file

@ -0,0 +1,12 @@
diff -up src/sage/interfaces/ecm.py.orig src/sage/interfaces/ecm.py
--- src/sage/interfaces/ecm.py.orig 2018-08-03 05:10:08.000000000 -0600
+++ src/sage/interfaces/ecm.py 2019-01-18 11:03:25.492710113 -0700
@@ -256,7 +256,7 @@ class ECM(SageObject):
"""
print("Enter numbers to run ECM on them.")
print("Press control-C to exit.")
- os.system(self._cmd)
+ os.system(' '.join(self._cmd))
# Recommended settings from
# http://www.mersennewiki.org/index.php/Elliptic_Curve_Method

15
sagemath-giac.patch Normal file
View file

@ -0,0 +1,15 @@
diff -up src/sage/interfaces/giac.py.orig src/sage/interfaces/giac.py
--- src/sage/interfaces/giac.py.orig 2018-08-03 05:10:08.000000000 -0600
+++ src/sage/interfaces/giac.py 2019-01-18 11:04:10.255917393 -0700
@@ -616,10 +616,7 @@ If you got giac from the spkg then ``$PR
'4\n3'
sage: s='g(x):={\nx+1;\nx+2;\n}'
sage: giac(s)
- (x)->{
- x+1;
- x+2;
- }
+ (x)->[x+1,x+2]
sage: giac.g(5)
7
"""

View file

@ -1,19 +0,0 @@
diff -up src/sage/modular/arithgroup/farey.cpp.orig src/sage/modular/arithgroup/farey.cpp
--- src/sage/modular/arithgroup/farey.cpp.orig 2017-11-08 06:03:07.383885084 -0500
+++ src/sage/modular/arithgroup/farey.cpp 2017-11-08 06:03:18.271885501 -0500
@@ -136,6 +136,7 @@ operator*(const SL2Z& M, const vector<mp
return result;
}
+#if 0
inline
mpz_class
floor(const mpq_class r) {
@@ -146,6 +147,7 @@ floor(const mpq_class r) {
return result - 1;
}
}
+#endif
inline
mpz_class lcm(const mpz_class& a, const mpz_class& b) {

21
sagemath-latte.patch Normal file
View file

@ -0,0 +1,21 @@
diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py
--- src/sage/interfaces/latte.py.orig 2018-08-03 05:10:08.000000000 -0600
+++ src/sage/interfaces/latte.py 2019-01-18 11:32:37.859220860 -0700
@@ -112,7 +112,7 @@ def count(arg, ehrhart_polynomial=False,
# Check that LattE is present
Latte().require()
- args = ['count']
+ args = ['latte-count']
if ehrhart_polynomial and multivariate_generating_function:
raise ValueError
if ehrhart_polynomial:
@@ -304,7 +304,7 @@ def integrate(arg, polynomial=None, algo
# Check that LattE is present
Latte().require()
- args = ['integrate']
+ args = ['latte-integrate']
got_polynomial = True if polynomial is not None else False

View file

@ -1,15 +1,22 @@
diff -up build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig build/pkgs/sagenb/src/sagenb/flask_version/base.py diff -up build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig build/pkgs/sagenb/src/sagenb/flask_version/base.py
--- build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig 2018-01-24 04:17:47.000000000 -0700 --- build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig 2018-01-24 04:17:47.000000000 -0700
+++ build/pkgs/sagenb/src/sagenb/flask_version/base.py 2018-08-29 08:44:38.823169061 -0600 +++ build/pkgs/sagenb/src/sagenb/flask_version/base.py 2019-01-18 15:02:10.691836714 -0700
@@ -7,8 +7,6 @@ from functools import partial @@ -7,13 +7,11 @@ from functools import partial
from flask import Flask, Blueprint, url_for, request, session, redirect, g, make_response, current_app, render_template from flask import Flask, Blueprint, url_for, request, session, redirect, g, make_response, current_app, render_template
from .decorators import login_required, guest_or_login_required, with_lock from .decorators import login_required, guest_or_login_required, with_lock
from .decorators import global_lock from .decorators import global_lock
-# Make flask use the old session foo from <=flask-0.9 -# Make flask use the old session foo from <=flask-0.9
-from flask_oldsessions import OldSecureCookieSessionInterface -from flask_oldsessions import OldSecureCookieSessionInterface
from flask.ext.autoindex import AutoIndex -from flask.ext.autoindex import AutoIndex
+from flask_autoindex import AutoIndex
from sage.env import SAGE_SRC, SAGE_DOC from sage.env import SAGE_SRC, SAGE_DOC
SRC = os.path.join(SAGE_SRC, 'sage')
-from flask.ext.openid import OpenID
+from flask_openid import OpenID
from flask_babel import Babel, gettext, ngettext, lazy_gettext, get_locale
from sagenb.misc.misc import SAGENB_ROOT, DATA, translations_path, N_, nN_, unicode_str
from json import dumps
@@ -28,7 +26,6 @@ class SageNBFlask(Flask): @@ -28,7 +26,6 @@ class SageNBFlask(Flask):
def __init__(self, *args, **kwds): def __init__(self, *args, **kwds):
self.startup_token = kwds.pop('startup_token', None) self.startup_token = kwds.pop('startup_token', None)
@ -68,7 +75,7 @@ diff -up build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig build/pkgs/sagenb/sr
diff -up build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py diff -up build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py
--- build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig 2018-05-22 10:16:28.000000000 -0600 --- build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig 2018-05-22 10:16:28.000000000 -0600
+++ build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py 2018-08-29 08:44:38.824169048 -0600 +++ build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py 2019-01-18 16:37:26.438289912 -0700
@@ -53,12 +53,11 @@ sagenb.notebook.misc.DIR = %(cwd)r #We s @@ -53,12 +53,11 @@ sagenb.notebook.misc.DIR = %(cwd)r #We s
# Flask # # Flask #
######### #########
@ -86,3 +93,12 @@ diff -up build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig build/pkgs/s
def save_notebook(notebook): def save_notebook(notebook):
print("Quitting all running worksheets...") print("Quitting all running worksheets...")
@@ -336,7 +335,7 @@ reactor.addSystemEventTrigger('before',
profilecmd = '--profile=%s --profiler=cprofile --savestats'%self.profile_file(kw['profile'])
else:
profilecmd=''
- cmd = 'twistd %s --pidfile="%s" -ny "%s"' % (profilecmd, kw['pidfile'], conf)
+ cmd = 'twistd-2 %s --pidfile="%s" -ny "%s"' % (profilecmd, kw['pidfile'], conf)
return cmd
def get_old_settings(self, conf):

143
sagemath-sigfpe.patch Normal file
View file

@ -0,0 +1,143 @@
--- 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.

View file

@ -1,6 +1,6 @@
%global __provides_exclude_from .*/site-packages/.*\\.so %global __provides_exclude_from .*/site-packages/.*\\.so
# This package install python files in nonstandard places # This package installs python files in nonstandard places
%global _python_bytecompile_extra 0 %global _python_bytecompile_extra 0
%bcond_with bundled_pexpect %bcond_with bundled_pexpect
@ -86,7 +86,7 @@
Name: sagemath Name: sagemath
Summary: A free open-source mathematics software system Summary: A free open-source mathematics software system
Version: 8.3 Version: 8.3
Release: 1%{?dist} Release: 2%{?dist}
# The file ${SAGE_ROOT}/COPYING.txt is the upstream license breakdown file # The file ${SAGE_ROOT}/COPYING.txt is the upstream license breakdown file
# Additionally, every $files section has a comment with the license name # Additionally, every $files section has a comment with the license name
# before files with that license # before files with that license
@ -97,8 +97,11 @@ Source1: gprc.expect
# Follow maxima's ExclusiveArch # Follow maxima's ExclusiveArch
ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9 ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9
# Upstream uses mpir not gmp, but the rpm package is tailored to use gmp # Fix ecm interact() command
Patch1: %{name}-gmp.patch Patch0: %{name}-ecm.patch
# Adapt a giac doctest to recent versions of giac
Patch1: %{name}-giac.patch
# Set of patches to work with system wide packages # Set of patches to work with system wide packages
Patch2: %{name}-scripts.patch Patch2: %{name}-scripts.patch
@ -145,6 +148,9 @@ Patch11: %{name}-cremona.patch
# http://pallini.di.uniroma1.it/ # http://pallini.di.uniroma1.it/
Patch13: %{name}-nauty.patch Patch13: %{name}-nauty.patch
# remove the buildroot path from Cython output
Patch14: %{name}-buildroot.patch
# correct path to Lfunction include # correct path to Lfunction include
# update c++ standard to fix FTBFS # update c++ standard to fix FTBFS
Patch15: %{name}-lcalc.patch Patch15: %{name}-lcalc.patch
@ -186,6 +192,12 @@ Patch26: %{name}-atlas.patch
# Adapt to recent versions of eclib # Adapt to recent versions of eclib
Patch27: %{name}-eclib.patch Patch27: %{name}-eclib.patch
# Fix paths to latte-integrale binaries
Patch28: %{name}-latte.patch
# Upstream fixes for random SIGFPEs due to ecl messing with the fp state
Patch29: %{name}-sigfpe.patch
BuildRequires: 4ti2 BuildRequires: 4ti2
BuildRequires: arb-devel BuildRequires: arb-devel
BuildRequires: atlas-devel BuildRequires: atlas-devel
@ -644,6 +656,7 @@ This package contains the Turkish %{name} documentation.
%package notebook %package notebook
Summary: The Sage Notebook Summary: The Sage Notebook
Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: python-jupyter-filesystem
%description notebook %description notebook
The Sage Notebook is a web-based graphical user interface for The Sage Notebook is a web-based graphical user interface for
@ -825,6 +838,7 @@ pushd build/pkgs/widgetsnbextension
popd popd
%endif %endif
%patch0
%patch1 %patch1
%patch2 %patch2
%patch3 %patch3
@ -837,6 +851,7 @@ popd
%patch10 %patch10
%patch11 %patch11
%patch13 %patch13
%patch14
%patch15 %patch15
%patch16 %patch16
%patch17 %patch17
@ -855,12 +870,15 @@ popd
%patch25 %patch25
%patch26 %patch26
%patch27 %patch27
%patch28
%patch29
sed -e 's|@@SAGE_ROOT@@|%{SAGE_ROOT}|' \ sed -e 's|@@SAGE_ROOT@@|%{SAGE_ROOT}|' \
-e 's|@@SAGE_DOC@@|%{SAGE_DOC}|' \ -e 's|@@SAGE_DOC@@|%{SAGE_DOC}|' \
-i src/sage/env.py -i src/sage/env.py
sed -e 's|@@CYSIGNALS@@|%{python2_sitearch}/cysignals|' \ sed -e 's|@@CYSIGNALS@@|%{python2_sitearch}/cysignals|' \
-e 's|@@BUILDROOT@@|%{buildroot}|' \
-i src/setup.py -i src/setup.py
sed -e "/flask-oldsessions/d" \ sed -e "/flask-oldsessions/d" \
@ -889,6 +907,7 @@ grep -FrlZ '#!%{_bindir}/env python' | \
xargs -0 sed -i 's,#!%{_bindir}/env python,#!%{__python2},' xargs -0 sed -i 's,#!%{_bindir}/env python,#!%{__python2},'
grep -FrlZ '#!%{_bindir}/env sage-python23' | \ grep -FrlZ '#!%{_bindir}/env sage-python23' | \
xargs -0 sed -i 's,#!%{_bindir}/env sage-python23,#!%{__python2},' xargs -0 sed -i 's,#!%{_bindir}/env sage-python23,#!%{__python2},'
grep -FrlZ 'sage-python23' | xargs -0 sed -i 's,sage-python23,#!%{__python2},'
grep -FrlZ '#!%{_bindir}/env' | \ grep -FrlZ '#!%{_bindir}/env' | \
xargs -0 sed -i 's,#!%{_bindir}/env ,#!%{_bindir}/,' xargs -0 sed -i 's,#!%{_bindir}/env ,#!%{_bindir}/,'
grep -rlZ '#!%{_bindir}/python$' | xargs -0 sed -i 's,#!%{_bindir}/python$,&2,' grep -rlZ '#!%{_bindir}/python$' | xargs -0 sed -i 's,#!%{_bindir}/python$,&2,'
@ -906,6 +925,12 @@ sed -e "s|'%{_bindir}/env', 'which'|'%{_bindir}/which'|" \
-i build/pkgs/ipython/src/IPython/utils/_process_posix.py -i build/pkgs/ipython/src/IPython/utils/_process_posix.py
%endif %endif
# Fix twistd invocation; the python3 version has no suffix
sed -i 's/exec twistd/&-2/' src/bin/sage
# GAP does not have enough memory to load the entire workspace
sed -i 's/64m/128m/' src/sage/libs/gap/util.pyx
######################################################################## ########################################################################
%build %build
export CC=%{__cc} export CC=%{__cc}
@ -1005,16 +1030,6 @@ pushd build/pkgs/rubiks/src
make %{?_smp_mflags} CC="gcc -fPIC" CXX="g++ -fPIC" CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" make %{?_smp_mflags} CC="gcc -fPIC" CXX="g++ -fPIC" CFLAGS="%{optflags}" CXXFLAGS="%{optflags}"
popd popd
# Remove buildroot reference from cython comments
perl -pi -e 's|%{buildroot}||g;' `find src/build/cythonized -type f`
# Try hard to remove buildroot from binaries
rm -f `grep -lr "%{buildroot}" src/build/lib.linux-*/`
rm -f `grep -lr "%{buildroot}" src/build/temp.linux-*/`
pushd src
%__python2 ./setup.py build
popd
# last build command # last build command
rm -fr $DOT_SAGE rm -fr $DOT_SAGE
@ -1068,8 +1083,8 @@ pushd src/ext
if [ $COUNT -gt 0 ]; then if [ $COUNT -gt 0 ]; then
cp -far $dir $SAGE_ETC cp -far $dir $SAGE_ETC
fi fi
cp -far pari $SAGE_ETC
done done
cp -far pari $SAGE_ETC
cp -fa %{SOURCE1} $SAGE_ETC cp -fa %{SOURCE1} $SAGE_ETC
popd popd
@ -1274,7 +1289,7 @@ popd
cat > %{buildroot}%{_bindir}/sage << EOF cat > %{buildroot}%{_bindir}/sage << EOF
#!/bin/bash -i #!/bin/bash -i
export CUR=\`pwd\` export CUR=\$PWD
##export DOT_SAGE="\$HOME/.sage" ##export DOT_SAGE="\$HOME/.sage"
mkdir -p \$DOT_SAGE/{maxima,sympow,tmp} mkdir -p \$DOT_SAGE/{maxima,sympow,tmp}
export SAGE_TESTDIR=\$DOT_SAGE/tmp export SAGE_TESTDIR=\$DOT_SAGE/tmp
@ -1286,23 +1301,22 @@ export SAGE_ETC="$SAGE_ETC"
export SAGE_SRC="%{buildroot}%{SAGE_SRC}" export SAGE_SRC="%{buildroot}%{SAGE_SRC}"
##export SAGE_DOC="$SAGE_DOC" ##export SAGE_DOC="$SAGE_DOC"
##export SAGE_DOC_SRC="\$SAGE_DOC" ##export SAGE_DOC_SRC="\$SAGE_DOC"
##export SAGE_PKGS="\$SAGE_LOCAL//var/lib/sage/installed" ##export SAGE_PKGS="\$SAGE_LOCAL/var/lib/sage/installed"
module load 4ti2-%{_arch} module load 4ti2-%{_arch}
module load lrcalc-%{_arch} module load lrcalc-%{_arch}
module load surf-geometry-%{_arch} module load surf-geometry-%{_arch}
export PATH=$SAGE_LOCAL/bin:\$PATH export PATH=$SAGE_LOCAL/bin:\$PATH
export SINGULAR_DATA_DIR=%{_datadir} export SINGULAR_DATA_DIR=%{_datadir}
export SINGULAR_BIN_DIR=%{_libdir}/Singular export SINGULAR_BIN_DIR=%{_libdir}/Singular
export SINGULAR_SO=%{_libdir}/libSingular-4.1.1.so export SINGULAR_SO=%{_libdir}/libSingular-4.1.0.so
##export PYTHONPATH="$SAGE_PYTHONPATH:\$SAGE_LOCAL/bin" ##export PYTHONPATH="$SAGE_PYTHONPATH:\$SAGE_LOCAL/bin"
export SAGE_CBLAS=blas
export SAGE_FORTRAN=%{_bindir}/gfortran export SAGE_FORTRAN=%{_bindir}/gfortran
export SAGE_FORTRAN_LIB=\`gfortran --print-file-name=libgfortran.so\` export SAGE_FORTRAN_LIB=\`gfortran --print-file-name=libgfortran.so\`
export SYMPOW_DIR="\$DOT_SAGE/sympow" export SYMPOW_DIR="\$DOT_SAGE/sympow"
export LC_ALL=C.UTF-8
export LD_LIBRARY_PATH=\$SAGE_ROOT/lib:\$LD_LIBRARY_PATH export LD_LIBRARY_PATH=\$SAGE_ROOT/lib:\$LD_LIBRARY_PATH
# Required for sage -gdb # Required for sage -gdb
export SAGE_DEBUG=no : \${SAGE_DEBUG:=no}
export SAGE_DEBUG
$SAGE_LOCAL/bin/sage "\$@" $SAGE_LOCAL/bin/sage "\$@"
EOF EOF
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -1361,7 +1375,7 @@ pushd src/doc
export SAGE_DOC_SRC=$SAGE_DOC export SAGE_DOC_SRC=$SAGE_DOC
# python -m sage_setup.docbuild # python -m sage_setup.docbuild
# Build with an X server running, required by some doc builders # Build with an X server running, required by some doc builders
SAGE_NUM_THREADS=2 LANGUAGES="ca de en fr hu it ja pt ru tr" \ SAGE_NUM_THREADS=2 \
xvfb-run -a -n 1 %__python2 -m docbuild --no-pdf-links -k all html -j xvfb-run -a -n 1 %__python2 -m docbuild --no-pdf-links -k all html -j
rm -f %{buildroot}%{SAGE_SRC}/doc rm -f %{buildroot}%{SAGE_SRC}/doc
ln -sf %{SAGE_DOC} %{buildroot}%{SAGE_SRC}/doc ln -sf %{SAGE_DOC} %{buildroot}%{SAGE_SRC}/doc
@ -1426,7 +1440,7 @@ Exec=sage
Icon=%{name} Icon=%{name}
Terminal=true Terminal=true
Type=Application Type=Application
Categories=Science;Math; Categories=Education;Science;Math;
EOF EOF
desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop
@ -1519,6 +1533,18 @@ chmod +x %{buildroot}%{SAGE_LOCAL}/bin/sage-list-packages
# Byte compile python files in nonstandard places # Byte compile python files in nonstandard places
%py_byte_compile %{__python2} %{buildroot}%{_texmf_main}/tex/latex/sagetex %py_byte_compile %{__python2} %{buildroot}%{_texmf_main}/tex/latex/sagetex
#------------------------------------------------------------------------
# Jupyter integration
mkdir -p %{buildroot}%{_datadir}/jupyter/kernels/sagemath
pushd %{buildroot}%{_datadir}/jupyter/kernels/sagemath
ln -s %{_docdir}/%{name}/html/en doc
ln -s %{SAGE_ETC}/notebook-ipython/logo-64x64.png logo-64x64.png
ln -s %{SAGE_ETC}/notebook-ipython/logo.svg logo.svg
cat > kernel.json << EOF
{"display_name": "SageMath %{version}", "argv": ["%{_bindir}/sage", "--python", "-m", "sage.repl.ipython_kernel", "-f", "{connection_file}"]}
EOF
popd
# last install command # last install command
rm -fr $DOT_SAGE rm -fr $DOT_SAGE
@ -1581,14 +1607,6 @@ rm -fr $DOT_SAGE
%if %{with bundled_ipywidgets} %if %{with bundled_ipywidgets}
%{SAGE_PYTHONPATH}/ipywidgets %{SAGE_PYTHONPATH}/ipywidgets
%endif %endif
%if %{with bundled_widgetsnbextension}
%dir %{_sysconfdir}/jupyter
%dir %{_sysconfdir}/jupyter/nbconfig
%dir %{_sysconfdir}/jupyter/nbconfig/notebook.d
%config(noreplace) %{_sysconfdir}/jupyter/nbconfig/notebook.d/*.json
%{_datadir}/jupyter/
%{python2_sitelib}/widgetsnbextension*
%endif
#------------------------------------------------------------------------ #------------------------------------------------------------------------
%files data %files data
@ -1697,6 +1715,10 @@ rm -fr $DOT_SAGE
# with docs # with docs
%endif %endif
#------------------------------------------------------------------------
%files jupyter
%{_datadir}/jupyter/kernels/sagemath/
#------------------------------------------------------------------------ #------------------------------------------------------------------------
%files notebook %files notebook
%{SAGE_ETC}/notebook-ipython %{SAGE_ETC}/notebook-ipython
@ -1722,7 +1744,6 @@ rm -fr $DOT_SAGE
%{python2_sitearch}/sagenb/data/json %{python2_sitearch}/sagenb/data/json
# Symbolic link to $_jsdir/mathjax # Symbolic link to $_jsdir/mathjax
%{python2_sitearch}/sagenb/data/mathjax %{python2_sitearch}/sagenb/data/mathjax
%ghost %{python2_sitearch}/sagenb/data/mathjax.rpmmoved
# Empty (do not run doctests flag file) # Empty (do not run doctests flag file)
%{python2_sitearch}/sagenb/data/nodoctest.py* %{python2_sitearch}/sagenb/data/nodoctest.py*
# BSD # BSD
@ -1765,6 +1786,12 @@ rm -fr $DOT_SAGE
%lang(pt_BR) %{python2_sitearch}/sagenb/translations/pt_BR %lang(pt_BR) %{python2_sitearch}/sagenb/translations/pt_BR
%lang(ru_RU) %{python2_sitearch}/sagenb/translations/ru_RU %lang(ru_RU) %{python2_sitearch}/sagenb/translations/ru_RU
%lang(uk_UA) %{python2_sitearch}/sagenb/translations/uk_UA %lang(uk_UA) %{python2_sitearch}/sagenb/translations/uk_UA
%if %{with bundled_widgetsnbextension}
%config(noreplace) %{_sysconfdir}/jupyter/nbconfig/notebook.d/*.json
%{_datadir}/jupyter/nbextensions/
%{python2_sitelib}/widgetsnbextension*
%endif
%{_datadir}/jupyter/kernels/sagemath/
#------------------------------------------------------------------------ #------------------------------------------------------------------------
%files notebook-export %files notebook-export
@ -1794,6 +1821,23 @@ rm -fr $DOT_SAGE
######################################################################## ########################################################################
%changelog %changelog
* Sat Jan 19 2019 Jerry James <loganjerry@gmail.com> - 8.3-2
- Add -buildroot patch and only build cython interfaces once
- 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
* Sat Sep 22 2018 Jerry James <loganjerry@gmail.com> - 8.3-1 * Sat Sep 22 2018 Jerry James <loganjerry@gmail.com> - 8.3-1
- Update to sagemath 8.3 (bz 1612867) - Update to sagemath 8.3 (bz 1612867)
- Drop -lrslib, -gap-hap, and -flask patches - Drop -lrslib, -gap-hap, and -flask patches