#! /bin/sh
# rellns-sh - Simplified ln program to generate relative symbolic link.
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# Written by Ulrich Drepper <drepper@cygnus.com>, October 1996
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.

# With -p, instead of creating the link print the computed relative link
# name.
do_print=false
case $1 in
  -p)
    do_print=true
    shift
    ;;
esac
if test $# -ne 2; then
  echo "Usage: rellns [-p] SOURCE DEST" >&2
  exit 1
fi

if test -x /bin/pwd; then
  pwd=/bin/pwd
elif test -x /usr/bin/pwd; then
  pwd=/usr/bin/pwd
else
  pwd='pwd'
fi

# Make both paths absolute.
if test -d $1; then
  to=`cd $1 && $pwd`
else
  temp=`echo $1 | sed 's%/*[^/]*$%%'`
  if test -z "$temp"; then
    to=`$pwd`
  else
    to=`cd $temp && $pwd`
  fi
  to="$to/`echo $1 | sed 's%.*/\([^/][^/]*\)$%\1%'`"
fi
to=`echo $to | sed 's%^/%%'`

if test -d $2; then
  from=`echo $2 | sed 's%/*$%%'`
else
  from=`echo $2 | sed 's%/*[^/]*$%%'`
fi

if test -z "$from"; then
  from=`$pwd | sed 's%^/%%'`
else
  from=`cd $from && $pwd | sed 's%^/%%'`
fi

while test -n "$to" && test -n "$from"; do
  preto=`echo $to | sed 's%^\([^/]*\)/.*%\1%'`
  prefrom=`echo $from | sed 's%^\([^/]*\)/.*%\1%'`

  test "$preto" != "$prefrom" && break

  to=`echo $to | sed 's%^[^/]*/*\(.*\)$%\1%'`
  from=`echo $from | sed 's%^[^/]*/*\(.*\)$%\1%'`
done

while test -n "$from"; do
  rfrom="../$rfrom"
  from=`echo $from | sed 's%^[^/]*/*%%'`
done

if $do_print; then
  echo "$rfrom$to"
else
  ln -s $rfrom$to $2
fi
