summaryrefslogtreecommitdiff
path: root/ACE/bin/add_rel_link.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/bin/add_rel_link.sh')
-rwxr-xr-xACE/bin/add_rel_link.sh99
1 files changed, 99 insertions, 0 deletions
diff --git a/ACE/bin/add_rel_link.sh b/ACE/bin/add_rel_link.sh
new file mode 100755
index 00000000000..293058677f8
--- /dev/null
+++ b/ACE/bin/add_rel_link.sh
@@ -0,0 +1,99 @@
+#!/bin/sh
+# This script assumes it is being run by bash
+
+# ======= needed functions ======
+# abspath relpath curentpath
+abspath ()
+{
+# treat "./" as a special case
+if expr "$1" : '\./' >/dev/null; then
+ b=`echo $1 | sed 's@\./@@'`
+ echo $2/$b
+ return 0
+fi
+b=$1
+a=$2
+# for each "../" we remove one directory from the current path
+# and leading "../" from the relative path
+# until we have the unique part in b and the abs prefix in a
+while expr "$b" : '\.\./' >/dev/null
+do
+ b=`echo $b | sed 's@\.\./@@'`
+ a=`echo $a | sed 's@/[^/]*$@@'`
+done
+# return the completed absolute path
+echo $a/$b
+}
+
+# relpath abspath curentpath
+relpath ()
+{
+# take "/" off beginning
+a=`echo $1 | sed 's@^/@@'`
+# take "/" off beginning and add to end
+b=`echo $2 | sed 's@^/@@;s@$@/@'`
+while true
+do
+ if [ "$b" = "" ]; then
+ break;
+ fi
+ a1=`echo $a | sed 's@\([^/]*\)/.*@\1@'`
+ b1=`echo $b | sed 's@\([^/]*\)/.*@\1@'`
+ if [ "$a1" != "$b1" ]; then
+ break;
+ fi
+ a=`echo $a | sed 's@[^/]*/@@'`
+ b=`echo $b | sed 's@[^/]*/@@'`
+done
+# a now has the unique part of the path
+c=""
+# c will have the required number of "../"'s
+while [ "$b" != "" ]
+do
+ c="../$c"
+ b=`echo $b | sed 's@[^/]*/@@'`
+done
+# return the completed relative path
+echo "$c$a"
+}
+
+
+# ====== MAIN ======
+# Assume any relative path passed in is relative to the current directory
+# Given $1 is a path to the source file
+# Given $2 is a path of the link to be created
+# Create a link that has the relative path to the source file
+# That is, $1 converted relative to $2
+# Check if $1 is absolute or already relative
+#echo add_rel_link.sh $1 $2
+if expr "$1" : '\/' >/dev/null; then
+ # The source path is absolute, this is the expected case
+ # Check if $2 is absolute or relative
+ if expr "$2" : '\/' >/dev/null; then
+ # The link path is already absolute, so just use it
+ lpath=$2
+ else
+ # The link path is relative, this is the expected case
+ # WARNING: don't use $PWD here, it won't work right
+ # WARNING: pwd may be a shell alias. Use /bin/pwd.
+ cur=`/bin/pwd`
+ lpath=`abspath $2 $cur`
+ fi
+ # take name off the end of the dest
+ ldir=`echo $lpath | sed 's@/[^/]*$@@'`
+
+ # If the original path and the ldir do not originate in the same
+ # directory tree, we should just use absolute paths
+ if [ "`echo $1 | cut -d/ -f2`" != "`echo $ldir | cut -d/ -f2`" ]; then
+ spath=$1
+ else
+ spath=`relpath $1 $ldir`
+ fi
+ # use the completed relative path and the given destignation path
+ echo ln -s $spath $2
+ ln -s $spath $2
+else
+ # The source path is already relative, so just use it
+ echo ln -s $1 $2
+ ln -s $1 $2
+fi