Opened 12 years ago

Last modified 10 years ago

## #10469 closed defect

# Don't (effectively) source sage-env more than once — at Initial Version

Reported by: | Leif Leonhardy | Owned by: | Georg S. Weber |
---|---|---|---|

Priority: | major | Milestone: | sage-4.7.1 |

Component: | build | Keywords: | environment variables sage-sage scripts |

Cc: | John Palmieri, Mitesh Patel, Ivan Andrus | Merged in: | |

Authors: | Reviewers: | ||

Report Upstream: | N/A | Work issues: | |

Branch: | Commit: | ||

Dependencies: | Stopgaps: |

### Description

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

# 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

```
#!/usr/bin/env bash
```

at its top by (e.g.)

```
#!/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.

**Note:**See TracTickets for help on using tickets.