diff -up src/bin/sage.orig src/bin/sage --- src/bin/sage.orig 2018-12-22 16:37:06.000000000 -0700 +++ src/bin/sage 2019-01-16 09:42:10.064567132 -0700 @@ -26,13 +26,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" @@ -40,7 +37,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 interpreter" echo " -python2 [...] -- run the Python 2 interpreter" echo " -python3 [...] -- run the Python 3 interpreter" @@ -58,10 +54,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 } @@ -81,11 +73,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 @@ -97,8 +86,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" @@ -118,18 +105,11 @@ usage_advanced() { echo " -ipython [...] -- run Sage's IPython using the default environment (not" echo " Sage), passing additional options to IPython" echo " -ipython3 [...] -- same as above, but using Python 3" - 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" @@ -141,55 +121,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" @@ -223,7 +155,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" @@ -249,16 +180,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" @@ -272,9 +193,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'." @@ -284,115 +202,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" - - # Parse options - PACKAGES="" # Packages to install - INSTALL_OPTIONS="" # Options to sage-spkg - for OPT in "$@"; do - case "$OPT" in - -info|--info) - echo >&2 "Error: 'sage -i $OPT ' is no longer supported, use 'sage --info ' instead." - exit 2;; - -f) FORCE_INSTALL=yes;; - -*) INSTALL_OPTIONS="$INSTALL_OPTIONS $OPT";; - *) PACKAGES="$PACKAGES $OPT";; - esac - done - - # First, uninstall the packages if -f was given - if [ "$FORCE_INSTALL" = yes ]; then - for PKG in $PACKAGES; do - $MAKE "$PKG-clean" || true # Ignore errors - done - fi - - # Make sure that the toolchain is up-to-date - # (which is a dependency of every package) - $MAKE all-toolchain - - ALL_TARGETS="$($MAKE list 2>/dev/null)" - - # Now install the packages - for PKG in $PACKAGES; do - echo - # First check that $PKG is actually a Makefile target - # See https://trac.sagemath.org/ticket/25078 - if ! echo "$ALL_TARGETS" | grep "^${PKG}$" >/dev/null; then - echo >&2 "Error: package '$PKG' not found" - echo >&2 "Note: if it is an old-style package, use -p instead of -i to install it" - exit 1 - fi - $MAKE SAGE_SPKG="sage-spkg $INSTALL_OPTIONS" "$PKG" - done - exit 0 -fi - - -##################################################################### # Report information about the Sage environment ##################################################################### @@ -421,35 +230,8 @@ if [ $# -gt 0 ]; then 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 - - # 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 - - 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 @@ -460,20 +242,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 @@ -557,16 +325,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 "$@" @@ -592,11 +350,6 @@ if [ "$1" = '-pip' -o "$1" = '--pip' ]; exec sage-python23 -m 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 if [ "$SAGE_PYTHON3" = 'yes' ]; then @@ -631,16 +384,6 @@ if [ "$1" = '-ipython3' -o "$1" = '--ipy exec ipython3 "$@" 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 @@ -760,20 +503,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 ##################################################################### @@ -804,11 +533,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 "$@" @@ -819,13 +543,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 & @@ -844,34 +561,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_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 @@ -880,10 +578,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_setup export PYTHONIOENCODING="utf-8" # Fix encoding for doctests @@ -904,122 +599,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 all --installed-only $@ -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 - # Redirect stdin from /dev/null. This helps with running TeX which - # tends to ask interactive questions if something goes wrong. These - # cause the build to hang. If stdin is /dev/null, TeX just aborts. - shift - exec sage-python23 -m sage_setup.docbuild "$@"