diff --git a/ChangeLog b/ChangeLog
index 8c1f30bb65ff58aa7d125209939e60a0e472fe8e..0b7656b6850fa7b0ffd3e4d4a8960b9015ed2cac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-06  Loren J. Rittle <ljrittle@acm.org>
+
+	* ltmain.sh: Detect and handle object name conflicts
+	while piecewise linking a static library.
+
 2002-05-05  Alexandre Oliva  <aoliva@redhat.com>
 
 	* configure.in (noconfigdirs): Don't disable libgcj on
diff --git a/ltmain.sh b/ltmain.sh
index c3547e5a5616fe295eb4520d49735679f436ec3f..92526b60b795d2e598aa37a3de6efdf45440c80f 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -4247,6 +4247,20 @@ fi\
           objlist=
           concat_cmds=
           save_oldobjs=$oldobjs
+	  # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+	  # encoded into archives.  This makes 'ar r' malfunction in
+	  # this piecewise linking case whenever conflicting object
+	  # names appear in distinct ar calls; check, warn and compensate.
+          if (for obj in $save_oldobjs
+	    do
+	      $echo "X$obj" | $Xsed -e 's%^.*/%%'
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	    :
+	  else
+	    $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+	    $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+	    AR_FLAGS=cq
+	  fi
           for obj in $save_oldobjs
           do
             oldobjs="$objlist $obj"