diff -up src/bin/sage.orig src/bin/sage --- src/bin/sage.orig 2017-11-08 06:04:08.687887432 -0500 +++ src/bin/sage 2017-11-08 06:10:52.452902893 -0500 @@ -1,5 +1,16 @@ #!/usr/bin/env bash +# Display the Sage startup banner, used in src/bin/sage +sage_banner() { + if [ "$SAGE_BANNER" = "bare" ]; then + cat "$SAGE_ROOT/VERSION.txt" + elif [ "$SAGE_BANNER" != "no" ]; then + # This file sage-banner is not yet available during the build + # of Sage, so we ignore errors from cat. + cat "$SAGE_LOCAL/bin/sage-banner" 2>/dev/null + fi +} + help_banner() { sage_banner | grep -v 'Type' echo @@ -13,13 +24,10 @@ usage() { echo " file.[sage|py|spyx] -- run given .sage, .py or .spyx file" echo " -advanced -- list all command line options" echo " -c -- Evaluates cmd as sage code" - echo " -experimental -- list all experimental packages that can be installed" echo " -gap [...] -- run Sage's Gap with given arguments" echo " -gap3 [...] -- run Sage's Gap3 with given arguments" echo " -gp [...] -- run Sage's PARI/GP calculator with given arguments" echo " -h, -? -- print this help message" - echo " -i [packages] -- install the given Sage packages" - echo " -pip [...] -- invoke pip, the Python package manager" echo " -inotebook [...] -- start the *insecure* Sage notebook (deprecated)" echo " -maxima [...] -- run Sage's Maxima with given arguments" echo " -mwrank [...] -- run Sage's mwrank with given arguments" @@ -27,7 +35,6 @@ usage() { echo " 'default', 'sagenb', 'jupyter', and 'export')" echo " Current default is 'export' from sagenb to jupyter" echo " -n, --notebook -- shortcut for --notebook=default" - echo " -optional -- list all optional packages that can be installed" echo " -python [...] -- run the Python 2 interpreter" echo " -python3 [...] -- run the Python 3 interpreter" echo " -R [...] -- run Sage's R with given arguments" @@ -44,10 +51,6 @@ usage() { echo " --optional - controls which optional tests are run" echo " --sagenb - test all sagenb files" echo " --help - show all testing options" - echo " -upgrade [version] -- download, build and install the given version. Here," - echo " 'version' is a git branch or tag name. Useful values" - echo " are 'master' (the current development version, this" - echo " is the default) or a version number like '5.13'." echo " -v, -version -- display Sage version information" exit 0 } @@ -66,11 +69,8 @@ usage_advanced() { echo " -preparse -- preparse file.sage and produce corresponding file.sage.py" echo " -q -- quiet; start with no banner" echo " -root -- print the Sage root directory" - echo " -gthread, -qthread, -q4thread, -wthread, -pylab" - echo " -- pass the option through to ipython" echo " -v, -version -- display Sage version information" echo " -dumpversion -- print Sage version" - echo " -git-branch -- print the current git branch" echo #### 1.......................26..................................................78 @@ -82,8 +82,6 @@ usage_advanced() { echo " See the output of sage --notebook --help" echo " for more details and examples of how to pass" echo " optional arguments" - echo " -bn, -build-and-notebook [...] -- build the Sage library then start" - echo " the Sage notebook" echo " -inotebook [...] -- start the *insecure* Sage notebook (deprecated)" echo " -n, -notebook [...] -- start the default Sage notebook (options are the" echo " same as for the notebook command in Sage). See the" @@ -102,18 +100,11 @@ usage_advanced() { echo " -gp [...] -- run Sage's PARI/GP calculator with given arguments" echo " -ipython [...] -- run Sage's IPython using the default environment (not" echo " Sage), passing additional options to IPython" - echo " -kash [...] -- run Sage's Kash with given arguments" - command -v kash &>/dev/null || \ - echo " (not installed currently, run sage -i kash)" echo " -lisp [...] -- run Lisp interpreter included with Sage" echo " -M2 [...] -- run Sage's Macaulay2 with given arguments" - command -v M2 &>/dev/null || \ - echo " (not installed currently, run sage -i macaulay2)" echo " -maxima [...] -- run Sage's Maxima with given arguments" echo " -mwrank [...] -- run Sage's mwrank with given arguments" echo " -polymake [...] -- run Sage's Polymake with given arguments" - command -v polymake &>/dev/null || \ - echo " (not installed currently, run sage -i polymake)" echo " -python [...] -- run the Python interpreter" echo " -R [...] -- run Sage's R with given arguments" echo " -scons [...] -- run Sage's scons" @@ -125,55 +116,7 @@ usage_advanced() { echo #### 1.......................26..................................................78 #### |.....................--.|...................................................| - echo "Installing packages and upgrading:" - echo " -package [args] -- call the new package manager with given arguments." - echo " Run without arguments for package-specific help." - echo " -experimental -- list all experimental packages that can be installed" - echo " -f [opts] [packages]-- shortcut for -i -f: force build of the given Sage" - echo " packages" - echo " -i [opts] [packages]-- install the given Sage packages. Options:" - echo " -c -- run the packages' test suites" - echo " -d -- only download, do not install packages" - echo " -f -- force build: install the packages even" - echo " if they are already installed" - echo " -s -- do not delete the temporary build directories" - echo " after a successful build" - echo " -y -- reply yes to prompts about experimental" - echo " and old-style packages; warning: there" - echo " is no guarantee that these packages will" - echo " build correctly; use at your own risk" - echo " -n -- reply no to prompts about experimental" - echo " and old-style packages" - echo " -p [opts] [packages]-- install the given Sage packages, without dependency" - echo " checking and with support for old-style spkgs." - echo " Options are -c, -d and -s with the same meaning as" - echo " for the -i command" - echo " -info [packages] -- print the SPKG.txt of the given packages" - echo " --location -- if needed, fix paths to make Sage relocatable" - echo " -optional -- list all optional packages that can be installed" - echo " -standard -- list all standard packages that can be installed" - echo " -installed -- list all installed packages" - echo " -upgrade [version] -- download, build and install the given version. Here," - echo " 'version' is a git branch or tag name. Useful values" - echo " are 'master' (the current development version, this" - echo " is the default) or a version number like '5.13'." - echo " -pip [...] -- invoke pip, the Python package manager" - - echo - #### 1.......................26..................................................78 - #### |.....................--.|...................................................| - echo "Building and testing the Sage library:" - echo " -b -- build Sage library." - echo " -ba -- same as -b and rebuild all Cython code" - echo " -ba-force -- same as -ba, but don't query before rebuilding" - echo " -br -- build and run Sage" - echo " -bt [...] -- build and test, options like -t below" - echo " -btp [...] -- build and test parallel, options like -tp below" - echo " -btnew [...] -- build and test modified files, options like -tnew" - echo " -fixdoctests [output_file] [--long]" - echo " -- replace failing doctests with the actual output. With" - echo " optional output_file: redirect there. With the --long" - echo " option: include #long time tests." + echo "Testing the Sage library:" echo " -startuptime [module] -- display how long each component of Sage takes to" echo " start up; optionally specify a module to get more" echo " details about that particular module" @@ -203,7 +146,6 @@ usage_advanced() { echo " -coverage -- give info about doctest coverage of files" echo " -coverageall -- give summary info about doctest coverage of all" echo " files in the Sage library" - echo " -docbuild [lang/] -- Build the Sage documentation" echo " -search_src -- search through all the Sage library code for string" echo " -search_doc -- search through the Sage documentation for string" echo " -grep -- same as -search_src" @@ -225,16 +167,6 @@ usage_advanced() { echo #### 1.......................26..................................................78 #### |.....................--.|...................................................| - echo "Making Sage packages or distributions:" - echo " -sdist -- build a source distribution of Sage" - echo " -pkg -- create Sage package dir.spkg from a given directory" - echo " -pkg_nc -- as -pkg, but do not compress the package" - echo " -fix-pkg-checksums -- fix the checksums from build/pkgs directories from " - echo " the packages located in upstream/" - - echo - #### 1.......................26..................................................78 - #### |.....................--.|...................................................| echo "Valgrind memory debugging:" echo " -cachegrind -- run Sage using Valgrind's cachegrind tool. The log" echo " files are named sage-cachegrind.PID can be found in" @@ -248,9 +180,6 @@ usage_advanced() { echo " -memcheck -- run Sage using Valgrind's memcheck tool. The log" echo " files are named sage-memcheck.PID can be found in" echo " $DOT_SAGE" - echo " -omega -- run Sage using Valgrind's omega tool. The log" - echo " files are named sage-omega.PID can be found in" - echo " $DOT_SAGE" echo " -valgrind -- this is an alias for -memcheck" echo echo "You can also use -- before a long option, e.g., 'sage --optional'." @@ -259,121 +188,6 @@ usage_advanced() { } -##################################################################### -# Special options to be processed without sage-env -##################################################################### - -# Check for '--nodotsage' before sourcing sage-env; otherwise sage-env -# will already have set some environment variables with the old -# setting for DOT_SAGE. -if [ "$1" = '--nodotsage' ]; then - export DOT_SAGE=`mktemp -d ${TMPDIR:-/tmp}/dotsageXXXXXX` - shift - command "$0" "$@" - status=$? - rm -rf "$DOT_SAGE" - exit $status -fi - -# Check for '--patchbot' before sourcing sage-env: patchbot needs -# an unclobbered environment before testing unsafe tickets. -if [ "$1" = '-patchbot' -o "$1" = "--patchbot" ]; then - shift - # We ask the Python from Sage where the patchbot is installed. - # We set PYTHONPATH to that directory such that the system Python - # should also find the sage_patchbot package. - cmd='import sage_patchbot as p; import os; print(os.path.dirname(p.__path__[0]))' - export PYTHONPATH=`"$SAGE_ROOT/sage" --python -c "$cmd"` - if [ -z "$PYTHONPATH" ]; then - # Something went wrong, assume that the patchbot is not installed - echo >&2 "Error: cannot find installation path for sage_patchbot" - echo >&2 "See https://wiki.sagemath.org/buildbot for instructions" - exit 1 - fi - - # Try "python2.7", then "python2", then "python" - shopt -s execfail # Do not exit if "exec" fails - exec python2.7 -m sage_patchbot.patchbot "$@" - exec python2 -m sage_patchbot.patchbot "$@" - exec python -m sage_patchbot.patchbot "$@" - echo >&2 "Error: cannot find a suitable Python program." - echo >&2 "The SageMath patchbot requires a system Python installation." - exit 127 -fi - -# Check for '--upgrade' before sourcing sage-env: the top-level "make" -# should be run outside of the Sage shell, see #15517. -if [ "$1" = '-upgrade' -o "$1" = "--upgrade" ]; then - shift - cd "$SAGE_ROOT" - exec local/bin/sage-upgrade "$@" -fi - -# Check for '-i' before sourcing sage-env: running "make" -# should be run outside of the Sage shell. -if [ "$1" = '-f' ]; then - # -f is an alias for -i -f - set -- -i "$@" -fi - -if [ "$1" = '-i' ]; then - shift - if [ -z "$MAKE" ]; then - MAKE="make" - fi - - set -e - - cd "$SAGE_ROOT" - - # First of all, make sure that the toolchain is up-to-date - # (which is a dependency of every package) - ./sage --location - $MAKE all-toolchain - echo - - INSTALL_OPTIONS="" # Options to sage-spkg - for PKG in "$@" - do - case "$PKG" in - -info|--info) - echo >&2 "Error: 'sage -i $PKG ' is no longer supported, use 'sage --info ' instead." - exit 2;; - -f) FORCE_INSTALL=yes;; - -*) INSTALL_OPTIONS="$INSTALL_OPTIONS $PKG";; - *) - # First check that $PKG is actually a Makefile target - if ! grep "^$PKG: " build/make/Makefile >/dev/null; then - echo >&2 "Error: package '$PKG' not found" - echo >&2 "Assuming it is an old-style package... (this is deprecated: use -p instead of -i to install old-style packages)" - echo >&2 - sleep 5 - ./sage -p $INSTALL_OPTIONS "$PKG" - else - if [ x$FORCE_INSTALL = xyes ]; then - $MAKE "$PKG-clean" - fi - $MAKE SAGE_SPKG="sage-spkg $INSTALL_OPTIONS" "$PKG" - fi;; - esac - done - exit 0 -fi - - -##################################################################### -# Source sage-env ($0 is the name of this "sage" script, so we can just -# 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 -fi - - if [ $# -gt 0 ]; then if [ "$1" = '-h' -o "$1" = '-?' -o "$1" = '-help' -o "$1" = '--help' ]; then usage @@ -383,25 +197,12 @@ if [ $# -gt 0 ]; then fi 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 - 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' - echo >&2 'finished). You should run `make` in the Sage root directory first.' - echo >&2 'If you did not intend to build Sage from source, you should download' - echo >&2 'a binary tarball instead. Read README.txt for more information.' - echo >&2 '************************************************************************' - exit 1 - fi - # Display the startup banner (unless SAGE_BANNER is explicitly "no") sage_banner - maybe_sage_location - if [ ! -d "$IPYTHONDIR" ]; then # make sure that $DOT_SAGE exists so that ipython will happily # create its config directories there. If DOT_SAGE doesn't @@ -412,20 +213,6 @@ sage_setup() { } -# Check to see if the whole Sage install tree has moved. If so, -# change various hardcoded paths. Skip this if we don't have write -# access to $SAGE_LOCAL (e.g. when running as a different user) or -# if Python and sage-location haven't been installed yet. -maybe_sage_location() -{ - if [ -w "$SAGE_LOCAL" ]; then - if [ -x "$SAGE_LOCAL/bin/python" ] && [ -x "$SAGE_LOCAL/bin/sage-location" ]; then - sage-location || exit $? - fi - fi -} - - # Start an interactive Sage session, this function never returns. interactive_sage() { sage_setup @@ -530,16 +317,6 @@ if [ "$1" = '-lisp' -o "$1" = '--lisp' ] exec ecl "$@" fi -if [ "$1" = '-kash' -o "$1" = '--kash' ]; then - shift - exec kash "$@" -fi - -if [ "$1" = '-fixdoctests' -o "$1" = '--fixdoctests' ]; then - shift - exec sage-fixdoctests "$@" -fi - if [ "$1" = '-maxima' -o "$1" = '--maxima' ]; then shift exec maxima "$@" @@ -565,11 +342,6 @@ if [ "$1" = '-pip' -o "$1" = '--pip' ]; exec pip "$@" fi -if [ "$1" = '-fix-pkg-checksums' -o "$1" = '--fix-pkg-checksums' ]; then - shift - exec sage-fix-pkg-checksums "$@" -fi - if [ "$1" = '-python' -o "$1" = '--python' ]; then shift exec python "$@" @@ -595,16 +367,6 @@ if [ "$1" = '-ipython' -o "$1" = '--ipyt exec ipython "$@" fi -if [ "$1" = '-git' -o "$1" = '--git' ]; then - shift - exec git "$@" -fi - -if [ "$1" = '-git-branch' -o "$1" = '--git-branch' ]; then - shift - exec git --git-dir="$SAGE_ROOT"/.git rev-parse --abbrev-ref HEAD -fi - if [ "$1" = '-sh' -o "$1" = '--sh' ]; then # AUTHORS: # - Carl Witty and William Stein: initial version @@ -724,20 +486,6 @@ EOF fi ##################################################################### -# Test coverage of a module? -##################################################################### - -if [ "$1" = "-coverage" -o "$1" = "--coverage" ]; then - shift - exec sage-coverage "$@" -fi - -if [ "$1" = "-coverageall" -o "$1" = "--coverageall" ]; then - shift - exec sage-coverageall "$@" -fi - -##################################################################### # File conversion ##################################################################### @@ -760,11 +508,6 @@ fi # Run Sage's versions of the standard Algebra/Geometry etc. software ##################################################################### -build_sage() { - maybe_sage_location - ( cd "$SAGE_SRC" && $MAKE ) || exit $? -} - if [[ "$1" =~ ^--notebook=.* || "$1" =~ ^-n=.* || "$1" =~ ^-notebook=.* ]] ; then sage-cleaner &>/dev/null & exec sage-notebook "$@" @@ -775,13 +518,6 @@ if [ "$1" = "-notebook" -o "$1" = '--not exec sage-notebook "$@" fi -if [ "$1" = "-bn" -o "$1" = "--build-and-notebook" ]; then - shift - build_sage - sage-cleaner &>/dev/null & - exec sage-notebook --notebook=default "$@" -fi - if [ "$1" = "-inotebook" -o "$1" = '--inotebook' ]; then shift sage-cleaner &>/dev/null & @@ -800,34 +536,15 @@ if [ "$1" = '-grepdoc' -o "$1" = "--grep exit 0 fi -if [ "$1" = '-b' ]; then - time build_sage - exit $? -fi - -if [ "$1" = '-br' -o "$1" = "--br" ]; then - build_sage - interactive_sage -fi - if [ "$1" = '-r' ]; then shift interactive_sage fi -if [ "$1" = '-ba' -o "$1" = '-ba-force' -o "$1" = '--ba-force' ]; then - ( cd "$SAGE_SRC" && make clean ) - build_sage - exit $? -fi - -if [ "$1" = '-t' -o "$1" = '-bt' -o "$1" = '-tp' -o "$1" = '-btp' ]; then - if [ "$1" = '-bt' -o "$1" = '-btp' ]; then - build_sage - fi +if [ "$1" = '-t' -o "$1" = '-tp' ]; then SAGE_BANNER=no sage_setup export PYTHONIOENCODING="utf-8" # Fix encoding for doctests - if [ "$1" = '-tp' -o "$1" = '-btp' ]; then + if [ "$1" = '-tp' ]; then shift exec sage-runtests -p "$@" else @@ -836,10 +553,7 @@ if [ "$1" = '-t' -o "$1" = '-bt' -o "$1" fi fi -if [ "$1" = '-tnew' -o "$1" = '-btnew' ]; then - if [ "$1" = '-btnew' ]; then - build_sage - fi +if [ "$1" = '-tnew' ]; then shift SAGE_BANNER=no sage_setup export PYTHONIOENCODING="utf-8" # Fix encoding for doctests @@ -860,119 +574,6 @@ if [ "$1" = '-c' ]; then exec sage-eval "$@" fi -if [ "$1" = '--location' ]; then - maybe_sage_location - exit 0 -fi - - -install() { - maybe_sage_location - - for PKG in "$@" - do - # Check for options - case "$PKG" in - -*) - INSTALL_OPTIONS="$INSTALL_OPTIONS $PKG" - continue;; - esac - - PKG_NAME=`echo "$PKG" | sed -e "s/\.spkg$//"` - PKG_NAME=`basename "$PKG_NAME"` - - sage-logger \ - "sage-spkg $INSTALL_OPTIONS '$PKG'" "$SAGE_LOGS/$PKG_NAME.log" - # Do not try to install further packages if one failed - if [ $? -ne 0 ]; then - exit 1 - fi - done - # Display a message if we actually installed something (using this - # file, generated by sage-spkg, is a bit of a hack though) - if [ -f "$SAGE_LOCAL/lib/sage-force-relocate.txt" ]; then - echo - echo "Warning: it might be needed to update the Sage library before" - echo "installed packages work: you should run 'make' from \$SAGE_ROOT" - echo "before running Sage." - fi - exit 0 -} - - -if [ "$1" = '-package' -o "$1" = "--package" ]; then - shift - exec sage-package $@ -fi - -if [ "$1" = '-optional' -o "$1" = "--optional" ]; then - shift - exec sage-list-packages optional $@ -fi - -if [ "$1" = '-experimental' -o "$1" = "--experimental" ]; then - shift - exec sage-list-packages experimental $@ -fi - -if [ "$1" = '-standard' -o "$1" = "--standard" ]; then - shift - exec sage-list-packages standard $@ -fi - -if [ "$1" = '-installed' -o "$1" = "--installed" ]; then - shift - exec sage-list-packages installed $@ -fi - -if [ "$1" = '-p' ]; then - shift - # If there are no further arguments, display usage help. - if [ $# -eq 0 ]; then - exec sage-spkg - fi - install "$@" -fi - -if [ "$1" = '-info' -o "$1" = '--info' ]; then - shift - for PKG in "$@" - do - sage-spkg --info "$PKG" || exit $? - done - exit 0 -fi - -if [ "$1" = '-pkg' -o "$1" = '-spkg' -o "$1" = "--pkg" -o "$1" = "--spkg" ]; then - shift - exec sage-pkg "$@" -fi - -if [ "$1" = '-pkg_nc' -o "$1" = "--pkg_nc" ]; then - shift - exec sage-pkg -n "$@" -fi - -if [ "$1" = '-sdist' -o "$1" = "--sdist" ]; then - maybe_sage_location - shift - exec sage-sdist "$@" -fi - -if [ "$1" = '-rsyncdist' -o "$1" = "--rsyncdist" ]; then - if [ $# -ne 2 ]; then - echo >&2 "** MISSING VERSION NUMBER! **" - exit 2 - fi - maybe_sage_location - exec sage-rsyncdist $2 -fi - -if [ "$1" = "-docbuild" -o "$1" = "--docbuild" ]; then - shift - exec python -m "sage_setup.docbuild" "$@" -fi - if [ "$1" = '-gdb' -o "$1" = "--gdb" ]; then shift sage_setup @@ -1023,12 +624,6 @@ if [ "$1" = '-callgrind' -o "$1" = "--ca exec sage-callgrind "$@" fi -if [ "$1" = '-omega' -o "$1" = "--omega" ]; then - shift - sage_setup - exec sage-omega "$@" -fi - if [ "$1" = '-startuptime' -o "$1" = '--startuptime' ]; then exec sage-startuptime.py "$@" fi diff -up src/bin/sage-runtests.orig src/bin/sage-runtests --- src/bin/sage-runtests.orig 2017-11-08 06:11:02.679903285 -0500 +++ src/bin/sage-runtests 2017-11-08 06:11:18.876903905 -0500 @@ -64,10 +64,6 @@ if __name__ == "__main__": help="run doctests using Valgrind's cachegrind tool. The log " "files are named sage-cachegrind.PID and can be found in " + os.path.join(DOT_SAGE, "valgrind")) - parser.add_option("--omega", action="store_true", default=False, - help="run doctests using Valgrind's omega tool. The log " - "files are named sage-omega.PID and can be found in " + - os.path.join(DOT_SAGE, "valgrind")) parser.add_option("-f", "--failed", action="store_true", default=False, help="doctest only those files that failed in the previous run") diff -up src/bin/sage-valgrind.orig src/bin/sage-valgrind --- src/bin/sage-valgrind.orig 2017-11-08 06:11:27.655904241 -0500 +++ src/bin/sage-valgrind 2017-11-08 06:11:40.964904751 -0500 @@ -1,16 +1,6 @@ #!/usr/bin/env bash -SUPP="" -if [ -f "$SAGE_EXTCODE/valgrind/python.supp" ]; then - SUPP+=" --suppressions=$SAGE_EXTCODE/valgrind/python.supp" -else - echo "Python suppressions not found (not installed?), skipping" -fi -SUPP+=" --suppressions=$SAGE_EXTCODE/valgrind/pyalloc.supp" -SUPP+=" --suppressions=$SAGE_EXTCODE/valgrind/sage.supp" -SUPP+=" --suppressions=$SAGE_EXTCODE/valgrind/sage-additional.supp" - -MEMCHECK_FLAGS="--leak-resolution=high --leak-check=full --num-callers=25 $SUPP" +MEMCHECK_FLAGS="--leak-resolution=high --leak-check=full --num-callers=25" if [ "$SAGE_MEMCHECK_FLAGS" ]; then echo "Overwriting memcheck flags with: $SAGE_MEMCHECK_FLAGS"