diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
commit | ad547a6b5986815fda458221149728d9d9ab1d87 (patch) | |
tree | 16296910eb3eca724371474ea9aea3994dc69614 /Build/source/build-aux/relpath | |
parent | 947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff) |
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/build-aux/relpath')
-rwxr-xr-x | Build/source/build-aux/relpath | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Build/source/build-aux/relpath b/Build/source/build-aux/relpath new file mode 100755 index 00000000000..f448cfcd84e --- /dev/null +++ b/Build/source/build-aux/relpath @@ -0,0 +1,58 @@ +#! /bin/sh +# relpath - compute the relative path FROM -> TO + +# Copyright (C) 2011 Peter Breitenlohner <tex-live@tug.org> +# +# This file is free software; the copyright holder +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# First handle the simple case that FROM is a subdirectory of TO + +case $2 in + "$3"/*) + echo "X$2" | sed 's,^X'$3'/,,; s,[^/][^/]*,..,g' + exit 0;; +esac + +# Now the more general case, mainly for distro builds + +err () { + echo "$*" >&2 + exit 1 +} + +test $# = 3 || err 'relpath PREF FROM TO + compute the relative path FROM -> TO + where FROM and TO are absolute paths, and + prefixed with PREF are existing directories' + +chk () { + case $2 in + *' '* | *'/./'* | *'/../'*) err "'$2' contains ' ', '/./', or '/../'";; + /*) ;; + *) err "'$2' must be an absolute path";; + esac + test -d "$1$2" || err "'$1$2' not a directory" + # Normalize, remove leading and trailing / + res=`echo $2 | sed 's,^//*,,; s,//*$,,; s,///*,/,g'` +} + +chk "$1" "$2"; from=$res +chk "$1" "$3"; to=$res + +test "/$from" = "/$to" && { echo "."; exit 0; } + +# Remove common prefix +while test "/$to" != "/"; do + test "/$from" = "/" && { echo "$to"; exit 0; } + test `echo $from | sed 's,/.*,,'` = `echo $to | sed 's,/.*,,'` || break + from=`echo $from | sed 's,[^/]*/*,,'` + to=`echo $to | sed 's,[^/]*/*,,'` +done + +from=`echo $from | sed 's,[^/][^/]*,..,g'` +test "/$to" = "/" || from="$from/$to" + +echo "$from" +exit 0 |