The relpath.sh script always writes its usage message to stdout and
exits with zero status, even for invalid arguments. This caused a
problem for libstdc++-v3/src/c++23/Makefile which assumed that
relpath.sh won't exit successfully on error, via:
relpath=$(relpath.sh ...) && sed 's,@MODPATH@,$$relpath,' ...
Because relpath.sh exits successfully for invalid args, the sed command
still ran even when relpath.sh was invoked incorrectly.
The libstdc++ Makefile has been changed to work around this, but
relpath.sh should still have an idiomatic exit status.
contrib/ChangeLog:
PR libstdc++/125956
* relpath.sh: For invalid arguments write to stderr and exit
with non-zero status.
#!/bin/sh
-if [ "$1" = "--help" -o $# -ne 2 -o -f "$1" ]; then
+usage()
+{
echo Usage: relpath.sh FROM TO
echo Print the relative path from FROM to TO
echo FROM must be a directory, but need not exist
+}
+
+if [ "$1" = "--help" ]; then
+ usage
exit 0
+elif [ $# -ne 2 -o -f "$1" ]; then
+ usage >&2
+ exit 1
fi
from="${1%%/}"