diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 43a2951dae14474d5d1a9beb816039a5fad40271..cb53fb61827591f06294e639b6b46f773759fa82 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,22 @@
+2002-01-18  DJ Delorie  <dj@redhat.com>
+
+	* Makefile.in (TESTLIB): New.  This library is for future
+	testsuites.
+	(CFILES, REQUIRED_OFILES, CONFIGURED_OFILES): Re-alphabetize,
+	break down by letter.
+	(REQUIRED_OFILES): List long-to-compile files first.
+	(maint-deps): New, target for updating dependencies.
+	(dependencies): Update.
+	* maint-tool: Add dependency-generating option.
+	* configure.in: Check for _doprnt even if we're not providing it.
+	* configure: Regenerate.
+
+	* _doprnt.c: Modifications to allow compiling on any platform.
+	* copysign.c: Likewise.
+	* putenv.c: Likewise.
+	* setenv.c: Likewise.
+	* vsprintf.c: Likewise.
+
 2002-01-15  Douglas B Rupp  <rupp@gnat.com>
 
 	* mkstemps.c (mkstemps): On VMS, open temp file with option
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 093c449328c3ecb8532244f60f28c870ee08e356..5fa96302812f24e7415a0bf8636bc1de0b7036f6 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -64,6 +64,7 @@ PICFLAG =
 MAKEOVERRIDES =
 
 TARGETLIB = libiberty.a
+TESTLIB = testlib.a
 
 LIBOBJS = @LIBOBJS@
 
@@ -116,42 +117,69 @@ COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiber
 	$(COMPILE.c) $<
 
 # NOTE: If you add new files to the library, add them to this list
-# (alphabetical), and add them to REQUIRED_OFILES or funcs in
-# configure.in.
-CFILES = asprintf.c alloca.c argv.c atexit.c basename.c bcmp.c bcopy.c	      \
-	bsearch.c bzero.c calloc.c choose-temp.c clock.c concat.c cplus-dem.c \
-        cp-demangle.c dyn-string.c fdmatch.c fnmatch.c ffs.c getcwd.c	      \
-	getpwd.c getopt.c getopt1.c getpagesize.c getruntime.c		      \
-	floatformat.c hashtab.c hex.c index.c insque.c lbasename.c            \
-	md5.c make-temp-file.c memchr.c					      \
-	memcmp.c memcpy.c memmove.c memset.c mkstemps.c objalloc.c obstack.c  \
-	partition.c pexecute.c putenv.c random.c			      \
-	regex.c rename.c rindex.c setenv.c				      \
-	sigsetmask.c safe-ctype.c sort.c spaces.c splay-tree.c strcasecmp.c   \
-	strncasecmp.c strchr.c strdup.c strerror.c strncmp.c strrchr.c        \
-	strsignal.c strstr.c strtod.c strtol.c strtoul.c tmpnam.c vasprintf.c \
-	vfork.c vfprintf.c vprintf.c vsprintf.c waitpid.c xatexit.c xexit.c   \
-	xmalloc.c xmemdup.c xstrdup.c xstrerror.c ternary.c fibheap.c
-
-# These are always included in the library.
-REQUIRED_OFILES = argv.o alloca.o choose-temp.o concat.o cplus-dem.o          \
-	cp-demangle.o dyn-string.o fdmatch.o fnmatch.o getopt.o getopt1.o     \
-	getpwd.o getruntime.o hashtab.o hex.o floatformat.o lbasename.o       \
-        md5.o make-temp-file.o objalloc.o				      \
-	obstack.o partition.o pexecute.o regex.o safe-ctype.o sort.o spaces.o \
-	splay-tree.o strerror.o strsignal.o xatexit.o xexit.o xmalloc.o       \
-	xmemdup.o xstrdup.o xstrerror.o ternary.o fibheap.o
+# (alphabetical), and add them to REQUIRED_OFILES, or
+# CONFIGURED_OFILES and funcs in configure.in.
+CFILES = alloca.c argv.c asprintf.c atexit.c				\
+	basename.c bcmp.c bcopy.c bsearch.c bzero.c			\
+	calloc.c choose-temp.c clock.c concat.c cp-demangle.c		\
+	 cplus-dem.c							\
+	dyn-string.c							\
+	fdmatch.c ffs.c fibheap.c floatformat.c fnmatch.c		\
+	getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c	\
+	hashtab.c hex.c							\
+	index.c insque.c						\
+	lbasename.c							\
+	make-temp-file.c md5.c memchr.c memcmp.c memcpy.c memmove.c	\
+	 memset.c mkstemps.c						\
+	objalloc.c obstack.c						\
+	partition.c pexecute.c putenv.c					\
+	random.c regex.c rename.c rindex.c				\
+	safe-ctype.c setenv.c sigsetmask.c sort.c spaces.c		\
+	 splay-tree.c strcasecmp.c strchr.c strdup.c strerror.c		\
+	 strncasecmp.c strncmp.c strrchr.c strsignal.c strstr.c		\
+	 strtod.c strtol.c strtoul.c					\
+	ternary.c tmpnam.c						\
+	vasprintf.c vfork.c vfprintf.c vprintf.c vsprintf.c		\
+	waitpid.c							\
+	xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c
+
+# These are always included in the library.  The first four are listed
+# first and by compile time to optimize parallel builds.
+REQUIRED_OFILES = regex.o cplus-dem.o cp-demangle.o md5.o		\
+	alloca.o argv.o							\
+	choose-temp.o concat.o						\
+	dyn-string.o							\
+	fdmatch.o fibheap.o floatformat.o fnmatch.o			\
+	getopt.o getopt1.o getpwd.o getruntime.o			\
+	hashtab.o hex.o							\
+	lbasename.o							\
+	make-temp-file.o						\
+	objalloc.o obstack.o						\
+	partition.o pexecute.o						\
+	safe-ctype.o sort.o spaces.o splay-tree.o strerror.o		\
+	 strsignal.o							\
+	ternary.o							\
+	xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o
 
 # These are all the objects that configure may add to the library via
