From 865a768e44624c465e9d42c6ca91d0ef29a8e7ad Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 7 Feb 2015 00:26:11 -0500 Subject: backport changes from cs-purdue --- .local/bin/config-path | 90 ++++++++++++++++++++++++---------------------- .local/bin/config-symlinks | 9 +++-- 2 files changed, 55 insertions(+), 44 deletions(-) (limited to '.local') diff --git a/.local/bin/config-path b/.local/bin/config-path index f4c2342..7cd1fcd 100755 --- a/.local/bin/config-path +++ b/.local/bin/config-path @@ -1,22 +1,14 @@ #!/bin/bash -the_guts() { - # Add generic prefixes - add_prefix "$HOME" - add_prefix "$HOME/.local.$(uname -m)" - add_prefix "$HOME/.local" - add_prefix "$HOME/.prefix.$(uname -m)" - add_prefix "$HOME/.prefix" - - # Add rubygem prefixes - local dir - for dir in "$HOME"/.gem/*; do - # Only add it if we have that type of ruby - if type "${dir##*/}" &>/dev/null; then - add_prefix "$dir"/* - fi - done -} +# All the prefixes to consider +prefixes=( + "$HOME" + "$HOME/.local.$(uname -m)" + "$HOME/.local" + "$HOME/.prefix.$(uname -m)" + "$HOME/.prefix" + "$HOME"/.gem/ruby/* +) in_array() { local needle=$1; shift @@ -28,41 +20,55 @@ in_array() { return 1 } -add_prefix() { - local prefix=$1 - local dir +var_init() { + eval "ary_$1=(\$$1)" +} - # PATH - dir="$prefix/bin" - if [[ -d "$dir" ]] && ! in_array "$dir" "${paths[@]}"; then - paths=("$dir" "${paths[@]}") - fi +var_add() { + local varname=ary_$1; shift + local var_all="${varname}[@]" + local dirs=("$@") - # RUBYLIB - dir="$prefix/lib" - if [[ -d "$dir" ]] && ! in_array "$dir" "${rubylibs[@]}"; then - rubylibs=("$dir" "${rubylibs[@]}") - fi + 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 } main() { + IFS=: # Import existing values - declare -ga paths rubylibs - IFS=: paths=($PATH) - IFS=: rubylibs=($RUBYLIB) - - the_guts + var_init PATH + var_init MANPATH + var_init LD_LIBRARY_PATH + var_init RUBYLIB + var_init PERL5LIB - # Put our values into the env variables - IFS=: PATH="${paths[*]}" - IFS=: RUBYLIB="${rubylibs[*]}" + # Scan through prefixes + for prefix in "${prefixes[@]}"; do + 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 the values - # The sed bit here is the only time we call an external program + # The `sed` bit here is the only time we call an external program { - declare -p PATH - declare -p RUBYLIB + var_done PATH + var_done MANPATH + var_done LD_LIBRARY_PATH + var_done RUBYLIB + var_done PERL5LIB } | sed 's/^declare \(-\S* \)*//' } -main +main "$@" diff --git a/.local/bin/config-symlinks b/.local/bin/config-symlinks index 0831ca3..7d889f0 100755 --- a/.local/bin/config-symlinks +++ b/.local/bin/config-symlinks @@ -1,6 +1,8 @@ #!/bin/bash -sed -e '/^\s*$/d' -e '/#/d' symlinks | while read _target _link; do +declare -i ret=0 + +while read _target _link; do target="$(sed -rn 's|[^/]+/|../|g;s|/[^/]+$|/|p' <<<"$_link")${_target}" link="$HOME/$_link" if [[ -L "$link" ]]; then @@ -8,8 +10,11 @@ sed -e '/^\s*$/d' -e '/#/d' symlinks | while read _target _link; do fi if [[ -e "$link" ]]; then echo "ERROR: file exists: $link" >> /dev/stderr + ret=1 else mkdir -p "${link%/*}" ln -s "$target" "$link" fi -done +done < <(sed -e '/^\s*$/d' -e '/#/d' "$XDG_CONFIG_HOME/symlinks") + +exit $ret -- cgit v1.2.3