From c2c7d34973a97c3efb76cf91cce81ffffe131985 Mon Sep 17 00:00:00 2001 From: Mike Burns Date: Fri, 28 Mar 2014 15:12:03 +0100 Subject: Discover a POSIX shell for Solaris Under Solaris, use ksh instead of `/bin/sh`. This uses `$SHELL` as a POSIX shell, coupled with a `configure` check that sets it correctly. Note that the POSIX shell might end up being bash, so this actually introduces more fragmentation than it reduces. Taken from https://github.com/freedreno/mesa/blob/master/configure.ac --- bin/rcdn.in | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100755 bin/rcdn.in (limited to 'bin/rcdn.in') diff --git a/bin/rcdn.in b/bin/rcdn.in new file mode 100755 index 0000000..2ca6dae --- /dev/null +++ b/bin/rcdn.in @@ -0,0 +1,107 @@ +#!@SHELL@ + +: ${RCM_LIB:=$(dirname "$0")/../share/rcm} +. "$RCM_LIB/rcm.sh" + +remove_link() { + local dest="$1" + local original="$2" + local sigil="$3" + + if [ "x$dest" = "x/" ]; then + $VERBOSE "not a symlink, skipping: $original" + elif [ -L "$dest" -o "x$sigil" = "xX" ]; then + rm_v -rf "$dest" + rmdir -p "$(dirname "$original")" 2>/dev/null + else + remove_link "$(dirname "$dest")" "$original" + fi +} + +show_help() { + local exit_code=${1:-0} + + $PRINT "Usage: rcdn [-Vqvh] [-I EXCL_PAT] [-x EXCL_PAT] [-t TAG] [-d DOT_DIR]" + $PRINT "see rcdn(1) and rcm(5) for more details" + + exit $exit_code +} + +handle_command_line() { + local arg_tags= + local verbosity=0 + local version=0 + local run_hooks=0 + local dotfiles_dirs= + local files= + local excludes= + local includes= + local symlink_dirs= + + while getopts VqvhI:x:S:t:d: opt; do + case "$opt" in + h) show_help ;; + I) includes="$includes $OPTARG";; + k) run_hooks=1 ;; + K) run_hooks=0 ;; + t) arg_tags="$arg_tags $OPTARG" ;; + S) symlink_dirs="$symlink_dirs $OPTARG";; + v) verbosity=$(($verbosity + 1));; + q) verbosity=$(($verbosity - 1));; + d) dotfiles_dirs="$dotfiles_dirs $OPTARG" ;; + V) version=1 ;; + x) excludes="$excludes $OPTARG" ;; + esac + done + shift $(($OPTIND-1)) + + handle_common_flags rcup $version $verbosity + + tags="${arg_tags:-$TAGS}" + dotfiles_dirs="${dotfiles_dirs:-$DOTFILES_DIRS}" + files="$@" + RUN_HOOKS=$run_hooks + + for tag in $tags; do + LS_ARGS="$LS_ARGS -t $tag" + done + for dotfiles_dir in $dotfiles_dirs; do + LS_ARGS="$LS_ARGS -d $dotfiles_dir" + done + for exclude in $excludes; do + LS_ARGS="$LS_ARGS -x $exclude" + done + for include in $includes; do + LS_ARGS="$LS_ARGS -I $include" + done + for symlink_dir in $symlink_dirs; do + LS_ARGS="$LS_ARGS -S $symlink_dir" + done + LS_ARGS="$LS_ARGS $files" + + $DEBUG "LS_ARGS: $LS_ARGS" +} + +LS_ARGS=-F + +handle_command_line "$@" +: ${DOTFILES_DIRS:=$DOTFILES_DIRS $DEFAULT_DOTFILES_DIR} + +run_hooks pre down + +dests_and_srcs="$(lsrc $LS_ARGS)" + +saved_ifs="$IFS" +IFS=' +' +for dest_and_src in $dests_and_srcs; do + IFS=: + set -- $dest_and_src + IFS="$saved_ifs" + dest="$1" + sigil="$3" + + remove_link "$dest" "$dest" "$sigil" +done + +run_hooks post down -- cgit v1.2.3