#! /bin/sh
# rellns-sh - Simplified ln program to generate relative symbolic link.
# Copyright (C) 1996, 1997 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

if test $# -ne 2; then
  echo "Usage: rellns 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

ln -s $rfrom$to $2
