summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonio Rojas2019-07-29 18:56:29 +0000
committerAntonio Rojas2019-07-29 18:56:29 +0000
commitd61282b6e9770852a19e584ea7f1d8f9a9434d0e (patch)
tree1e2f894dd51ea5c85c63e9779b59d513e27b28a9
parenta5aed407bb825d6f354e645775a1082135e82698 (diff)
downloadaur-d61282b6e9770852a19e584ea7f1d8f9a9434d0e.tar.gz
Kill sage-env
-rw-r--r--.SRCINFO14
-rw-r--r--PKGBUILD22
-rw-r--r--meataxe-tables.patch34
-rw-r--r--no-sage-env.patch302
-rw-r--r--sagemath-env.patch132
-rw-r--r--sagemath-linbox-1.6.patch144
6 files changed, 491 insertions, 157 deletions
diff --git a/.SRCINFO b/.SRCINFO
index d09a104d254b..ad77c6347bbb 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = sagemath-git
pkgdesc = Open Source Mathematics Software, free alternative to Magma, Maple, Mathematica, and Matlab
- pkgver = 8.9.beta2.r0.g95ea5f39d9
+ pkgver = 8.9.beta4.r0.g1537fe511b
pkgrel = 1
url = http://www.sagemath.org
arch = x86_64
@@ -72,7 +72,7 @@ pkgbase = sagemath-git
optdepends = python2-pkgconfig: to compile cython code
optdepends = jmol: 3D plots
optdepends = sage-notebook: Flask notebook interface (deprecated)
- optdepends = sagemath-doc: Documentation and inline help
+ optdepends = sagemath-doc: HTML documentation
optdepends = python2-igraph: igraph backend for graph theory
optdepends = coin-or-cbc: COIN backend for numerical computations
optdepends = coin-or-csdp: for computing Lovász theta-function of graphs
@@ -96,7 +96,6 @@ pkgbase = sagemath-git
optdepends = python2-pycosat: picosat SAT solver
optdepends = python2-pip: to install optional packages with sage -pip
source = git://git.sagemath.org/sage.git#branch=develop
- source = sagemath-env.patch
source = package.patch
source = latte-count.patch
source = sagemath-python3-notebook.patch
@@ -106,8 +105,9 @@ pkgbase = sagemath-git
source = sagemath-singular-4.1.2.patch
source = sagemath-ecl-sigfpe.patch
source = sagemath-linbox-1.6.patch
+ source = meataxe-tables.patch
+ source = no-sage-env.patch
sha256sums = SKIP
- sha256sums = 7177ff3e3f27939d45210e7e69da110441830a6e2279ee7d7e4fca26db99c3f4
sha256sums = 328e45e78065b5f6527174bda48cfff6828acbf107c2535b0a9a92c3ceb35842
sha256sums = 1a82372a96ffd5e6d475b0e620935967ce5eb9b4484607d39da90824a77b07c4
sha256sums = e554cdf689100c787a5fbcb7fe281cd68bef081e08bd58df8be1d113a4665d7e
@@ -116,14 +116,16 @@ pkgbase = sagemath-git
sha256sums = 4c6df9e4e5a7b29ecf6189eda3e5a79f69b6e1b4d29c1b9559663149b8c0af96
sha256sums = 961bfb5694b67d425d21240d71490cb71714b5207c23448c89be0966512ff8f9
sha256sums = a42f3b152b1aedb8abf16bc70971419919d1fe30328574e7fef8305f9d07d938
- sha256sums = 81fc39e39e8508f742ccc784efd0492fd04474cee75edf7bd3cbea43edd49b2e
+ sha256sums = 96ab7783d8758a5237b26cf096be8fb03df4e88dc6d08bbd94dff7e18c91314e
+ sha256sums = 8305de73d7a3c68ceaa001866ff933c4fa3a0706700ade2e25046f58270bc6db
+ sha256sums = 657750f0d856d936143c352acb00db7c4852e413315e216fe68c9f35515253fb
pkgname = sagemath-git
optdepends = cython2: to compile cython code
optdepends = python2-pkgconfig: to compile cython code
optdepends = jmol: 3D plots
optdepends = sage-notebook: Flask notebook interface (deprecated)
- optdepends = sagemath-doc: Documentation and inline help
+ optdepends = sagemath-doc: HTML documentation
optdepends = python2-igraph: igraph backend for graph theory
optdepends = coin-or-cbc: COIN backend for numerical computations
optdepends = coin-or-csdp: for computing Lovász theta-function of graphs
diff --git a/PKGBUILD b/PKGBUILD
index 34f0a933c77b..7e90e56c9c0d 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -7,7 +7,7 @@
pkgbase=sagemath-git
pkgname=(sagemath-git sagemath-jupyter-git)
-pkgver=8.9.beta2.r0.g95ea5f39d9
+pkgver=8.9.beta4.r0.g1537fe511b
pkgrel=1
pkgdesc="Open Source Mathematics Software, free alternative to Magma, Maple, Mathematica, and Matlab"
arch=(x86_64)
@@ -20,7 +20,7 @@ depends=(ipython2 palp brial cliquer maxima-ecl gfan sympow nauty python2-rpy2 p
iml libgiac libhomfly libbraiding symmetrica three.js)
optdepends=('cython2: to compile cython code' 'python2-pkgconfig: to compile cython code'
'jmol: 3D plots' 'sage-notebook: Flask notebook interface (deprecated)'
- 'sagemath-doc: Documentation and inline help' 'python2-igraph: igraph backend for graph theory'
+ 'sagemath-doc: HTML documentation' 'python2-igraph: igraph backend for graph theory'
'coin-or-cbc: COIN backend for numerical computations' 'coin-or-csdp: for computing Lovász theta-function of graphs'
'buckygen: for generating fullerene graphs' 'plantri: for generating some classes of graphs' 'benzene: for generating fusenes and benzenoids'
'ffmpeg: to export animations to video' 'imagemagick: to show animations'
@@ -35,7 +35,6 @@ optdepends=('cython2: to compile cython code' 'python2-pkgconfig: to compile cyt
makedepends=(cython2 boost ratpoints python2-jinja coin-or-cbc sirocco
mcqd coxeter bliss tdlib python2-pkgconfig shared_meataxe libfes primecount git)
source=(git://git.sagemath.org/sage.git#branch=develop
- sagemath-env.patch
package.patch
latte-count.patch
sagemath-python3-notebook.patch
@@ -44,9 +43,10 @@ source=(git://git.sagemath.org/sage.git#branch=develop
sagemath-cremona.patch
sagemath-singular-4.1.2.patch
sagemath-ecl-sigfpe.patch
- sagemath-linbox-1.6.patch)
+ sagemath-linbox-1.6.patch
+ meataxe-tables.patch
+ no-sage-env.patch)
sha256sums=('SKIP'
- '7177ff3e3f27939d45210e7e69da110441830a6e2279ee7d7e4fca26db99c3f4'
'328e45e78065b5f6527174bda48cfff6828acbf107c2535b0a9a92c3ceb35842'
'1a82372a96ffd5e6d475b0e620935967ce5eb9b4484607d39da90824a77b07c4'
'e554cdf689100c787a5fbcb7fe281cd68bef081e08bd58df8be1d113a4665d7e'
@@ -55,7 +55,9 @@ sha256sums=('SKIP'
'4c6df9e4e5a7b29ecf6189eda3e5a79f69b6e1b4d29c1b9559663149b8c0af96'
'961bfb5694b67d425d21240d71490cb71714b5207c23448c89be0966512ff8f9'
'a42f3b152b1aedb8abf16bc70971419919d1fe30328574e7fef8305f9d07d938'
- '81fc39e39e8508f742ccc784efd0492fd04474cee75edf7bd3cbea43edd49b2e')
+ '96ab7783d8758a5237b26cf096be8fb03df4e88dc6d08bbd94dff7e18c91314e'
+ '8305de73d7a3c68ceaa001866ff933c4fa3a0706700ade2e25046f58270bc6db'
+ '657750f0d856d936143c352acb00db7c4852e413315e216fe68c9f35515253fb')
pkgver() {
cd sage
@@ -68,8 +70,6 @@ prepare(){
# Arch-specific patches
# assume all optional packages are installed
patch -p0 -i ../package.patch
-# set env variables
- patch -p0 -i ../sagemath-env.patch
# don't list optional packages when running tests
patch -p0 -i ../test-optional.patch
# use correct latte-count binary name
@@ -88,6 +88,10 @@ prepare(){
patch -p1 -i ../sagemath-ecl-sigfpe.patch
# fix build with linbox 1.6 https://trac.sagemath.org/ticket/26932
patch -p1 -i ../sagemath-linbox-1.6.patch
+# use meataxe package's multiplication tables instead of generating them at runtime https://trac.sagemath.org/ticket/28188
+ patch -p1 -i ../meataxe-tables.patch
+# make sage work without sage-env https://trac.sagemath.org/ticket/28225
+ patch -p1 -i ../no-sage-env.patch
# use python2
sed -e 's|sage-python23|python2|' -e 's|#!/usr/bin/env python\b|#!/usr/bin/env python2|' -i src/bin/*
@@ -119,7 +123,7 @@ package_sagemath-git() {
mkdir -p "$pkgdir"/usr/bin
cp bin/{sage,math-readline} "$pkgdir"/usr/bin
- for _i in cachegrind callgrind cleaner coverage coverageall cython env eval fixdoctests grep grepdoc inline-fortran ipynb2rst \
+ for _i in cachegrind callgrind cleaner coverage coverageall cython eval fixdoctests grep grepdoc inline-fortran ipynb2rst \
ipython massif maxima.lisp native-execute notebook num-threads.py omega open preparse python rst2sws rst2txt run \
run-cython runtests startuptime.py sws2rst valgrind version.sh
do
diff --git a/meataxe-tables.patch b/meataxe-tables.patch
new file mode 100644
index 000000000000..57d42c35219f
--- /dev/null
+++ b/meataxe-tables.patch
@@ -0,0 +1,34 @@
+diff --git a/src/sage/env.py b/src/sage/env.py
+index 27dd40c..453ccd7 100644
+--- a/src/sage/env.py
++++ b/src/sage/env.py
+@@ -182,6 +182,7 @@ var('CREMONA_LARGE_DATA_DIR', join(SAGE_SHARE, 'cremona'))
+ var('JMOL_DIR', join(SAGE_SHARE, 'jmol'))
+ var('JSMOL_DIR', join(SAGE_SHARE, 'jsmol'))
+ var('MATHJAX_DIR', join(SAGE_SHARE, 'mathjax'))
++var('MTXLIB', join(SAGE_SHARE, 'meataxe'))
+ var('THREEJS_DIR', join(SAGE_SHARE, 'threejs'))
+ var('PPLPY_DOCS', join(SAGE_SHARE, 'doc', 'pplpy'))
+ var('MAXIMA_FAS')
+diff --git a/src/sage/libs/meataxe.pyx b/src/sage/libs/meataxe.pyx
+index 1120600..7549e55 100644
+--- a/src/sage/libs/meataxe.pyx
++++ b/src/sage/libs/meataxe.pyx
+@@ -68,7 +68,6 @@ cdef Matrix_t *rawMatrix(int Field, list entries) except NULL:
+
+ from sage.cpython.string cimport str_to_bytes, char_to_str
+ import os
+-from sage.env import DOT_SAGE
+
+ cdef void sage_meataxe_error_handler(const MtxErrorRecord_t *err):
+ sig_block()
+@@ -82,7 +81,8 @@ cdef inline meataxe_init():
+ ## Assign to a variable that enables MeatAxe to find
+ ## its multiplication tables.
+ global MtxLibDir
+- mtxdir = str_to_bytes(os.path.join(DOT_SAGE, 'meataxe'))
++ from sage import env
++ mtxdir = str_to_bytes(env.MTXLIB)
+ if len(mtxdir) >= 1024:
+ raise RuntimeError(f"the path for the meataxe library {mtxdir!r} is too long, it needs to be of length < 1024")
+ MtxLibDir[:len(mtxdir)] = mtxdir
diff --git a/no-sage-env.patch b/no-sage-env.patch
new file mode 100644
index 000000000000..d276250064e4
--- /dev/null
+++ b/no-sage-env.patch
@@ -0,0 +1,302 @@
+diff --git a/src/bin/sage b/src/bin/sage
+index abb11d3..20b1303 100755
+--- a/src/bin/sage
++++ b/src/bin/sage
+@@ -4,8 +4,8 @@
+ # usage: sage_version [-v]
+ # -v display the full version banner including release date
+ sage_version() {
+- if [ -f "$SAGE_LOCAL/bin/sage-version.sh" ]; then
+- . "$SAGE_LOCAL/bin/sage-version.sh"
++ if [ -f "$0-version.sh" ]; then
++ . "$0-version.sh"
+ else
+ . "$SAGE_ROOT/src/bin/sage-version.sh"
+ fi
+@@ -430,18 +430,23 @@ fi
+ # append -env to that). We redirect stdout to stderr, which is safer
+ # for scripts.
+ #####################################################################
+-. "$0-env" >&2
+-if [ $? -ne 0 ]; then
+- echo >&2 "Error setting environment variables by sourcing '$0-env';"
+- echo >&2 "possibly contact sage-devel (see http://groups.google.com/group/sage-devel)."
+- exit 1
++if [ -f "$0-env" ]; then
++ . "$0-env" >&2
++ if [ $? -ne 0 ]; then
++ echo >&2 "Error setting environment variables by sourcing '$0-env';"
++ echo >&2 "possibly contact sage-devel (see http://groups.google.com/group/sage-devel)."
++ exit 1
++ fi
+ fi
+
++if [ -z "$DOT_SAGE" ]; then
++ export DOT_SAGE="$HOME/.sage"
++fi
+
+ # Prepare for running Sage, either interactively or non-interactively.
+ sage_setup() {
+ # Check that we're not in a source tarball which hasn't been built yet (#13561).
+- if [ ! -x "$SAGE_LOCAL/bin/sage" ]; then
++ if [ ! -z "$SAGE_LOCAL" ] && [ ! -x "$SAGE_LOCAL/bin/sage" ]; then
+ echo >&2 '************************************************************************'
+ echo >&2 'It seems that you are attempting to run Sage from an unpacked source'
+ echo >&2 'tarball, but you have not compiled it yet (or maybe the build has not'
+@@ -1038,13 +1043,13 @@ if [ "$1" = '-gdb' -o "$1" = "--gdb" ]; then
+ shift
+ sage_setup
+ if [ "$SAGE_DEBUG" = "no" ]; then
+- gdb -x "$SAGE_LOCAL/bin/sage-gdb-commands" \
+- -args python "$SAGE_LOCAL/bin/sage-ipython" "$@" -i
++ gdb -x "$0-gdb-commands" \
++ -args python "$0-ipython" "$@" -i
+ else
+ sage_dir=$(sage-python23 -c 'import os, sage; print(os.path.dirname(sage.__file__))')
+ cygdb "$sage_dir" "$SAGE_SRC/sage" \
+- -- -x "$SAGE_LOCAL/bin/sage-gdb-commands" \
+- -args python "$SAGE_LOCAL/bin/sage-ipython" "$@" -i
++ -- -x "$0-gdb-commands" \
++ -args python "$0-ipython" "$@" -i
+ fi
+ exit $?
+ fi
+diff --git a/src/bin/sage-cachegrind b/src/bin/sage-cachegrind
+index f77c2a2..41b4948 100755
+--- a/src/bin/sage-cachegrind
++++ b/src/bin/sage-cachegrind
+@@ -1,7 +1,7 @@
+ #!/usr/bin/env bash
+
+ # We reuse the gdb pythonstartup script.
+-PYTHONSTARTUP=$SAGE_LOCAL/bin/sage-ipython
++PYTHONSTARTUP=`dirname $0`/sage-ipython
+ export PYTHONSTARTUP
+ echo $PYTHONSTARTUP
+ if [ ! -d "$DOT_SAGE/valgrind" ]; then
+diff --git a/src/bin/sage-callgrind b/src/bin/sage-callgrind
+index 5e21d8b..d78acd6 100755
+--- a/src/bin/sage-callgrind
++++ b/src/bin/sage-callgrind
+@@ -13,4 +13,4 @@ if [ "$SAGE_CALLGRIND_FLAGS" ]; then
+ echo "Using default flags: $CALLGRIND_FLAGS"
+ fi
+
+-valgrind --tool=callgrind $CALLGRIND_FLAGS python "$SAGE_LOCAL/bin/sage-ipython" "$@" -i
++valgrind --tool=callgrind $CALLGRIND_FLAGS sage-ipython "$@" -i
+diff --git a/src/bin/sage-cython b/src/bin/sage-cython
+index 526c68b..d1477d4 100755
+--- a/src/bin/sage-cython
++++ b/src/bin/sage-cython
+@@ -9,9 +9,7 @@ import os
+ import sys
+ args = sys.argv[1:]
+
+-if "SAGE_SRC" not in os.environ:
+- raise RuntimeError("The environment variable SAGE_SRC must be set.")
+-SAGE_SRC = os.environ["SAGE_SRC"]
++from sage.env import SAGE_SRC
+
+ # args can have length 0, in case we're printing a usage message (see trac 12207)
+ pyx_file = os.path.abspath(args[-1]) if len(args) else None
+diff --git a/src/bin/sage-ipynb2rst b/src/bin/sage-ipynb2rst
+index d7c61a9..0fb6ee5 100755
+--- a/src/bin/sage-ipynb2rst
++++ b/src/bin/sage-ipynb2rst
+@@ -1,5 +1,9 @@
+ #!/usr/bin/env bash
+
++if [ -z $SAGE_EXTCODE ]; then
++ SAGE_EXTCODE=`${0/-ipynb2rst} -c "from sage.env import SAGE_EXTCODE; print(SAGE_EXTCODE)"`
++fi
++
+ fail () {
+ echo "ERROR: ${1}" 1>&2
+ exit 1
+diff --git a/src/bin/sage-massif b/src/bin/sage-massif
+index 20082bf..ead82de 100755
+--- a/src/bin/sage-massif
++++ b/src/bin/sage-massif
+@@ -1,7 +1,7 @@
+ #!/usr/bin/env bash
+
+ # We reuse the gdb pythonstartup script.
+-PYTHONSTARTUP=$SAGE_LOCAL/bin/sage-ipython
++PYTHONSTARTUP=`dirname $0`/sage-ipython
+ export PYTHONSTARTUP
+ echo $PYTHONSTARTUP
+ if [ ! -d "$DOT_SAGE/valgrind" ]; then
+diff --git a/src/bin/sage-omega b/src/bin/sage-omega
+index 2b8449f..a4c1fff 100755
+--- a/src/bin/sage-omega
++++ b/src/bin/sage-omega
+@@ -1,7 +1,7 @@
+ #!/usr/bin/env bash
+
+ # We reuse the gdb pythonstartup script.
+-PYTHONSTARTUP=$SAGE_LOCAL/bin/sage-ipython
++PYTHONSTARTUP=`dirname $0`/sage-ipython
+ export PYTHONSTARTUP
+ echo $PYTHONSTARTUP
+ if [ ! -d "$DOT_SAGE/valgrind" ]; then
+diff --git a/src/bin/sage-runtests b/src/bin/sage-runtests
+index 1207fa2..a7d4b55 100755
+--- a/src/bin/sage-runtests
++++ b/src/bin/sage-runtests
+@@ -5,7 +5,7 @@ import os
+ import sys
+
+ # Note: the DOT_SAGE and SAGE_STARTUP_FILE environment variables have already been set by sage-env
+-DOT_SAGE = os.environ['DOT_SAGE']
++DOT_SAGE = os.environ.get('DOT_SAGE', os.path.join(os.environ.get('HOME'),'.sage'))
+ SAGE_ROOT = os.environ.get('SAGE_ROOT')
+
+ # Override to not pick up user configuration, see Trac #20270
+diff --git a/src/bin/sage-valgrind b/src/bin/sage-valgrind
+index bba296d..61f27a8 100755
+--- a/src/bin/sage-valgrind
++++ b/src/bin/sage-valgrind
+@@ -1,5 +1,9 @@
+ #!/usr/bin/env bash
+
++if [ -z $SAGE_EXTCODE ]; then
++ SAGE_EXTCODE=`${0/-valgrind} -c "from sage.env import SAGE_EXTCODE; print(SAGE_EXTCODE)"`
++fi
++
+ SUPP=""
+ if [ -f "$SAGE_EXTCODE/valgrind/python.supp" ]; then
+ SUPP+=" --suppressions=$SAGE_EXTCODE/valgrind/python.supp"
+@@ -19,4 +23,4 @@ else
+ echo "Using default flags: $MEMCHECK_FLAGS"
+ fi
+
+-valgrind --tool=memcheck $MEMCHECK_FLAGS python "$SAGE_LOCAL/bin/sage-ipython" "$@" -i
++valgrind --tool=memcheck $MEMCHECK_FLAGS sage-ipython "$@" -i
+diff --git a/src/sage/docs/conf.py b/src/sage/docs/conf.py
+index 8d0083b..0560d96 100644
+--- a/src/sage/docs/conf.py
++++ b/src/sage/docs/conf.py
+@@ -218,7 +218,7 @@ html_theme = 'sage'
+ html_theme_options = {}
+
+ # Add any paths that contain custom themes here, relative to this directory.
+-html_theme_path = [os.path.join(SAGE_DOC_SRC, 'common', 'themes')]
++html_theme_path = [os.path.join(SAGE_DOC_SRC, 'common', 'themes'), os.path.join(SAGE_DOC, 'common', 'themes')]
+
+ # HTML style sheet NOTE: This overrides a HTML theme's corresponding
+ # setting.
+diff --git a/src/sage/doctest/control.py b/src/sage/doctest/control.py
+index 8438b96..b5dadaf 100644
+--- a/src/sage/doctest/control.py
++++ b/src/sage/doctest/control.py
+@@ -26,7 +26,7 @@ import random, os, sys, time, json, re, types
+ import six
+ import sage.misc.flatten
+ from sage.structure.sage_object import SageObject
+-from sage.env import DOT_SAGE, SAGE_LIB, SAGE_SRC
++from sage.env import DOT_SAGE, SAGE_LIB, SAGE_SRC, SAGE_LOCAL, SAGE_EXTCODE
+ from sage.misc.temporary_file import tmp_dir
+ from cysignals.signals import AlarmInterrupt, init_cysignals
+
+@@ -48,7 +48,7 @@ class DocTestDefaults(SageObject):
+ This class is used for doctesting the Sage doctest module.
+
+ It fills in attributes to be the same as the defaults defined in
+- ``SAGE_LOCAL/bin/sage-runtests``, expect for a few places,
++ ``sage-runtests``, expect for a few places,
+ which is mostly to make doctesting more predictable.
+
+ EXAMPLES::
+@@ -291,7 +291,7 @@ class DocTestController(SageObject):
+
+ INPUT:
+
+- - options -- either options generated from the command line by SAGE_LOCAL/bin/sage-runtests
++ - options -- either options generated from the command line by sage-runtests
+ or a DocTestDefaults object (possibly with some entries modified)
+ - args -- a list of filenames to doctest
+
+@@ -1023,9 +1023,9 @@ class DocTestController(SageObject):
+ sage: from sage.doctest.control import DocTestDefaults, DocTestController
+ sage: DC = DocTestController(DocTestDefaults(timeout=123), ["hello_world.py"])
+ sage: print(DC._assemble_cmd())
+- python "$SAGE_LOCAL/bin/sage-runtests" --serial --timeout=123 hello_world.py
++ python "...sage-runtests" --serial --timeout=123 hello_world.py
+ """
+- cmd = '''python "%s" --serial '''%(os.path.join("$SAGE_LOCAL","bin","sage-runtests"))
++ cmd = '''python "%s" --serial '''%(os.path.join(SAGE_LOCAL,"bin","sage-runtests"))
+ opt = dict_difference(self.options.__dict__, DocTestDefaults().__dict__)
+ for o in ("all", "sagenb"):
+ if o in opt:
+@@ -1059,14 +1059,14 @@ class DocTestController(SageObject):
+ sage: DD = DocTestDefaults(gdb=True)
+ sage: DC = DocTestController(DD, ["hello_world.py"])
+ sage: DC.run_val_gdb(testing=True)
+- exec gdb -x "$SAGE_LOCAL/bin/sage-gdb-commands" --args python "$SAGE_LOCAL/bin/sage-runtests" --serial --timeout=0 hello_world.py
++ exec gdb -x "...sage-gdb-commands" --args python "...sage-runtests" --serial --timeout=0 hello_world.py
+
+ ::
+
+ sage: DD = DocTestDefaults(valgrind=True, optional="all", timeout=172800)
+ sage: DC = DocTestController(DD, ["hello_world.py"])
+ sage: DC.run_val_gdb(testing=True)
+- exec valgrind --tool=memcheck --leak-resolution=high --leak-check=full --num-callers=25 --suppressions="$SAGE_EXTCODE/valgrind/pyalloc.supp" --suppressions="$SAGE_EXTCODE/valgrind/sage.supp" --suppressions="$SAGE_EXTCODE/valgrind/sage-additional.supp" --log-file=".../valgrind/sage-memcheck.%p" python "$SAGE_LOCAL/bin/sage-runtests" --serial --timeout=172800 --optional=all hello_world.py
++ exec valgrind --tool=memcheck --leak-resolution=high --leak-check=full --num-callers=25 --suppressions="...valgrind/pyalloc.supp" --suppressions="...valgrind/sage.supp" --suppressions="...valgrind/sage-additional.supp" --log-file=".../valgrind/sage-memcheck.%p" python "...sage-runtests" --serial --timeout=172800 --optional=all hello_world.py
+ """
+ try:
+ sage_cmd = self._assemble_cmd()
+@@ -1075,7 +1075,7 @@ class DocTestController(SageObject):
+ return 2
+ opt = self.options
+ if opt.gdb:
+- cmd = '''exec gdb -x "$SAGE_LOCAL/bin/sage-gdb-commands" --args '''
++ cmd = '''exec gdb -x "%s" --args '''%(os.path.join(SAGE_LOCAL,"bin","sage-gdb-commands"))
+ flags = ""
+ if opt.logfile:
+ sage_cmd += " --logfile %s"%(opt.logfile)
+@@ -1096,9 +1096,9 @@ class DocTestController(SageObject):
+ flags = os.getenv("SAGE_MEMCHECK_FLAGS")
+ if flags is None:
+ flags = "--leak-resolution=high --leak-check=full --num-callers=25 "
+- flags += '''--suppressions="%s" '''%(os.path.join("$SAGE_EXTCODE","valgrind","pyalloc.supp"))
+- flags += '''--suppressions="%s" '''%(os.path.join("$SAGE_EXTCODE","valgrind","sage.supp"))
+- flags += '''--suppressions="%s" '''%(os.path.join("$SAGE_EXTCODE","valgrind","sage-additional.supp"))
++ flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","pyalloc.supp"))
++ flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","sage.supp"))
++ flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","sage-additional.supp"))
+ elif opt.massif:
+ toolname = "massif"
+ flags = os.getenv("SAGE_MASSIF_FLAGS", "--depth=6 ")
+diff --git a/src/sage/env.py b/src/sage/env.py
+index 27dd40c..2e1111c 100644
+--- a/src/sage/env.py
++++ b/src/sage/env.py
+@@ -183,6 +183,7 @@ var('JMOL_DIR', join(SAGE_SHARE, 'jmol'))
+ var('JSMOL_DIR', join(SAGE_SHARE, 'jsmol'))
+ var('MATHJAX_DIR', join(SAGE_SHARE, 'mathjax'))
+ var('THREEJS_DIR', join(SAGE_SHARE, 'threejs'))
++var('SINGULARPATH', join(SAGE_SHARE, 'singular'))
+ var('PPLPY_DOCS', join(SAGE_SHARE, 'doc', 'pplpy'))
+ var('MAXIMA_FAS')
+
+diff --git a/src/sage/interfaces/singular.py b/src/sage/interfaces/singular.py
+index 513994c..2f08a9d 100644
+--- a/src/sage/interfaces/singular.py
++++ b/src/sage/interfaces/singular.py
+@@ -337,6 +337,7 @@ from sage.structure.element import RingElement
+
+ import sage.rings.integer
+
++from sage.env import SINGULARPATH
+ from sage.misc.misc import get_verbose
+ from sage.docs.instancedoc import instancedoc
+
+@@ -2261,7 +2262,7 @@ def generate_docstring_dictionary():
+ nodes.clear()
+ node_names.clear()
+
+- singular_docdir = os.environ['SINGULARPATH']+"/../info/"
++ singular_docdir = SINGULARPATH + "/../info/"
+
+ new_node = re.compile(r"File: singular\.hlp, Node: ([^,]*),.*")
+ new_lookup = re.compile(r"\* ([^:]*):*([^.]*)\..*")
diff --git a/sagemath-env.patch b/sagemath-env.patch
deleted file mode 100644
index e6c218bd1563..000000000000
--- a/sagemath-env.patch
+++ /dev/null
@@ -1,132 +0,0 @@
---- src/bin/sage-env.orig 2015-01-06 10:46:04.469687605 +0100
-+++ src/bin/sage-env 2015-01-06 10:49:59.547762019 +0100
-@@ -111,30 +111,6 @@
- }
-
-
--# New value for SAGE_ROOT: either SAGE_ROOT (if given)
--# or a guessed value based on pwd.
--if [ -n "$SAGE_ROOT" ]; then
-- NEW_SAGE_ROOT="$SAGE_ROOT"
--elif [ -f sage -a -d build ]; then
-- NEW_SAGE_ROOT="."
--elif [ -f ../../sage -a -d ../../build ]; then
-- NEW_SAGE_ROOT="../.."
--else
-- # No idea what SAGE_ROOT should be...
-- echo >&2 "Error: You must set the SAGE_ROOT environment variable or run this"
-- echo >&2 "script from the SAGE_ROOT or SAGE_ROOT/local/bin/ directory."
-- return 1
--fi
--
--# Make NEW_SAGE_ROOT absolute
--NEW_SAGE_ROOT=`cd "$NEW_SAGE_ROOT" && pwd -P`
--
--# Warn if NEW_SAGE_ROOT does not equal the old SAGE_ROOT
--if [ "$SAGE_ROOT" != "$NEW_SAGE_ROOT" -a -n "$SAGE_ROOT" ]; then
-- echo >&2 "Warning: overwriting SAGE_ROOT environment variable:"
-- echo >&2 "Old SAGE_ROOT=$SAGE_ROOT"
-- echo >&2 "New SAGE_ROOT=$NEW_SAGE_ROOT"
--fi
-
-
- # Don't execute the commands more than once for the same version of
-@@ -163,35 +163,9 @@
- export SAGE_ENV_SOURCED=$SAGE_ENV_VERSION
-
- export SAGE_ROOT="$NEW_SAGE_ROOT"
-+export SAGE_LOCAL='/usr'
-+export SAGE_SCRIPTS_DIR='/usr/bin'
-
--
--# sage-env must know where the Sage's script files are.
--# Note that SAGE_SCRIPTS_DIR is only used here, so it does not need to
--# be exported.
--if [ -z "$SAGE_SCRIPTS_DIR" ]; then
-- if [ -f "$SAGE_ROOT/src/bin/sage-env-config" ]; then
-- # Prefer src/bin/sage-env-config because that's directly
-- # generated by configure (see Trac #27422)
-- SAGE_SCRIPTS_DIR="$SAGE_ROOT/src/bin"
-- elif [ -n "$SAGE_LOCAL" ] && [ -f "$SAGE_LOCAL/bin/sage-env-config" ]; then
-- SAGE_SCRIPTS_DIR="$SAGE_LOCAL/bin"
-- else
-- echo >&2 "Error: You must set either the SAGE_LOCAL or SAGE_SCRIPTS_DIR environment variable to run this"
-- return 1
-- fi
--elif [ ! -f "$SAGE_SCRIPTS_DIR/sage-env-config" ]; then
-- echo >&2 "Error: SAGE_SCRIPTS_DIR is set to a bad value:"
-- echo >&2 "SAGE_SCRIPTS_DIR=$SAGE_SCRIPTS_DIR"
-- echo >&2 "You must correct it or erase it and rerun this script"
-- return 1
--fi
--
--# Set environment variables (like SAGE_LOCAL) depending on ./configure
--. "$SAGE_SCRIPTS_DIR/sage-env-config"
--if [ $? -ne 0 ]; then
-- echo >&2 "Error: failed to source $SAGE_SCRIPTS_DIR/sage-env-config"
-- return 1
--fi
-
- # The compilers are set in order of priority by
- # 1) environment variables
-@@ -287,8 +287,8 @@
- export SAGE_SPKG_INST="$SAGE_LOCAL/var/lib/sage/installed"
- export SAGE_SPKG_SCRIPTS="$SAGE_LOCAL/var/lib/sage/scripts"
- export SAGE_LOGS="$SAGE_ROOT/logs/pkgs"
--export SAGE_SRC="$SAGE_ROOT/src"
--export SAGE_DOC_SRC="$SAGE_SRC/doc"
-+export SAGE_SRC="$SAGE_LOCAL/lib/python2.7/site-packages"
-+export SAGE_DOC_SRC="$SAGE_SHARE/doc/sage"
- export SAGE_DOC="$SAGE_SHARE/doc/sage"
-
- if [ -z "${SAGE_ORIG_PATH_SET}" ]; then
-@@ -400,28 +400,8 @@
- export SAGE_STARTUP_FILE
- fi
-
-+export LIBMTX="$DOT_SAGE/meataxe"
-+[[ -d $LIBMTX ]] || mkdir -p $LIBMTX # Create meataxe data dir
--if [ "$PYTHON_EGG_CACHE" = "" ]; then
-- PYTHON_EGG_CACHE="$DOT_SAGE/.python-eggs"
-- export PYTHON_EGG_CACHE
--fi
--
--# Set PYTHONUSERBASE to avoid picking up non-Sage versions of
--# Matplotlib, numpy, etc. See http://trac.sagemath.org/ticket/19612.
--#
--# For more history (it used to be PYTHONNOUSERSITE=yes which killed
--# the ability to do "sage -pip install PACKAGE --user"), see
--# http://trac.sagemath.org/ticket/14243 and
--# http://trac.sagemath.org/ticket/18955.
--
--if [ "$PYTHONUSERBASE" = "" ]; then
-- PYTHONUSERBASE="$DOT_SAGE/local"
-- export PYTHONUSERBASE
--fi
--
--if [ -n "$PYTHONHOME" ]; then
-- >&2 echo "Warning: PYTHONHOME must not be set when running Sage, clearing env..."
-- unset PYTHONHOME
--fi
-
- LDFLAGS="-L$SAGE_LOCAL/lib -Wl,-rpath,$SAGE_LOCAL/lib $LDFLAGS"
- export LDFLAGS
-@@ -486,8 +486,6 @@
- fi
- fi
-
--export MAXIMA_PREFIX="$SAGE_LOCAL"
--export MAXIMA_USERDIR="$DOT_SAGE/maxima"
-
- PERL5LIB="$SAGE_LOCAL/lib/perl5:$PERL5LIB" && export PERL5LIB
-
-@@ -598,9 +598,6 @@
- LD_LIBRARY_PATH="$SAGE_LOCAL/bin:$LD_LIBRARY_PATH" && export LD_LIBRARY_PATH
- fi
-
--# See trac 7186 -- this is needed if ecl is moved
--ECLDIR="$SAGE_LOCAL/lib/ecl/" && export ECLDIR
--
- # Handle parallel building/testing/...
- # See Trac Ticket #12016
- # First, figure out the right values for SAGE_NUM_THREADS (default
diff --git a/sagemath-linbox-1.6.patch b/sagemath-linbox-1.6.patch
index bb2d0116aadf..86991d63c26c 100644
--- a/sagemath-linbox-1.6.patch
+++ b/sagemath-linbox-1.6.patch
@@ -50,6 +50,27 @@ index f3a7ce3..8bf62f1 100644
Modular_float.Element* A, size_t A_stride)
int Rank (Modular_float,
+diff --git a/src/sage/libs/linbox/givaro.pxd b/src/sage/libs/linbox/givaro.pxd
+index 097fc22..34209f4 100644
+--- a/src/sage/libs/linbox/givaro.pxd
++++ b/src/sage/libs/linbox/givaro.pxd
+@@ -40,7 +40,7 @@ cdef extern from "givaro/zring.h":
+ Element one
+ Element mone
+
+-cdef extern from "givaro/modular.h":
++cdef extern from "givaro/modular-integral.h":
+ cdef cppclass Modular_uint64 "Givaro::Modular<uint64_t>":
+ ctypedef uint64_t Element
+ Modular_uint64(int modulus)
+@@ -58,6 +58,7 @@ cdef extern from "givaro/modular.h":
+
+ ostream& write(ostream&)
+
++cdef extern from "givaro/modular-floating.h":
+ cdef cppclass Modular_double "Givaro::Modular<double>":
+ ctypedef double Element
+ Modular_double(int modulus)
diff --git a/src/sage/libs/linbox/linbox.pxd b/src/sage/libs/linbox/linbox.pxd
index 35a3fa0..fb0e0dc 100644
--- a/src/sage/libs/linbox/linbox.pxd
@@ -147,10 +168,74 @@ index 35a3fa0..fb0e0dc 100644
DenseVector_integer& solve (DenseVector_integer &,
Integer &,
+diff --git a/src/sage/libs/linbox/linbox_flint_interface.pxd b/src/sage/libs/linbox/linbox_flint_interface.pxd
+index 388c146..6491cf5 100644
+--- a/src/sage/libs/linbox/linbox_flint_interface.pxd
++++ b/src/sage/libs/linbox/linbox_flint_interface.pxd
+@@ -13,7 +13,7 @@ cdef void linbox_fmpz_mat_charpoly(fmpz_poly_t cp, fmpz_mat_t A)
+ cdef void linbox_fmpz_mat_minpoly(fmpz_poly_t mp, fmpz_mat_t A)
+
+ # return the rank of A
+-cdef unsigned long linbox_fmpz_mat_rank(fmpz_mat_t A)
++cdef size_t linbox_fmpz_mat_rank(fmpz_mat_t A)
+
+ # set det to the determinant of A
+ cdef void linbox_fmpz_mat_det(fmpz_t det, fmpz_mat_t A)
+diff --git a/src/sage/libs/linbox/linbox_flint_interface.pyx b/src/sage/libs/linbox/linbox_flint_interface.pyx
+index d5718a7..4c209fb 100644
+--- a/src/sage/libs/linbox/linbox_flint_interface.pyx
++++ b/src/sage/libs/linbox/linbox_flint_interface.pyx
+@@ -15,7 +15,7 @@ and C. Pernet. The functions available are:
+ - ``void linbox_fmpz_mat_minpoly(fmpz_poly_t mp, fmpz_mat_t A)``: set ``mp``
+ to be the minimal polynomial of the square matrix ``A``
+
+-- ``unsigned long linbox_fmpz_mat_rank(fmpz_mat_t A)``: return the rank of the
++- ``size_t linbox_fmpz_mat_rank(fmpz_mat_t A)``: return the rank of the
+ matrix ``A``
+
+ - ``void linbox_fmpz_mat_det(fmpz_t det, fmpz_mat_t A)``: set ``det`` to the
+@@ -155,13 +155,13 @@ cdef void linbox_fmpz_mat_minpoly(fmpz_poly_t mp, fmpz_mat_t A):
+ del m_A
+
+
+-cdef unsigned long linbox_fmpz_mat_rank(fmpz_mat_t A):
++cdef size_t linbox_fmpz_mat_rank(fmpz_mat_t A):
+ r"""
+ Return the rank of A
+ """
+ cdef givaro.ZRing ZZ
+ cdef linbox.DenseMatrix_integer * LBA
+- cdef unsigned long r = 0
++ cdef size_t r = 0
+
+ LBA = new linbox.DenseMatrix_integer(ZZ, fmpz_mat_nrows(A), fmpz_mat_ncols(A))
+ fmpz_mat_get_linbox(LBA[0], A)
+diff --git a/src/sage/matrix/matrix_integer_dense.pyx b/src/sage/matrix/matrix_integer_dense.pyx
+index cd36b27..072122b 100644
+--- a/src/sage/matrix/matrix_integer_dense.pyx
++++ b/src/sage/matrix/matrix_integer_dense.pyx
+@@ -3611,7 +3611,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
+ 3
+ """
+ sig_on()
+- cdef unsigned long r = linbox_fmpz_mat_rank(self._matrix)
++ cdef size_t r = linbox_fmpz_mat_rank(self._matrix)
+ sig_off()
+ return Integer(r)
+
diff --git a/src/sage/matrix/matrix_integer_sparse.pyx b/src/sage/matrix/matrix_integer_sparse.pyx
-index 7fa386e..132140f 100644
+index 7fa386e..6db9b2d 100644
--- a/src/sage/matrix/matrix_integer_sparse.pyx
+++ b/src/sage/matrix/matrix_integer_sparse.pyx
+@@ -31,7 +31,7 @@ from cysignals.memory cimport check_calloc, sig_free
+
+ from collections import Iterator, Sequence
+
+-from cpython.int cimport PyInt_FromLong
++from cpython.int cimport PyInt_FromSize_t
+
+ from sage.ext.stdsage cimport PY_NEW
+ from sage.ext.mod_int cimport *
@@ -42,7 +42,7 @@ from sage.libs.linbox.conversion cimport (
new_linbox_vector_integer_dense,
new_sage_vector_integer_dense,
@@ -160,6 +245,22 @@ index 7fa386e..132140f 100644
METHOD_SPARSE_ELIMINATION, METHOD_BLACKBOX,
METHOD_WIEDEMANN, get_method)
+@@ -647,13 +647,13 @@ cdef class Matrix_integer_sparse(Matrix_sparse):
+
+ cdef givaro.ZRing givZZ
+ cdef linbox.SparseMatrix_integer * M = new_linbox_matrix_integer_sparse(givZZ, self)
+- cdef unsigned long r = 0
++ cdef size_t r = 0
+
+ linbox.rank(r, M[0])
+
+ del M
+
+- return PyInt_FromLong(r)
++ return PyInt_FromSize_t(r)
+
+ def _det_linbox(self):
+ r"""
@@ -926,7 +926,7 @@ cdef class Matrix_integer_sparse(Matrix_sparse):
- ``'linbox'`` or ``'linbox_default'`` - (default) use LinBox
and let it chooses the appropriate algorithm
@@ -356,10 +457,33 @@ index 6a5e164..230a16e 100644
self.cache('det', d2)
return d2
diff --git a/src/sage/matrix/matrix_modn_sparse.pyx b/src/sage/matrix/matrix_modn_sparse.pyx
-index 241167a..dd3a2f0 100644
+index 241167a..9b4184f 100644
--- a/src/sage/matrix/matrix_modn_sparse.pyx
+++ b/src/sage/matrix/matrix_modn_sparse.pyx
-@@ -882,7 +882,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+@@ -677,10 +677,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+ # TODO: bug in linbox (gives segfault)
+ return 0, self.base_ring().one()
+
+- # NOTE: the rank would more naturally be size_t but it is unsigned long
+- # in LinBox
+- # see https://github.com/linbox-team/linbox/issues/144
+- cdef unsigned long A_rank = 0
++ cdef size_t A_rank = 0
+ cdef uint64_t A_det = 0
+
+ if not is_prime(self.p):
+@@ -696,9 +693,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+ if A.rowdim() >= <size_t> UINT_MAX or A.coldim() >= <size_t> UINT_MAX:
+ raise ValueError("row/column size unsupported in LinBox")
+
+- dom.InPlaceLinearPivoting(A_rank, A_det, A[0],
+- <unsigned long> A.rowdim(),
+- <unsigned long> A.coldim())
++ dom.InPlaceLinearPivoting(A_rank, A_det, A[0], A.rowdim(), A.coldim())
+
+ del A
+ del F
+@@ -882,7 +877,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
- ``'linbox'`` or ``'linbox_default'`` - (default) use LinBox
and let it chooses the appropriate algorithm
@@ -368,7 +492,7 @@ index 241167a..dd3a2f0 100644
- ``'linbox_sparse_elimination'`` - use LinBox sparse elimination
-@@ -949,7 +949,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+@@ -949,7 +944,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
- ``b`` -- a dense integer vector
@@ -377,7 +501,7 @@ index 241167a..dd3a2f0 100644
``'sparse_elimination'``, ``'wiedemann'`` or ``'blackbox'``.
OUTPUT: a pair ``(a, d)`` consisting of
-@@ -968,7 +968,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+@@ -968,7 +963,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
sage: b0 = vector((1,1,1,1))
sage: m._solve_vector_linbox(b0)
((-1, -7, -3, -1), 1)
@@ -386,7 +510,7 @@ index 241167a..dd3a2f0 100644
((-1, -7, -3, -1), 1)
sage: m._solve_vector_linbox(b0, 'sparse_elimination')
((-1, -7, -3, -1), 1)
-@@ -984,7 +984,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+@@ -984,7 +979,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
TESTS::
@@ -395,7 +519,7 @@ index 241167a..dd3a2f0 100644
....: "blackbox", "wiedemann"]
sage: for i in range(20):
....: dim = randint(1, 30)
-@@ -1025,8 +1025,8 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+@@ -1025,8 +1020,8 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
linbox.solve(res[0], D, A[0], b[0])
elif method == METHOD_WIEDEMANN:
linbox.solve(res[0], D, A[0], b[0], linbox.Method.Wiedemann())
@@ -406,7 +530,7 @@ index 241167a..dd3a2f0 100644
elif method == METHOD_SPARSE_ELIMINATION:
linbox.solve(res[0], D, A[0], b[0], linbox.Method.SparseElimination())
elif method == METHOD_BLACKBOX:
-@@ -1081,7 +1081,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+@@ -1081,7 +1076,7 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
TESTS::
@@ -415,7 +539,7 @@ index 241167a..dd3a2f0 100644
....: "blackbox", "wiedemann"]
sage: for _ in range(10):
-@@ -1136,8 +1136,8 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
+@@ -1136,8 +1131,8 @@ cdef class Matrix_modn_sparse(matrix_sparse.Matrix_sparse):
# solve the current row
if algo == METHOD_DEFAULT:
linbox.solve(res[0], D, A[0], b[0])
@@ -491,7 +615,7 @@ index f0fd7e35..8ae25c5 100644
GivaroGfq *gfq_factorypk "new Givaro::GFqDom<int>" (unsigned int p, unsigned int k)
GivaroGfq *gfq_factorypkp "new Givaro::GFqDom<int>" (unsigned int p, unsigned int k, intvec poly)
diff --git a/src/sage/rings/finite_rings/element_givaro.pyx b/src/sage/rings/finite_rings/element_givaro.pyx
-index 3739020..a7f9c2f 100644
+index 0d63a63..1bd35cf 100644
--- a/src/sage/rings/finite_rings/element_givaro.pyx
+++ b/src/sage/rings/finite_rings/element_givaro.pyx
@@ -310,7 +310,7 @@ cdef class Cache_givaro(SageObject):