#10469: Don't (effectively) source sage-env more than once
----------------------+-----------------------------------------------------
Reporter: leif | Owner: GeorgSWeber
Type: defect | Status: new
Priority: major | Milestone: sage-4.6.1
Component: build | Keywords: environment variables sage-sage scripts
Author: | Upstream: N/A
Reviewer: | Merged:
Work_issues: |
----------------------+-----------------------------------------------------
This can currently happen because
* some scripts (like e.g. at least `sage-spkg`) sources it itself (which
is necessary since `sage-spkg` isn't always called through `sage-sage`,
which also sources it),
* some receipts in the top-level `Makefile` source it before some other
script is called through `sage-sage`,
* `sage-sage` itself or other (e.g. Python) code may run `sage ...`
commands such that `sage-sage` is then called recursively, again sourcing
`sage-env`.
To achieve this, we could simply add
{{{
#!sh
# Don't execute the commands below more than once:
if [ -z "$SAGE_ENV_SOURCED" ]; then
export SAGE_ENV_SOURCED=1 # or "yes", "true" or alike, but see below
(versioning)
else
# Already sourced, nothing to do.
return 0
fi
}}}
near its top.
We ''may'' even put a version number into that variable and execute
(perhaps only some of) the commands in `sage-env` "again" in case it was
modified during running scripts, which could be helpful when upgrading
Sage.
----
Such a variable also allows still generic, but safer tests than the usual
`[ -z "$SAGE_LOCAL" ]`, since `SAGE_LOCAL` being defined doesn't really
imply `sage-env` was sourced, but we usually intend to ensure that some
environment variables (like e.g. `CC` or `UNAME`) are properly set up,
without testing each of these individually.
Effectively sourcing (at least parts of) `sage-env` only once also
* avoids redundant entries in `PATH` etc.,
* avoids special tests if some variable was already defined / modified
(like e.g. `SAGE_ORIG_LD_LIBRARY_PATH`), also simplifying other scripts
(cf. #10286),
* IMHO reduces the risk of unintentional side-effects, and
* speeds up execution.
----
Also, we should replace the useless
{{{
#!sh
#!/usr/bin/env bash
}}}
at its top by (e.g.)
{{{
#!sh
#!/this/script/must/be/sourced
}}}
which causes an error if `sage-env` is called rather than sourced (which
makes no sense and therefore ''is'' indeed an error), with an
"appropriate" error message since such an interpreter certainly does not
exist.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10469>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.