#! /bin/sh
# Generate a relative path between two absolute paths

# Usage
# $1 - Base path to start from
# $2 - Target path

source=${1#/}
target=${2#/}

first() {
	local IFS=/
	set -- $*
	echo $1
}

rest() {
	local IFS=/
	set -- $*
	shift
	echo "$*"
}

relative_dir() {
	local dir=$1
	if [ -z "$dir" ]; then
		echo .
	else
		echo $dir | sed 's:[^/]\+:..:g'
	fi
}

while [ -n "$(first $source)" -a \
	"$(first $source)" = "$(first $target)" ]; do
	source="$(rest $source)"
	target="$(rest $target)"
done

echo -n $(relative_dir $source)
[ -n "$target" ] && echo -n /
echo $target
