The relpath.sh script always writes its usage message to stdout and
exits with zero status, even for invalid arguments. This causes a
problem for libstdc++-v3/src/c++23/Makefile which assumes that it
doesn't exit successfully on error, via:
relpath=$(relpath.sh ...) && sed 's,@MODPATH@,$$relpath,' ...
Because it exits successfully for invalid args, the sed command still
runs even if relpath.sh is invoked incorrectly.
contrib/ChangeLog:
PR libstdc++/125956
* relpath.sh: For invalid arguments write to stderr and exit
with non-zero status.
---
OK for trunk?
contrib/relpath.sh | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/contrib/relpath.sh b/contrib/relpath.sh
index 1b329fc04a78..286e7f1a1752 100755
--- a/contrib/relpath.sh
+++ b/contrib/relpath.sh
@@ -1,10 +1,18 @@
#!/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%%/}"
--
2.54.0