* config/ltmain.sh (func_mode_install): Try "ln -s -f"
and "rm -f && ln -s" to make a symlink for a shared library: the
former is needed for libraries `ln' depends on, the latter for
Solaris /bin/ln.
Reported by Nelson H. F. Beebe <beebe@math.utah.edu>.
diff --git a/ChangeLog b/ChangeLog
index 6565b20..f15185b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2005-08-24  Bruno Haible  <bruno@clisp.org>
 
+	* config/ltmain.sh (func_mode_install): Try "ln -s -f"
+	and "rm -f && ln -s" to make a symlink for a shared library: the
+	former is needed for libraries `ln' depends on, the latter for
+	Solaris /bin/ln.
+	Reported by Nelson H. F. Beebe <beebe@math.utah.edu>.
+
 	* config/ltmain.sh (cwrappersource): return 127 if exec failed.
 
 2005-08-24  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
diff --git a/config/ltmain.m4sh b/config/ltmain.m4sh
index 71e8f54..8277220 100644
--- a/config/ltmain.m4sh
+++ b/config/ltmain.m4sh
@@ -1867,11 +1867,14 @@
 
 	  if test "$#" -gt 0; then
 	    # Delete the old symlinks, and create new ones.
+	    # Try `ln -sf' first, because the `ln' binary might depend on
+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
+	    # so we also need to try rm && ln -s.
 	    for linkname
 	    do
 	      if test "$linkname" != "$realname"; then
-		$show "(cd $destdir && $RM $linkname && $LN_S $realname $linkname)"
-		$run eval "(cd $destdir && $RM $linkname && $LN_S $realname $linkname)"
+		$show "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+		$run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
 	      fi
 	    done
 	  fi