changeset 37894:6612cc9c916e

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 45c2bd240c62
children b574afad9095
files ChangeLog gnulib-tool
diffstat 2 files changed, 33 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Nov 28 16:43:14 2014 +0900
+++ b/ChangeLog	Wed May 01 13:39:22 2013 +0900
@@ -1,3 +1,10 @@
+2016-01-15  Paul Eggert  <eggert@cs.ucla.edu>
+            KO Myung-Hun  <komh@chollian.net>
+
+	gnulib-tool: don't assume ln -s works
+	* gnulib-tool (func_ln_s): New function.
+	(func_ln): Use it.
+
 2016-01-15  KO Myung-Hun  <komh@chollian.net>
 
 	utimes: detect utimes() correctly on OS/2 kLIBC
--- 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
       ;;