# HG changeset patch # User Bruno Haible # Date 1163421273 0 # Node ID c273e0333252e68c997934859ab56130c483f21c # Parent 73191cd1d374ded83a5888f9d5d14b1969643e3a Fix the symlinks installed by the --symlink option. diff -r 73191cd1d374 -r c273e0333252 ChangeLog --- a/ChangeLog Mon Nov 13 12:33:43 2006 +0000 +++ b/ChangeLog Mon Nov 13 12:34:33 2006 +0000 @@ -1,3 +1,8 @@ +2006-11-12 Bruno Haible + + * gnulib-tool (func_ln): New function. + (func_ln_if_changed, func_create_testdir): Use it instead of "ln -s". + 2006-11-12 Bruno Haible Finish support for source files in subdirectories. diff -r 73191cd1d374 -r c273e0333252 gnulib-tool --- a/gnulib-tool Mon Nov 13 12:33:43 2006 +0000 +++ b/gnulib-tool Mon Nov 13 12:34:33 2006 +0000 @@ -22,7 +22,7 @@ progname=$0 package=gnulib -cvsdatestamp='$Date: 2006-11-13 12:33:43 $' +cvsdatestamp='$Date: 2006-11-13 12:34:33 $' last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'` version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'` nl=' @@ -271,21 +271,6 @@ } fi -# func_ln_if_changed SRC DEST -# Like ln -s, but avoids munging timestamps if the link is correct. -func_ln_if_changed () -{ - if test $# -ne 2; then - echo "usage: func_ln_if_changed SRC DEST" >&2 - fi - if test -L "$2" && test "$1" = "`func_readlink "$2"`"; then - : - else - rm -f "$2" - ln -s "$1" "$2" - fi -} - # func_relativize DIR1 DIR2 # computes a relative pathname RELDIR such that DIR1/RELDIR = DIR2. # Input: @@ -379,6 +364,45 @@ done } +# func_ln SRC DEST +# Like 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" ;; + *) # SRC is relative. + case "$2" in + /*) + 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" + ;; + esac + ;; + esac +} + +# func_ln_if_changed SRC DEST +# Like func_ln, but avoids munging timestamps if the link is correct. +func_ln_if_changed () +{ + if test $# -ne 2; then + echo "usage: func_ln_if_changed SRC DEST" >&2 + fi + ln_target=`func_readlink "$2"` + if test -L "$2" && test "$1" = "$ln_target"; then + : + else + rm -f "$2" + func_ln "$1" "$2" + fi +} + # Command-line option processing. # Removes the OPTIONS from the arguments. Sets the variables: # - mode list or import or create-testdir or create-megatestdir @@ -2246,7 +2270,7 @@ if test -z "$symbolic"; then cp -p "$lookedup_file" "$testdir/$g" else - ln -s "$lookedup_file" "$testdir/$g" + func_ln "$lookedup_file" "$testdir/$g" fi fi done