Mercurial > gnulib
diff gnulib-tool @ 18214:582ba937cae1
gnulib-tool: don't assume ln -s works
* gnulib-tool (func_ln_s): New function.
(func_ln): Use it.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Wed, 01 May 2013 13:39:22 +0900 |
parents | 31b2239ca59c |
children | f0712c328a41 |
line wrap: on
line diff
--- a/gnulib-tool Fri Nov 28 16:43:14 2014 +0900 +++ b/gnulib-tool Wed May 01 13:39:22 2013 +0900 @@ -767,23 +767,45 @@ done } +# func_ln_s SRC DEST +# Like ln -s, except use cp -p if ln -s fails. +func_ln_s () +{ + ln -s "$1" "$2" || { + echo "$progname: ln -s failed; falling back on cp -p" >>/tmp/log + echo "$progname: ln -s failed; falling back on cp -p" >&2 + symbolic= + lsymbolic= + do_copyrights=true + + case "$1" in + /* | ?:*) # SRC is absolute. + cp_src=$1 ;; + *) # SRC is relative to the directory of DEST. + cp_src=${2%/*}/$1 ;; + esac + + cp -p "$cp_src" "$2" + } +} + # func_ln SRC DEST -# Like ln -s, except that SRC is given relative to the current directory (or +# Like func_ln_s, except that SRC is given relative to the current directory (or # absolute), not given relative to the directory of DEST. func_ln () { case "$1" in /* | ?:*) - ln -s "$1" "$2" ;; + func_ln_s "$1" "$2" ;; *) # SRC is relative. case "$2" in /* | ?:*) - ln -s "`pwd`/$1" "$2" ;; + func_ln_s "`pwd`/$1" "$2" ;; *) # DEST is relative too. ln_destdir=`echo "$2" | sed -e 's,[^/]*$,,'` test -n "$ln_destdir" || ln_destdir="." func_relativize "$ln_destdir" "$1" - ln -s "$reldir" "$2" + func_ln_s "$reldir" "$2" ;; esac ;;