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
       ;;