# -*- shell-script -*-
###########################################################################
#
# Set environment variables for building and/or running Sage.
#
# NOTES:
# - You must *source* this script instead of executing.
# - Use "return" instead of "exit" to signal a failure. Since this
# file is sourced, an "exit" here will actually exit src/bin/sage,
# which is probably not intended.
# - All environment variables set here should be *exported*, otherwise
# they won't be available in child programs.
# - This script has a version number such that a newer version of
# sage-env can be sourced when upgrading. See below.
#
# If you want to set all environment variables for your shell like
# they are during the build of Sage packages, type
#
# . src/bin/sage-env
#
# from the SAGE_ROOT directory.
#
# AUTHORS: William Stein, David Kirkby, Jeroen Demeyer,
# J. H. Palmieri, Leif Leonhardy and others.
#
##########################################################################
# Resolve all symbolic links in a filename. This more or less behaves
# like "readlink -f" except that it does not convert the filename to an
# absolute path (a relative path remains relative), nor does it treat
# "." or ".." specially.
#
# AUTHOR: Jeroen Demeyer (2011-08-23): Github issues #5852 and #11704
#
resolvelinks() {
# $in is what still needs to be converted (normally has no starting slash)
in="$1"
# $out is the part which is converted (normally ends with trailing slash)
out="./"
# Move stuff from $in to $out
while [ -n "$in" ]; do
# Normalize $in by replacing consecutive slashes by one slash
in=$(echo "${in}" | sed 's://*:/:g')
# If $in starts with a slash, remove it and set $out to the root
in_without_slash=${in#/}
if [ "$in" != "$in_without_slash" ]; then
in=$in_without_slash
out="/"
continue
fi
# Check that the directory $out exists by trying to cd to it.
# If this fails, then cd will show an error message (unlike
# test -d "$out"), so no need to be more verbose.
( cd "$out" ) || return $?
# Get the first component of $in
f=${in%%/*}
# If it is not a symbolic link, simply move it to $out
if [ ! -L "$out$f" ]; then
in=${in#"$f"}
out="$out$f"
# If the new $in starts with a slash, move it to $out
in_without_slash=${in#/}
if [ "$in" != "$in_without_slash" ]; then
in=$in_without_slash
out="$out/"
fi
continue
fi
# Now resolve the symbolic link "$f"
f_resolved=`readlink -n "$out$f" 2>/dev/null`
status=$?
# status 127 means readlink could not be found.
if [ $status -eq 127 ]; then
# We don't have "readlink", try a stupid "ls" hack instead.
# This will fail if we have filenames like "a -> b".
fls=`ls -l "$out$f" 2>/dev/null`
status=$?
f_resolved=${fls##*-> }
# If $fls equals $f_resolved, then certainly
# something is wrong
if [ $status -eq 0 -a "$fls" = "$f_resolved" ]; then
echo >&2 "Cannot parse output from ls -l '$out$f'"
return 1
fi
fi
if [ $status -ne 0 ]; then
echo >&2 "Cannot read symbolic link '$out$f'"
return $status
fi
# In $in, replace $f by $f_resolved (leave $out alone)
in="${in#${f}}"
in="${f_resolved}${in}"
done
# Return $out
echo "$out"
}
# Make sure that SAGE_ROOT is either an absolute physical directory name
# or empty.
if [ -n "$SAGE_ROOT" ]; then
export SAGE_ROOT=$(cd "$SAGE_ROOT" 2>/dev/null && pwd -P)
fi
# Don't execute the commands more than once for the same version of
# sage-env... for the same combination of SAGE_LOCAL and SAGE_VENV.
# "6" indicates the version of the format of the value of SAGE_ENV_VERSION.
SAGE_ENV_VERSION="6:$SAGE_LOCAL:$SAGE_VENV:$SAGE_SRC"
if [ "$SAGE_ENV_SOURCED" = "$SAGE_ENV_VERSION" ]; then
# Already sourced, nothing to do.
return 0
fi
# Set SAGE_ENV_SOURCED to the appropriate value at the end of this file, once
# $SAGE_LOCAL, $SAGE_VENV, $SAGE_SRC have been set.
# The compilers are set in order of priority by
# 1) environment variables
# 2) compiler installed by sage
# 3) compiler set at configuration time
if [ -z "$CC" ]; then
if [ -n "$SAGE_LOCAL" -a -x "$SAGE_LOCAL/bin/gcc" ]; then
CC=gcc
elif [ -n "$CONFIGURED_CC" ]; then
CC="$CONFIGURED_CC"
fi
export CC
fi
if [ -z "$CXX" ]; then
if [ -n "$SAGE_LOCAL" -a -x "$SAGE_LOCAL/bin/g++" ]; then
CXX=g++
elif [ -n "$CONFIGURED_CXX" ]; then
CXX="$CONFIGURED_CXX"
fi
export CXX
fi
if [ -z "$FC" ]; then
if [ -n "$SAGE_LOCAL" -a -x "$SAGE_LOCAL/bin/gfortran" ]; then
FC=gfortran
elif [ -n "$CONFIGURED_FC" ]; then
FC="$CONFIGURED_FC"
fi
export FC
fi
if [ "$UNAME" = "Darwin" ]; then
if [ -z "$OBJC" ]; then
OBJC="$CONFIGURED_OBJC"
fi
if [ -z "$OBJCXX" ]; then
OBJCXX="$CONFIGURED_OBJCXX"
fi
export OBJC OBJCXX
fi
# Set other Fortran-related compiler variables
export F77="$FC"
export F90="$FC" # Needed for SciPy
export F95="$FC"
# For ARCHFLAGS (#31227) we need to distinguish unset and empty.
# If the environment defines ARCHFLAGS, even when empty, then take that.
# Otherwise, use the configured value; but if that is "unset", do not set
# the variable at all.
if [ "${ARCHFLAGS-unset}" = "unset" ]; then
if [ "${SAGE_ARCHFLAGS-unset}" != "unset" ]; then
export ARCHFLAGS="${SAGE_ARCHFLAGS}"
fi
fi
# Call with: contains_spaces X${VAR}X
# i.e., WITHOUT quotes but some character(s) around the environment variable to test.
# (This function does return false for empty/unset variables.)
contains_spaces()
{
if [ $# -ne 1 ]; then
return 0 # true
else
return 1 # false
fi
}
if contains_spaces X${SAGE_ROOT}X ; then
echo "Error: The path to the Sage directory (\$SAGE_ROOT) MUST NOT contain spaces."
echo "It is currently \"$SAGE_ROOT\"."
echo "Please correct this by moving Sage (or renaming one or more directories) first."
echo "Exiting now..."
return 1
fi
if [ 1 = 2 ]; then
echo "The following environment variables can be set by the user"
echo "AR The archiver (e.g. ar, /usr/ccs/bin/ar or /usr/bin/ar)"
echo "AS The assembler (e.g. as, /usr/ccs/bin/as or /usr/bin/as)"
echo "CC The C compiler (e.g cc, /opt/SUNWspro/bin/cc or /usr/bin/gcc)"
echo "CFLAGS Flag(s) for the C compiler (e.g. -g -Wall -O2)"
echo " (You are advised to a some optimisation flag(s), such as -O2 or -xO2 to CFLAGS)"
echo "CXX The C++ compiler (e.g g++, /opt/SUNWspro/bin/CC or /usr/local/bin/g++)"
echo "CXXFLAGS Flag(s) for the C++ compiler (e.g. -fast -fsimple=1 -x04)"
echo "LD The linker (e.g. ld, /usr/ccs/bin/ld or /usr/bin/ld)"
echo "LDFLAGS Linker flag(s) (e.g. -D token)"
echo "LN Used to make links (e.g. ln, /usr/xpg4/bin/ln or /usr/bin/ln)"
echo "MAKE The make program (e.g. make, /usr/bin/make or /usr/local/bin/gmake)"
echo "MAKEFLAGS Flag(s) to make (e.g. -j4)."
echo "RANLIB Archiver ranlib (e.g. ranlib, /usr/ccs/bin/ranlib etc)"
echo "SHAREDFLAGS Flag(s) necessary for building a shared library (e.g. -fPIC or -xcode=pic32)"
echo "We attempt to set this to sensible values, but check below to"
echo "ensure they are OK. If you wish to override any then please use:"
echo "setenv NAME_OF_ENVIRONMENT_VARIABLE value_of_environment_variable"
echo "(if you use tcsh, csh or a similar shell) or"
echo "NAME_OF_ENVIRONMENT_VARIABLE value_of_environment_variable"
echo "export NAME_OF_ENVIRONMENT_VARIABLE"
echo "if you use sh, bash or a similar shell"
fi
# Setting Sage-related location environment variables,
# depending on SAGE_ROOT and SAGE_LOCAL which are already defined.
if [ -n "$SAGE_LOCAL" ]; then
export SAGE_SHARE="$SAGE_LOCAL/share"
export SAGE_SPKG_INST="$SAGE_LOCAL/var/lib/sage/installed" # deprecated
fi
if [ -n "$SAGE_SHARE" ]; then
export SAGE_DOC="$SAGE_SHARE/doc/sage"
fi
if [ -d "$SAGE_ROOT" ]; then
export SAGE_LOGS="$SAGE_ROOT/logs/pkgs"
export SAGE_SRC="$SAGE_ROOT/src"
fi
if [ -n "$SAGE_SRC" ]; then
export SAGE_DOC_SRC="$SAGE_SRC/doc"
fi
if [ -n "$SAGE_PKG_CONFIG_PATH" ]; then
# set up external pkg-config to look into SAGE_LOCAL/lib/pkgconfig/
# (Sage's pkgconf spkg takes care of this, if installed)
export PKG_CONFIG_PATH="$SAGE_PKG_CONFIG_PATH${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
fi
if [ -z "${SAGE_ORIG_PATH_SET}" ]; then
SAGE_ORIG_PATH=$PATH && export SAGE_ORIG_PATH
SAGE_ORIG_PATH_SET=True && export SAGE_ORIG_PATH_SET
fi
if [ -n "$SAGE_LOCAL" ]; then
export PATH="$SAGE_LOCAL/bin:$PATH"
fi
if [ -n "$SAGE_VENV" ]; then
export PATH="$SAGE_VENV/bin:$PATH"
fi
if [ -d "$SAGE_ROOT" ]; then
export PATH="$SAGE_ROOT/build/bin:$PATH"
fi
# We offer a toolchain option, so if $SAGE_LOCAL/toolchain/toolchain-env exists source it.
# Since the user might do something crazy we do not do any checks, but hope for the best.
if [ -n "$SAGE_LOCAL" -a -f "$SAGE_LOCAL"/toolchain/toolchain-env ]; then
source "$SAGE_LOCAL"/toolchain/toolchain-env
fi
# setting of the variable UNAME (describing the o.s.)
export UNAME=`uname`
# Mac OS X-specific setup
if [ "$UNAME" = "Darwin" ]; then
export MACOSX_VERSION=`uname -r | awk -F. '{print $1}'`
# Work around problems on recent OS X crashing with an error message
# "... may have been in progress in another thread when fork() was called"
# when objective-C functions are called after fork(). See Issue #25921.
# Most likely, these errors are false positives, so we disable them:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
fi
if [ -n "$SAGE_LOCAL" ]; then
# Compile-time path for libraries. This is the equivalent of
# adding the gcc option -L $SAGE_LOCAL/lib.
[ -z "$LIBRARY_PATH" ] || LIBRARY_PATH=":${LIBRARY_PATH}"
export LIBRARY_PATH="$SAGE_LOCAL/lib${LIBRARY_PATH}"
# Compile-time path for include files. This is the equivalent of
# adding the gcc option -I $SAGE_LOCAL/include.
[ -z "$CPATH" ] || CPATH=":${CPATH}"
export CPATH="$SAGE_LOCAL/include${CPATH}"
fi
if [ -n "$SAGE_LOCAL" ]; then
# Ensure that there is a colon at the end of $INFOPATH by
# stripping the existing one (if it exists), and then adding a new
# one. This forces the "info" program to check various default
# system locations when the user does not have $INFOPATH set. This
# is necessary to find some *.info files installed by system
# packages when "info" from the SPKG is used.
export INFOPATH="${SAGE_LOCAL}/share/info:${INFOPATH%:}:"
fi
if [ -z "$SAGE_REPO_ANONYMOUS" ]; then
SAGE_REPO_ANONYMOUS="https://github.com/sagemath/sage.git"
export SAGE_REPO_ANONYMOUS
fi
if [ -z "$SAGE_REPO_AUTHENTICATED" ]; then
SAGE_REPO_AUTHENTICATED="https://github.com/sagemath/sage.git"
export SAGE_REPO_AUTHENTICATED
fi
if [ -d "$SAGE_ROOT" ]; then
if [ -z "$SAGE_DISTFILES" ]; then
SAGE_DISTFILES="$SAGE_ROOT/upstream"
export SAGE_DISTFILES
fi
fi
# Check that $HOME exists
if [ "$HOME" = "" ]; then
echo >&2 'Error: environment variable $HOME is not set.'
return 1
fi
if ! [ -d "$HOME" ]; then
echo >&2 "Error: HOME directory '$HOME' does not exist."
return 1
fi
if [ "$DOT_SAGE" = "" ]; then
# It is *not* an error if this directory does not exist, it will
# be created in src/bin/sage or src/sage/misc/misc.py.
# This also works if $HOME/.sage is a symbolic link to a
# non-existing directory.
DOT_SAGE=`resolvelinks "$HOME/.sage"`
# In theory, DOT_SAGE is not required to have a trailing slash.
# But since there are some issues (#11924, maybe #12221),
# we add a slash for safety.
DOT_SAGE="${DOT_SAGE}/"
export DOT_SAGE
fi
if [ "$SAGE_STARTUP_FILE" = "" ]; then
SAGE_STARTUP_FILE="$DOT_SAGE/init.sage"
export SAGE_STARTUP_FILE
fi
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 https://github.com/sagemath/sage/issues/19612.
#
# For more history (it used to be PYTHONNOUSERSITE=yes which killed
# the ability to do "sage -pip install PACKAGE --user"), see
# https://github.com/sagemath/sage/issues/14243 and
# https://github.com/sagemath/sage/issues/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
if [ -n "$SAGE_LOCAL" ]; then
# Construct and export LDFLAGS
if [ "$UNAME" = "Darwin" ]; then
LDFLAGS="-L$SAGE_LOCAL/lib $LDFLAGS"
# On OS X, use the old linker if it is available.
# if "ld-classic" is present in the selected XCode
# toolchain, add "-Wl,-ld_classic" to LDFLAGS (see #36599) unless
# LD is already set, as it will be with conda on macOS. When the
# selected toolchain is in the Xcode app the output of "xcode-select -p"
# is "/Applications/Xcode.app/Contents/Developer", but "ld-classic" is
# not in the subdirectory "usr/bin/" but rather in the subdirectory
# "Toolchains/XcodeDefault.xctoolchain/usr/bin/". (See #37237.)
if [ -z "$LD" ]; then
# Running xcode-select on a system with no toolchain writes an
# error message to stderr, so redirect stderr to /dev/null.
XCODE_PATH=$(/usr/bin/xcode-select -p 2> /dev/null)
if [ -n $XCODE_PATH ]; then
if [ -x "$XCODE_PATH/usr/bin/ld-classic" -o \
-x "$XCODE_PATH/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld-classic" ]; then
# Add -ld_classic only if -ld_classic is not deprecated.
if [ -z "$(ld -ld_classic 2>&1 | grep 'ld_classic is deprecated')" ]; then
LDFLAGS="$LDFLAGS -Wl,-ld_classic"
fi
fi
else
# On a macOS system with no toolchain we don't want this script
# to call gcc because that will also print an error message to
# stderr. We can avoid this by setting AS and LD to their
# default values.
AS=as
LD=ld
fi
fi
fi
if [ "$UNAME" = "Linux" ]; then
LDFLAGS="-L$SAGE_LOCAL/lib -Wl,-rpath,$SAGE_LOCAL/lib $LDFLAGS"
LDFLAGS="-Wl,-rpath-link,$SAGE_LOCAL/lib $LDFLAGS"
fi
export LDFLAGS
fi
if [ -z "$IPYTHONDIR" ]; then
# We hardcode a version number in the directory name. The idea is
# that we keep using the same version number as long as that is
# possible. Only when some future IPython version really requires
# a new structure for the $IPYTHONDIR should this version number be
# changed to the new IPython version.
export IPYTHONDIR="$DOT_SAGE/ipython-5.0.0"
fi
if [ -z "$JUPYTER_CONFIG_DIR" ]; then
# We hardcode a version number in the directory name. The idea is
# that we keep using the same version number as long as that is
# possible. Only when some future Jupyter version really requires
# a new structure for the $JUPYTER_CONFIG_DIR should this version
# number be changed to the new jupyter_core version.
export JUPYTER_CONFIG_DIR="$DOT_SAGE/jupyter-4.1"
fi
if [ -z "$MPLCONFIGDIR" ]; then
# We hardcode a version number in the directory name. The idea is
# that we keep using the same version number as long as that is
# possible. Only when some future Matplotlib version really requires
# a new structure for the $MPLCONFIGDIR should this version
# number be changed to the new matplotlib version.
export MPLCONFIGDIR="$DOT_SAGE/matplotlib-1.5.1"
fi
# Make sure that a system-wide R installation does not interfere
unset R_HOME
unset R_PROFILE
# Do not use the global Makevars.site and ~/.R/Makevars when installing R packages
# Provide empty files to appease some R packages' installation scripts.
if [ -n "$SAGE_LOCAL" -a -d "$SAGE_LOCAL/lib/R/share" ] ; then
R_MAKEVARS_SITE="$SAGE_LOCAL/lib/R/share/Makevars.site" && export R_MAKEVARS_SITE
if ! [ -f "$R_MAKEVARS_SITE" ] ; then
if ! [ -e "$R_MAKEVARS_SITE" ] ; then
echo "## Empty site-wide Makevars file for Sage's R" > "$R_MAKEVARS_SITE"
else
>&2 echo "Warning: $R_MAKEVARS_SITE exists and is not a file : trouble ahead..."
fi
fi
fi
if [ -d "$DOT_SAGE" ] ; then
if ! [ -d "$DOT_SAGE/R" ] ; then
if ! [ -e "$DOT_SAGE/R" ] ; then
mkdir -p "$DOT_SAGE/R"
else
>&2 echo "Warning: $DOT_SAGE/R exists and is not a directory : trouble ahead..."
fi
fi
R_MAKEVARS_USER="$DOT_SAGE/R/Makevars.user" && export R_MAKEVARS_USER
if ! [ -f "$R_MAKEVARS_USER" ] ; then
if ! [ -e "$R_MAKEVARS_USER" ] ; then
echo "## Empty user-specific Makevars file for Sage's R" > "$R_MAKEVARS_USER"
else
>&2 echo "Warning: $R_MAKEVARS_USER exists and is not a file : trouble ahead..."
fi
fi
fi
export MAXIMA_USERDIR="$DOT_SAGE/maxima"
if [ -n "$SAGE_LOCAL" ]; then
PERL5LIB="$SAGE_LOCAL/lib/perl5:$PERL5LIB" && export PERL5LIB
fi
# Allow SAGE_BROWSER to override BROWSER (Issue #22449)
if [ -n "$SAGE_BROWSER" ]; then
export BROWSER="$SAGE_BROWSER"
fi
############ compilation flags
# Setting Sage-related compilation flags.
# This could be used in code to make special changes only when
# code is being built as part of Sage.
export __sage__=""
# Setup env varariables if ccache is installed
if [ -n "$SAGE_LOCAL" -a -d "$SAGE_LOCAL/libexec/ccache" ]; then
PATH="$SAGE_LOCAL/libexec/ccache:$PATH"
fi
if [ -d "$SAGE_ROOT" -a -z "$CCACHE_BASEDIR" ]; then
export CCACHE_BASEDIR="$SAGE_ROOT"
fi
# Set AS to assembler used by $CC ("as" by default)
if [ "$AS" = "" ]; then
CC_as=`$CC -print-prog-name=as 2>/dev/null`
if command -v $CC_as >/dev/null 2>/dev/null; then
AS="$CC_as"
fi
if [ "$AS" = "" ]; then
AS=as
fi
fi
export AS
# Set LD to linker used by $CC ("ld" by default)
if [ "$LD" = "" ]; then
CC_ld=`$CC -print-prog-name=ld 2>/dev/null`
if command -v $CC_ld >/dev/null 2>/dev/null; then
LD="$CC_ld"
fi
if [ "$LD" = "" ]; then
LD=ld
fi
fi
export LD
if [ "$AR" = "" ]; then
AR="ar" && export AR
fi
if [ "$LDFLAGS" = "" ]; then
LDFLAGS="" && export LDFLAGS
fi
if [ -z "$CFLAGS" ]; then
unset CFLAGS
fi
if [ -z "$CXXFLAGS" ]; then
unset CXXFLAGS
fi
if [ -n "$CFLAGS" -a -z "$CXXFLAGS" ]; then
export CXXFLAGS="$CFLAGS"
fi
if [ "$CP" = "" ]; then
CP="cp" && export CP
fi
if [ "$MV" = "" ]; then
MV="mv" && export MV
fi
if [ "$RANLIB" = "" ]; then
RANLIB="ranlib" && export RANLIB
fi
if [ "$LN" = "" ]; then
LN="ln" && export LN
fi
if [ "$MKDIR" = "" ]; then
MKDIR="mkdir" && export MKDIR
fi
if [ "$CHMOD" = "" ]; then
CHMOD="chmod" && export CHMOD
fi
if [ "$TOUCH" = "" ]; then
TOUCH="touch" && export TOUCH
fi
# Handle parallel building/testing/...
case "$SAGE_NUM_THREADS,$SAGE_NUM_THREADS_PARALLEL" in
[1-9][0-9]*,[1-9][0-9]*)
# Variables are set to positive values already,
# sage-num-threads.py would just recompute them
;;
*)
# See Issue Ticket #12016
# First, figure out the right values for SAGE_NUM_THREADS (default
# number of threads) and SAGE_NUM_THREADS_PARALLEL (default number of
# threads when parallel execution is asked explicitly).
sage_num_threads_array=$("$(dirname "$0")"/sage-num-threads.py 2>/dev/null || echo 1 2 1)
sage_num_threads_array="${sage_num_threads_array% *}" # strip third item
SAGE_NUM_THREADS="${sage_num_threads_array% *}" # keep first item
SAGE_NUM_THREADS_PARALLEL="${sage_num_threads_array#* }" # keep second item
export SAGE_NUM_THREADS
export SAGE_NUM_THREADS_PARALLEL
;;
esac
# Multithreading in OpenBLAS does not seem to play well with Sage's attempts to
# spawn new processes, see #26118. Apparently, OpenBLAS sets the thread
# affinity and, e.g., parallel doctest jobs, remain on the same core.
# Disabling that thread-affinity with OPENBLAS_MAIN_FREE=1 leads to hangs in
# some computations.
# So we disable OpenBLAS' threading completely; we might loose some performance
# here but strangely the opposite seems to be the case. Note that callers such
# as LinBox use a single-threaded OpenBLAS anyway.
export OPENBLAS_NUM_THREADS=1
if [ "$MAKE" = "" ]; then
MAKE="make"
fi
# If MAKEFLAGS exists, assume it got set by make.
# Therefore, remove all flags from $MAKE
if [ "${MAKEFLAGS-__unset__}" != "__unset__" ]; then
MAKE=`echo "$MAKE" | sed 's/ .*//'`
fi
export MAKE
# Set the cysignals crash logs directory
if [ -z "$CYSIGNALS_CRASH_LOGS" ]; then
export CYSIGNALS_CRASH_LOGS="$DOT_SAGE/crash_logs"
export CYSIGNALS_CRASH_DAYS=7 # keep logs for 7 days
fi
# You can set environment variables in $SAGE_RC_FILE
# (by default, this is the file $DOT_SAGE/sagerc). For example,
# setting PS1 there will set your prompt when you run "sage --sh".
if [ -z "$SAGE_RC_FILE" ]; then
SAGE_RC_FILE="$DOT_SAGE/sagerc"
fi
if [ -r "$SAGE_RC_FILE" ]; then
source "$SAGE_RC_FILE"
if [ $? -ne 0 ]; then
echo >&2 "Error sourcing $SAGE_RC_FILE"
exit 1
fi
fi
if [ -n "$SAGE_LOCAL" ]; then
# If we move the Sage tree then ncurses cannot find terminfo, hence, we
# tell it where to find it. See Issue Ticket #15091
export TERMINFO="$SAGE_LOCAL/share/terminfo"
# If nodejs is installed, activate the nodeenv containing it.
nodeenv_activate="$SAGE_LOCAL/share/nodejs/activate"
if [ -f "$nodeenv_activate" ]; then
# symlinked into nodeenv for specific version of nodejs installed
# The activate script needs to be sourced using its actual path.
nodeenv_activate=`resolvelinks "$nodeenv_activate"`
# Don't let nodeenv wipe out the sage-sh/sage-buildsh prompt.
NODE_VIRTUAL_ENV_DISABLE_PROMPT=1 . "$nodeenv_activate"
if [ $? -ne 0 ]; then
echo >&2 "Warning: failed to activate the nodeenv containing nodejs"
fi
elif [ -L "$nodeenv_activate" ]; then
echo >&2 "Warning: the nodeenv activation symlink for nodejs is broken"
fi
fi
# Newer versions of debugpy come with a bundled pydevd that complains
# about >=python-3.11's core modules being frozen (and therefore not
# breakpoint-able). This workaround simply hides the warning to keep
# our doctests predictable (which was the status quo with earlier
# versions of debugpy).
export PYDEVD_DISABLE_FILE_VALIDATION=1
# Finally, set SAGE_ENV_SOURCED as evidence that this script has been
# run successfully.
export SAGE_ENV_SOURCED="6:$SAGE_LOCAL:$SAGE_VENV:$SAGE_SRC"