summaryrefslogtreecommitdiff
path: root/.local
diff options
context:
space:
mode:
authorLuke Shumaker <shumakl@purdue.edu>2014-04-21 14:25:06 -0400
committerLuke Shumaker <shumakl@purdue.edu>2014-04-21 14:25:06 -0400
commit6001786990501e849f04e018dccb0b5bf7e6d991 (patch)
tree9f88c73a7fc0df4d8928c1ec8f7d377bae7c5ce5 /.local
parent6d896bef900acea951979d70bf62e35022327b91 (diff)
improve config-path
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/config-path80
1 files changed, 44 insertions, 36 deletions
diff --git a/.local/bin/config-path b/.local/bin/config-path
index 99f0910..d0afa4a 100755
--- a/.local/bin/config-path
+++ b/.local/bin/config-path
@@ -12,6 +12,8 @@ prefixes=(
######################################################################
+IFS=:
+
in_array() {
local needle=$1; shift
local haystack=("$@")
@@ -22,48 +24,54 @@ in_array() {
return 1
}
+var_init() {
+ eval "ary_$1=(\$$1)"
+}
+
+var_add() {
+ local varname=ary_$1; shift
+ local var_all="${varname}[@]"
+ local dirs=("$@")
+
+ local dir
+ for dir in "${dirs[@]}"; do
+ if [[ -d "$dir" ]] && ! in_array "$dir" "${!var_all}"; then
+ eval "$varname=(\"\$dir\" \"\${$var_all}\")"
+ fi
+ done
+}
+
+var_done() {
+ eval "$1=\"\${ary_$1[*]}\""
+ declare -p $1
+}
+
+######################################################################
+
# Import existing values
-IFS=: paths=($PATH)
-IFS=: manpaths=($MANPATH)
-IFS=: rubylibs=($RUBYLIB)
-IFS=: perl5libs=($PERL5LIB)
+var_init PATH
+var_init MANPATH
+var_init LD_LIBRARY_PATH
+var_init RUBYLIB
+var_init PERL5LIB
# Scan through prefixes
for prefix in "${prefixes[@]}"; do
- # PATH
- for dir in "$prefix/bin" "$prefix/sbin"; do
- if [[ -d "$dir" ]] && ! in_array "$dir" "${paths[@]}"; then
- paths=("$dir" "${paths[@]}")
- fi
- done
- # MANPATH
- dir="$prefix/share/man"
- if [[ -d "$dir" ]] && ! in_array "$dir" "${manpaths[@]}"; then
- manpaths=("$dir" "${manpaths[@]}")
- fi
- # RUBYLIB
- dir="$prefix/lib"
- if [[ -d "$dir" ]] && ! in_array "$dir" "${rubylibs[@]}"; then
- rubylibs=("$dir" "${rubylibs[@]}")
- fi
- # PERL5LIB
- for dir in "$prefix"/lib*/perl5; do
- if [[ -d "$dir" ]] && in_array "$dir" "${manpaths[@]}"; then
- perl5libs=("$dir" "${perl5libs[@]}")
- fi
- done
+ var_add PATH "$prefix/bin" "$prefix/sbin"
+ var_add MANPATH "$prefix/share/man"
+ var_add LD_LIBRARY_PATH "$prefix"/lib{,32,64}
+ var_add RUBYLIB "$prefix"/lib{,32,64}
+ var_add PERL5LIB "$prefix"/lib{,32,64}/perl5
done
-# Finally, print our values
-IFS=: PATH="${paths[*]}"
-IFS=: MANPATH="${manpaths[*]}"
-IFS=: RUBYLIB="${rubylibs[*]}"
-IFS=: PERL5LIB="${perl5libs[*]}"
-# The sed bit here is the only time we call an external program
+
+# Finally, print our values
+# The `sed` bit here is the only time we call an external program
{
- declare -p PATH
- declare -p MANPATH
- declare -p RUBYLIB
- declare -p PERL5LIB
+ var_done PATH
+ var_done MANPATH
+ var_done LD_LIBRARY_PATH
+ var_done RUBYLIB
+ var_done PERL5LIB
} | sed 's/^declare \(-\S* \)*//'