id summary reporter owner description type status priority milestone component resolution keywords cc merged author reviewer upstream work_issues branch commit dependencies stopgaps
5852 Properly canonicalize $SAGE_ROOT tornaria jdemeyer "Currently, {{{$SAGE_ROOT/sage}}} uses (first among other alternate methods) {{{readlink -n}}} to detect the directory where the script lives (that's $SAGE_ROOT), but that is broken because
- It only works when `$0` (the sage executable itself) is a symbolic link
- If the sage executable is a symbolic link, then `readlink -n` returns the link itself, not the canonicalized name. Example: if `/usr/local/sage-4.7.1/sage` is a symbolic link to `sagefoo`, then `SAGE_ROOT` would become `sagefoo` when `'/usr/local/sage-4.7.1/sagefoo` is intended.
- The symlink expansion may not be completely done, and {{{$SAGE_ROOT}}} could end up with a non-canonical dirname, which leads to issues with testing.
- The code to detect `SAGE_ROOT` inside `sage-env` does not canonicalize the pathname at all. This should be fixed as well. (The only case where `sage-env` is run without `SAGE_ROOT` being set is when testing Sage from the `Makefile`, i.e. when running `make ptest` or similar.)
Note that we should do this in a portable way, without using `realpath`, `readlink -f` or the likes.
See also #11704, which solves the same problem for `DOT_SAGE`.
Apply:
1. [attachment:5852_sage_root.patch] to `SAGE_ROOT`
1. [attachment:5852_scripts.patch] to `local/bin`
1. [attachment:5852_doc.patch] and [attachment:trac_5852-doc-referee.patch] to `devel/sage`" defect closed major sage-4.8 scripts fixed leif kini sage-4.8.alpha3 Jeroen Demeyer John Palmieri, Leif Leonhardy N/A #11926, #11959