-# $funcs.  This list exists here only for "make maint-missing".
-CONFIGURED_OFILES = asprintf.o atexit.o basename.o bcmp.o bcopy.o	\
-	bsearch.o bzero.o calloc.o clock.o ffs.o getcwd.o		\
-	getpagesize.o index.o insque.o memchr.o memcmp.o memcpy.o	\
-	memmove.o memset.o mkstemps.o putenv.o random.o rename.o	\
-	rindex.o setenv.o sigsetmask.o strcasecmp.o strchr.o strdup.o	\
-	strncasecmp.o strncmp.o strrchr.o strstr.o strtod.o strtol.o	\
-	strtoul.o tmpnam.o vasprintf.o vfork.o vfprintf.o vprintf.o	\
-	vsprintf.o waitpid.o
+# $funcs or EXTRA_OFILES.  This list exists here only for "make
+# maint-missing" and "make check".
+CONFIGURED_OFILES = asprintf.o atexit.o					\
+	basename.o bcmp.o bcopy.o bsearch.o bzero.o			\
+	calloc.o clock.o copysign.o					\
+	_doprnt.o							\
+	ffs.o								\
+	getcwd.o getpagesize.o						\
+	index.o insque.o						\
+	memchr.o memcmp.o memcpy.o memmove.o memset.o mkstemps.o	\
+	putenv.o							\
+	random.o rename.o rindex.o					\
+	setenv.o sigsetmask.o strcasecmp.o strchr.o strdup.o		\
+	 strncasecmp.o strncmp.o strrchr.o strstr.o strtod.o strtol.o	\
+	 strtoul.o							\
+	tmpnam.o							\
+	vasprintf.o vfork.o vfprintf.o vprintf.o vsprintf.o		\
+	waitpid.o
 
 $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
 	-rm -f $(TARGETLIB) pic/$(TARGETLIB)
@@ -166,6 +194,12 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
 	  cd ..; \
 	else true; fi
 
+$(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+	-rm -f $(TESTLIB)
+	$(AR) $(AR_FLAGS) $(TESTLIB) \
+	  $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+	$(RANLIB) $(TESTLIB)
+
 info: libiberty.info info-subdir
 install-info: install-info-subdir
 clean-info: clean-info-subdir
@@ -268,6 +302,9 @@ maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
 maint-undoc : $(srcdir)/functions.texi
 	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) undoc
 
+maint-deps :
+	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) deps $(INCDIR)
+
 # Need to deal with profiled libraries, too.
 
 # Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS
@@ -323,53 +360,92 @@ maintainer-clean-subdir: config.h
 	done
 
 $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir
+$(CONFIGURED_OFILES): stamp-picdir
+
+# The dependencies in the remainder of this file are automatically
+# generated by "make maint-deps".  Manual edits will be lost.
 
