diff -up src/bin/sage.orig src/bin/sage --- src/bin/sage.orig 2021-08-22 02:44:33.000000000 -0600 +++ src/bin/sage 2021-08-26 13:09:38.262699484 -0600 @@ -109,7 +109,6 @@ usage() { echo " --gap [...] -- run Sage's Gap with given arguments" echo " --gp [...] -- run Sage's PARI/GP calculator with given arguments" echo " -h -- print this help message" - echo " --pip [...] -- invoke pip, the Python package manager" echo " --maxima [...] -- run Sage's Maxima with given arguments" echo " --mwrank [...] -- run Sage's mwrank with given arguments" echo " --notebook=[...] -- start the Sage notebook (valid options are" @@ -160,111 +159,6 @@ if [ -f "${SELF}-env-config" ]; then fi ##################################################################### -# 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 "${SELF}" "$@" - 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" --python3 -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 - - shopt -s execfail # Do not exit if "exec" fails - exec python3 -m sage_patchbot.patchbot "$@" - echo >&2 "Error: cannot find a suitable Python 3 program." - echo >&2 "The SageMath patchbot requires a system Python 3 installation." - exit 127 -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;; - # Setting SAGE_CHECK here duplicates what we do in sage-spkg - # but we need it in "make" already when there are (order-only) - # dependencies on packages providing test infrastructure - -c) INSTALL_OPTIONS="$INSTALL_OPTIONS $OPT"; export SAGE_CHECK=yes;; - -w) INSTALL_OPTIONS="$INSTALL_OPTIONS $OPT"; export SAGE_CHECK=warn;; - -*) 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 - # 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, installing these is no longer supported" - exit 1 - fi - $MAKE SAGE_SPKG="sage-spkg $INSTALL_OPTIONS" "$PKG" - done - echo "New packages may have been installed." - echo "Re-running configure and make in case any dependent packages need updating." - touch "$SAGE_ROOT/configure" && $MAKE all-build - exit 0 -fi - -##################################################################### # Report information about the Sage environment ##################################################################### @@ -309,20 +203,6 @@ 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 [ "$SAGE_SRC_ENV_CONFIG" = 1 ] && [ ! -z "$SAGE_VENV" ] && [ ! -x "$SAGE_VENV/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 @@ -333,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 [ -n "$SAGE_LOCAL" -a -w "$SAGE_LOCAL" ]; then - if [ -x "$SAGE_VENV/bin/python" ] && [ -x "$SAGE_VENV/bin/sage-location" ]; then - sage-location || exit $? - fi - fi -} - - # Start an interactive Sage session, this function never returns. interactive_sage() { sage_setup @@ -384,8 +250,6 @@ usage_advanced() { echo " --nodotsage -- run Sage without using the user's" echo " .sage directory: create and use a temporary" echo " .sage directory instead." - echo " --gthread, --qthread, --q4thread, --wthread, --pylab" - echo " -- pass the option through to IPython" echo " --simple-prompt -- pass the option through to IPython: use" echo " this option with sage-shell mode in emacs" if [ -n "$SAGE_SRC" -a -d "$SAGE_SRC" ]; then @@ -419,18 +283,9 @@ usage_advanced() { echo " environment (not Sage), passing additional" echo " additional options to IPython" echo " --jupyter [...] -- run Sage's Jupyter with given arguments" - echo " --kash [...] -- run Sage's Kash with the given arguments" - command -v kash &>/dev/null || \ - echo " (not installed currently, run sage -i kash)" - echo " --M2 [...] -- run Sage's Macaulay2 with the given arguments" - command -v M2 &>/dev/null || \ - echo " (not installed currently, run sage -i macaulay2)" echo " --maxima [...] -- run Sage's Maxima with the given arguments" echo " --mwrank [...] -- run Sage's mwrank with the given arguments" - echo " --pip [...] -- invoke pip, the Python package manager" echo " --polymake [...] -- run Sage's Polymake with given arguments" - command -v polymake &>/dev/null || \ - echo " (not installed currently, run sage -i polymake)" echo " --python [...], --python3 [...]" echo " -- run the Python 3 interpreter" echo " -R [...] -- run Sage's R with the given arguments" @@ -677,11 +532,6 @@ if [ "$1" = '-lisp' -o "$1" = '--lisp' ] exec ecl "$@" fi -if [ "$1" = '-kash' -o "$1" = '--kash' ]; then - shift - exec kash "$@" -fi - if [ "$1" = '-maxima' -o "$1" = '--maxima' ]; then shift maxima_cmd=$(sage-config MAXIMA 2>/dev/null) @@ -706,11 +556,6 @@ if [ "$1" = '-R' -o "$1" = '--R' ]; then exec R "$@" fi -if [ "$1" = '-git' -o "$1" = '--git' ]; then - shift - exec git "$@" -fi - ##################################################################### # sage --sh and sage --buildsh ##################################################################### @@ -877,11 +722,6 @@ fi # build_sage, sage -b, sage -br, etc. could be moved to # build/bin/sage-site. See #29111. -build_sage() { - maybe_sage_location - ( cd "$SAGE_ROOT/build/make" && ./install sagelib-no-deps ) || exit $? -} - if [[ "$1" =~ ^--notebook=.* || "$1" =~ ^-n=.* || "$1" =~ ^-notebook=.* ]] ; then sage-cleaner &>/dev/null & exec sage-notebook "$@" @@ -892,13 +732,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 [ -n "$SAGE_SRC" -a -d "$SAGE_SRC" ]; then # Source inspection facilities, supported on sage-the-distribution and on distributions # that package the Sage sources. @@ -915,46 +748,18 @@ if [ -n "$SAGE_SRC" -a -d "$SAGE_SRC" ]; fi fi -if [ "$1" = '-b' ]; then - 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-force' -o "$1" = '--ba-force' ]; then - echo - echo "WARNING: 'sage --ba-force' is deprecated; use 'sage -ba' instead." - echo - ( cd "$SAGE_ROOT/build/make" && make sagelib-clean ) - build_sage - exit $? -fi - -if [ "$1" = '-ba' ]; then - ( cd "$SAGE_ROOT/build/make" && make sagelib-clean ) - build_sage - exit $? -fi - exec-runtests() { sage_setup export PYTHONIOENCODING="utf-8" # Fix encoding for doctests exec sage-runtests "$@" } -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 if [ "$1" = '-tp' -o "$1" = '-btp' ]; then shift exec-runtests -p "$@" @@ -964,34 +769,11 @@ if [ "$1" = '-t' -o "$1" = '-bt' -o "$1" fi fi -if [ "$1" = '-tnew' -o "$1" = '-btnew' ]; then - if [ "$1" = '-btnew' ]; then - build_sage - fi - shift - exec-runtests --new "$@" -fi - if [ "$1" = '-testall' -o "$1" = "--testall" ]; then shift exec-runtests -a "$@" fi -if [ "$1" = '-fixdoctests' -o "$1" = '--fixdoctests' ]; then - shift - exec sage-fixdoctests "$@" -fi - -if [ "$1" = "-coverage" -o "$1" = "--coverage" ]; then - shift - exec sage-coverage "$@" -fi - -if [ "$1" = "-coverageall" -o "$1" = "--coverageall" ]; then - shift - exec sage-coverage --all "$@" -fi - if [ "$1" = '-startuptime' -o "$1" = '--startuptime' ]; then exec sage-startuptime.py "$@" fi @@ -1014,59 +796,11 @@ fi # Creating and handling Sage distributions ##################################################################### -# The following could be moved to build/bin/sage-site. See #29111. - -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 - exit 0 -} - 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" = '-sdist' -o "$1" = "--sdist" ]; then - maybe_sage_location - shift - exec sage-sdist "$@" -fi - ##################################################################### # Debugging tools ##################################################################### @@ -1110,12 +844,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" = '-gthread' -o "$1" = '-qthread' -o "$1" = '-q4thread' -o "$1" = '-wthread' -o "$1" = '-pylab' -o "$1" = '--simple-prompt' -o "$1" = '-simple-prompt' ]; then # Intentionally no "shift" here interactive_sage "$@"