kate.ward | e7ed70c | 2011-06-10 11:45:17 +0000 | [diff] [blame] | 1 | # vim:et:ft=sh:sts=2:sw=2 |
| 2 | # |
kate.ward | e7ed70c | 2011-06-10 11:45:17 +0000 | [diff] [blame] | 3 | # Library of shell functions. |
| 4 | |
| 5 | # Convert a relative path into it's absolute equivalent. |
| 6 | # |
| 7 | # This function will automatically prepend the current working directory if the |
| 8 | # path is not already absolute. It then removes all parent references (../) to |
| 9 | # reconstruct the proper absolute path. |
| 10 | # |
| 11 | # Args: |
| 12 | # shlib_path_: string: relative path |
| 13 | # Outputs: |
| 14 | # string: absolute path |
| 15 | shlib_relToAbsPath() |
| 16 | { |
| 17 | shlib_path_=$1 |
| 18 | |
| 19 | # prepend current directory to relative paths |
| 20 | echo "${shlib_path_}" |grep '^/' >/dev/null 2>&1 \ |
| 21 | || shlib_path_="`pwd`/${shlib_path_}" |
| 22 | |
| 23 | # clean up the path. if all seds supported true regular expressions, then |
| 24 | # this is what it would be: |
| 25 | shlib_old_=${shlib_path_} |
| 26 | while true; do |
| 27 | shlib_new_=`echo "${shlib_old_}" |sed 's/[^/]*\/\.\.\/*//g;s/\/\.\//\//'` |
| 28 | [ "${shlib_old_}" = "${shlib_new_}" ] && break |
| 29 | shlib_old_=${shlib_new_} |
| 30 | done |
| 31 | echo "${shlib_new_}" |
| 32 | |
| 33 | unset shlib_path_ shlib_old_ shlib_new_ |
| 34 | } |