-alloca.o: config.h $(INCDIR)/libiberty.h
+_doprnt.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+alloca.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+argv.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+asprintf.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
 atexit.o: config.h
-argv.o: config.h $(INCDIR)/libiberty.h
-basename.o: $(INCDIR)/libiberty.h
-choose-temp.o: config.h
+basename.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+	$(INCDIR)/safe-ctype.h
+bsearch.o: config.h $(INCDIR)/ansidecl.h
+calloc.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+choose-temp.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
 clock.o: config.h
-concat.o: config.h $(INCDIR)/libiberty.h
-cplus-dem.o: config.h $(INCDIR)/demangle.h
-cp-demangle.o: config.h $(INCDIR)/dyn-string.h $(INCDIR)/demangle.h
-dyn-string.o: config.h $(INCDIR)/dyn-string.h
-fdmatch.o: $(INCDIR)/libiberty.h
-fibheap.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/fibheap.h
-fnmatch.o: config.h $(INCDIR)/fnmatch.h
+concat.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+copysign.o: $(INCDIR)/ansidecl.h
+cp-demangle.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h \
+	$(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h
+cplus-dem.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h \
+	$(INCDIR)/getopt.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+dyn-string.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/dyn-string.h \
+	$(INCDIR)/libiberty.h
+fdmatch.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+fibheap.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/fibheap.h \
+	$(INCDIR)/libiberty.h
+floatformat.o: $(INCDIR)/ansidecl.h $(INCDIR)/floatformat.h
+fnmatch.o: config.h $(INCDIR)/fnmatch.h $(INCDIR)/safe-ctype.h
 getcwd.o: config.h
 getopt.o: config.h $(INCDIR)/getopt.h
 getopt1.o: config.h $(INCDIR)/getopt.h
 getpagesize.o: config.h
-getpwd.o: config.h $(INCDIR)/libiberty.h
-getruntime.o: config.h $(INCDIR)/libiberty.h
-hex.o: $(INCDIR)/libiberty.h
-floatformat.o: $(INCDIR)/floatformat.h
-lbasename.o: $(INCDIR)/libiberty.h
-make-temp-file.o: config.h
-mkstemps.o: config.h
-md5.o: config.h
-objalloc.o: config.h $(INCDIR)/objalloc.h
+getpwd.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+getruntime.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+hashtab.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/hashtab.h \
+	$(INCDIR)/libiberty.h
+hex.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+lbasename.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+	$(INCDIR)/safe-ctype.h
+make-temp-file.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+md5.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
+memchr.o: $(INCDIR)/ansidecl.h
+memcmp.o: $(INCDIR)/ansidecl.h
+memcpy.o: $(INCDIR)/ansidecl.h
+memmove.o: $(INCDIR)/ansidecl.h
+memset.o: $(INCDIR)/ansidecl.h
+mkstemps.o: config.h $(INCDIR)/ansidecl.h
+objalloc.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/objalloc.h
 obstack.o: config.h $(INCDIR)/obstack.h
-partition.o: config.h $(INCDIR)/partition.h
-pexecute.o: config.h $(INCDIR)/libiberty.h
+partition.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+	$(INCDIR)/partition.h
+pexecute.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+	$(INCDIR)/safe-ctype.h
+putenv.o: config.h $(INCDIR)/ansidecl.h
+random.o: $(INCDIR)/ansidecl.h
 regex.o: config.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
 rename.o: config.h
-setenv.o: config.h
-sort.o: config.h $(INCDIR)/sort.h $(INCDIR)/ansidecl.h
-spaces.o: $(INCDIR)/libiberty.h
-splay-tree.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h $(INCDIR)/ansidecl.h
-strerror.o: config.h $(INCDIR)/libiberty.h
-strsignal.o: config.h $(INCDIR)/libiberty.h
-strtol.o: config.h
-strtoul.o: config.h
-ternary.o: config.h $(INCDIR)/ternary.h $(INCDIR)/libiberty.h
-vasprintf.o: config.h
-xatexit.o: $(INCDIR)/libiberty.h
-xexit.o: config.h $(INCDIR)/libiberty.h
-xmalloc.o: config.h $(INCDIR)/libiberty.h
-xmemdup.o: config.h $(INCDIR)/libiberty.h
-xstrdup.o: config.h $(INCDIR)/libiberty.h
-xstrerror.o: config.h $(INCDIR)/libiberty.h
+safe-ctype.o: $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+setenv.o: config.h $(INCDIR)/ansidecl.h
+sigsetmask.o: $(INCDIR)/ansidecl.h
+sort.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+	$(INCDIR)/sort.h
+spaces.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+splay-tree.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+	$(INCDIR)/splay-tree.h
+strcasecmp.o: $(INCDIR)/ansidecl.h
+strchr.o: $(INCDIR)/ansidecl.h
+strerror.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+strncasecmp.o: $(INCDIR)/ansidecl.h
+strncmp.o: $(INCDIR)/ansidecl.h
+strrchr.o: $(INCDIR)/ansidecl.h
+strsignal.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+strtod.o: $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+strtol.o: config.h $(INCDIR)/safe-ctype.h
+strtoul.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+ternary.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+	$(INCDIR)/ternary.h
+vasprintf.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+vfork.o: $(INCDIR)/ansidecl.h
+vprintf.o: $(INCDIR)/ansidecl.h
+vsprintf.o: $(INCDIR)/ansidecl.h
 waitpid.o: config.h
-hashtab.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h $(INCDIR)/ansidecl.h
+xatexit.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+xexit.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+xmalloc.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+xmemdup.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+xstrdup.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+xstrerror.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
diff --git a/libiberty/_doprnt.c b/libiberty/_doprnt.c
index a91e27f4127b8e01ed9e97bb51195ab7f509d690..8ce14158c991bd6f47a3fb0ea31bc3db3df32cbf 100644
--- a/libiberty/_doprnt.c
+++ b/libiberty/_doprnt.c
@@ -1,5 +1,5 @@
 /* Provide a version of _doprnt in terms of fprintf.
-   Copyright (C) 1998, 1999, 2000, 2001   Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001, 2002   Free Software Foundation, Inc.
    Contributed by Kaveh Ghazi  (ghazi@caip.rutgers.edu)  3/29/98
 
 This program is free software; you can redistribute it and/or modify it
@@ -29,9 +29,16 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #ifdef HAVE_STRING_H
 #include <string.h>
 #endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
 
 #undef _doprnt
 
+#ifdef HAVE__DOPRNT
+#define TEST
+#endif
+
 #ifdef TEST /* Make sure to use the internal one.  */
 #define _doprnt my_doprnt
 #endif
diff --git a/libiberty/configure b/libiberty/configure
index 8ddd98d07e335181c522c4b8629192cf0d1beafb..be1fa94a5f113d01974f7bcbf3f7dcd08cfbb931 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -2734,23 +2734,79 @@ fi
 done
 
 
+  else
+    for ac_func in _doprnt
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2742: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2747 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ 
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
   fi
 
   for v in $vars; do
     echo $ac_n "checking for $v""... $ac_c" 1>&6
-echo "configure:2742: checking for $v" >&5
+echo "configure:2798: checking for $v" >&5
     if eval "test \"`echo '$''{'libiberty_cv_var_$v'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2747 "configure"
+#line 2803 "configure"
 #include "confdefs.h"
 int *p;
 int main() {
 extern int $v; p = &$v;
 ; return 0; }
 EOF
-if { (eval echo configure:2754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "libiberty_cv_var_$v=yes"
 else
@@ -2776,12 +2832,12 @@ EOF
   for ac_func in $checkfuncs
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2780: checking for $ac_func" >&5
+echo "configure:2836: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2785 "configure"
+#line 2841 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2804,7 +2860,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2830,21 +2886,21 @@ done
 
 fi
 
-for ac_hdr in unistd.h
+for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2838: checking for $ac_hdr" >&5
+echo "configure:2894: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2843 "configure"
+#line 2899 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2904: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2873,12 +2929,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2877: checking for $ac_func" >&5
+echo "configure:2933: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2882 "configure"
+#line 2938 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2901,7 +2957,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2926,7 +2982,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:2930: checking for working mmap" >&5
+echo "configure:2986: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2934,7 +2990,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 2938 "configure"
+#line 2994 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -2962,11 +3018,24 @@ else
 #include <fcntl.h>
 #include <sys/mman.h>
 
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
 /* This mess was copied from the GNU getpagesize.h.  */
 #ifndef HAVE_GETPAGESIZE
-# ifdef HAVE_UNISTD_H
-#  include <unistd.h>
-# endif
 
 /* Assume that all systems that can run configure have sys/param.h.  */
 # ifndef HAVE_SYS_PARAM_H
@@ -3074,7 +3143,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:3078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -3098,7 +3167,7 @@ fi
 
 
 echo $ac_n "checking for working strncmp""... $ac_c" 1>&6
-echo "configure:3102: checking for working strncmp" >&5
+echo "configure:3171: checking for working strncmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_strncmp_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3106,7 +3175,7 @@ else
   ac_cv_func_strncmp_works=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3110 "configure"
+#line 3179 "configure"
 #include "confdefs.h"
 
 /* Test by Jim Wilson and Kaveh Ghazi.
@@ -3170,7 +3239,7 @@ main ()
 }
 
 EOF
-if { (eval echo configure:3174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_strncmp_works=yes
 else
diff --git a/libiberty/configure.in b/libiberty/configure.in
index 335737045b54f14ccdd188da55725c53847b7d17..0160edfc5963ab338bdce4be3c4a5d48bfeb58e9 100644
--- a/libiberty/configure.in
+++ b/libiberty/configure.in
@@ -358,6 +358,8 @@ if test -z "${setobjs}"; then
      || test $ac_cv_func_vfprintf != yes \
      || test $ac_cv_func_vsprintf != yes; then
     AC_REPLACE_FUNCS(_doprnt)
+  else
+    AC_CHECK_FUNCS(_doprnt)
   fi
 
   for v in $vars; do
diff --git a/libiberty/copysign.c b/libiberty/copysign.c
index 0b5f8c3d9df866c5cc52ce0ad2ab8760aa72ba04..5c48a5422eba5a820ea4c3c09a7a0f8f8d43c03c 100644
--- a/libiberty/copysign.c
+++ b/libiberty/copysign.c
@@ -129,6 +129,7 @@ typedef union
 } __ieee_float_shape_type;
 #endif
 
+#if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN)
 
 double DEFUN(copysign, (x, y), double x AND double y)
 {
@@ -138,3 +139,14 @@ double DEFUN(copysign, (x, y), double x AND double y)
   a.number.sign =b.number.sign;
   return a.value;
 }
+
+#else
+
+double DEFUN(copysign, (x, y), double x AND double y)
+{
+  if ((x < 0 && y > 0) || (x > 0 && y < 0))
+    return -x;
+  return x;
+}
+
+#endif
diff --git a/libiberty/maint-tool b/libiberty/maint-tool
index 75b0c508cd910051a305f5a120a22526ef473b8c..ceeb48dbf39ff14a338e91850f819667fa4323e5 100644
--- a/libiberty/maint-tool
+++ b/libiberty/maint-tool
@@ -36,6 +36,7 @@ if ($mode eq "-s") {
 
 &missing() if $mode eq "missing";
 &undoc() if $mode eq "undoc";
+&deps() if $mode eq "deps";
 
 exit 0;
 
@@ -178,3 +179,100 @@ sub undoc {
 	write;
     }
 }
+
+######################################################################
+
+sub deps_for {
+    my($f) = @_;
+    my(%d);
+    open(F, $f);
+    %d = ();
+    while (<F>) {
+	if (/^#\s*include\s+["<](.*)[">]/) {
+	    $d{$1} = 1;
+	}
+    }
+    close(F);
+    return keys %d;
+}
+
+sub canonicalize {
+    my ($p) = @_;
+    0 while $p =~ s@/\./@/@g;
+    0 while $p =~ s@^\./@@g;
+    0 while $p =~ s@/[^/]+/\.\./@/@g;
+    return $p;
+}
+
+sub locals_first {
+    my ($a,$b) = @_;
+    return -1 if $a eq "config.h";
+    return  1 if $b eq "config.h";
+    return $a cmp $b;
+}
+
+sub deps {
+
+    $incdir = shift @ARGV;
+
+    opendir(INC, $incdir);
+    while ($f = readdir INC) {
+	next unless $f =~ /\.h$/;
+	$mine{$f} = "\$(INCDIR)/$f";
+	$deps{$f} = join(' ', &deps_for("$incdir/$f"));
+    }
+    $mine{'config.h'} = "config.h";
+
+    open(IN, "$srcdir/Makefile.in");
+    open(OUT, ">$srcdir/Makefile.tmp");
+    while (<IN>) {
+	last if /remainder of this file/;
+	print OUT;
+    }
+    print OUT "# The dependencies in the remainder of this file are automatically\n";
+    print OUT "# generated by \"make maint-deps\".  Manual edits will be lost.\n\n";
+
+    opendir(S, $srcdir);
+    for $f (sort readdir S) {
+	if ($f =~ /\.c$/) {
+
+	    %scanned = ();
+	    @pending = &deps_for("$srcdir/$f");
+	    while (@pending) {
+		@tmp = @pending;
+		@pending = ();
+		for $p (@tmp) {
+		    next unless $mine{$p};
+		    if (!$scanned{$p}) {
+			push(@pending, split(' ', $deps{$p}));
+			$scanned{$p} = 1;
+		    }
+		}
+	    }
+	    @deps = sort { &locals_first($a,$b) } keys %scanned;
+	    $obj = $f;
+	    $obj =~ s/\.c$/.o/;
+	    $obj = "$obj:";
+	    if ($#deps >= 0) {
+		print OUT $obj;
+		$len = length($obj);
+		for $dt (@deps) {
+		    $d = $mine{$dt};
+		    if ($len + length($d) > 70) {
+			printf OUT " \\\n\t$d";
+			$len = 8 + length($d);
+		    } else {
+			print OUT " $d";
+			$len += length($d) + 1;
+		    }
+		}
+		print OUT "\n";
+	    }
+	}
+    }
+    closedir(S);
+    close(IN);
+    close(OUT);
+
+    rename("$srcdir/Makefile.tmp", "$srcdir/Makefile.in");
+}
diff --git a/libiberty/putenv.c b/libiberty/putenv.c
index 58012fc83ad27828f692fcb280e8b7afa9b0b4c2..6d027dc5aaa6794cda0ce7c438662498cdf048ae 100644
--- a/libiberty/putenv.c
+++ b/libiberty/putenv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1994, 1995, 1996, 2002 Free Software Foundation, Inc.
    This file based on putenv.c in the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -39,6 +39,8 @@ name is unset/removed.
 
 #include "ansidecl.h"
 
+#define putenv libiberty_putenv
+
 #if HAVE_STDLIB_H
 # include <stdlib.h>
 #endif
@@ -58,6 +60,8 @@ extern char *alloca ();
 # endif /* alloca */
 #endif /* HAVE_ALLOCA_H */
 
+#undef putenv
+
 /* Below this point, it's verbatim code from the glibc-2.0 implementation */
 
 
diff --git a/libiberty/setenv.c b/libiberty/setenv.c
index 79e38ed56b0026902d7186f7e767023004d512e6..8394fafe4e1620378708a30a8eb92b591e762aea 100644
--- a/libiberty/setenv.c
+++ b/libiberty/setenv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1995, 1996, 1997, 2002 Free Software Foundation, Inc.
    This file based on setenv.c in the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -36,6 +36,9 @@ environment.  This implementation is not safe for multithreaded code.
 # include <config.h>
 #endif
 
+#define setenv libiberty_setenv
+#define unsetenv libiberty_unsetenv
+
 #include "ansidecl.h"
 #include <sys/types.h> /* For `size_t' */
 #include <stdio.h>     /* For `NULL' */
@@ -61,6 +64,9 @@ extern int errno;
 extern char **environ;
 #endif
 
+#undef setenv
+#undef unsetenv
+
 /* LOCK and UNLOCK are defined as no-ops.  This makes the libiberty
  * implementation MT-Unsafe. */
 #define LOCK
diff --git a/libiberty/vsprintf.c b/libiberty/vsprintf.c
index bf0760cf6d38bb43dd07906b197153cd78103272..b69e9bc9ca6ec066220026ad1f9b9e1e2efd15d0 100644
--- a/libiberty/vsprintf.c
+++ b/libiberty/vsprintf.c
@@ -3,7 +3,7 @@
    implementations of stdio; newer ones should already have vsprintf.
    Written by Per Bothner of Cygnus Support.
    Based on libg++'s "form" (written by Doug Lea; dl@rocky.oswego.edu).
-   Copyright (C) 1991, 1995 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc.
 
 This file is part of the libiberty library.  This library is free
 software; you can redistribute it and/or modify it under the
@@ -31,6 +31,8 @@ the executable file might be covered by the GNU General Public License. */
 #include <ansidecl.h>
 #undef vsprintf
 
+#if defined _IOSTRG && defined _IOWRT
+
 int
 vsprintf (buf, format, ap)
      char *buf;
@@ -53,3 +55,5 @@ vsprintf (buf, format, ap)
   return ret;
 
 }
+
+#endif