about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog86
-rw-r--r--Makerules29
-rw-r--r--config.make.in4
-rwxr-xr-xconfigure42
-rw-r--r--configure.in10
-rw-r--r--db/Makefile1
-rw-r--r--elf/Makefile15
-rw-r--r--extra-lib.mk2
-rw-r--r--hesiod/Makefile1
-rw-r--r--iconvdata/Makefile207
-rw-r--r--linuxthreads/Makefile1
-rw-r--r--locale/Makefile1
-rw-r--r--login/Makefile1
-rw-r--r--login/README.utmpd7
-rw-r--r--math/Makefile2
-rw-r--r--md5-crypt/Makefile3
-rw-r--r--nis/Makefile3
-rw-r--r--nss/Makefile3
-rw-r--r--posix/wordexp-test.c10
-rw-r--r--resolv/Makefile2
-rw-r--r--rt/Makefile2
-rw-r--r--sunrpc/Makefile9
-rw-r--r--sysdeps/generic/setenv.c20
-rw-r--r--sysdeps/unix/sysv/linux/bits/socket.h2
-rw-r--r--time/tzfile.c9
-rw-r--r--time/tzset.c18
-rw-r--r--wcsmbs/wcsmbsload.c3
27 files changed, 287 insertions, 206 deletions
diff --git a/ChangeLog b/ChangeLog
index 5566a7f75d..75a2941ece 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,89 @@
+1998-05-15 14:36  Ulrich Drepper  <drepper@cygnus.com>
+
+	* posix/wordexp-test.c: Avoid duplicate messages.
+
+	* sysdeps/generic/setenv.c: Use __tfind and __tsearch, not tfind and
+	tsearch.  Correctly interpret values returned by those functions.
+	(unsetenv): Store pointer to string, not pointer to string pointer.
+
+	* time/tzfile.c (__tzfile_compute): Take new arguments.  Store
+	DST information and offset in them.
+	* time/tzset.c (__tz_convert): Pass extra parameters to
+	__tzfile_compute.  Compute equivalent values for use of tz_rules.
+
+1998-05-15 00:49:11  Zack Weinberg  <zack@rabi.phys.columbia.edu>
+
+	* iconvdata/Makefile (gen-8bit-table): Use move-if-change and
+	stamp files to avoid unnecessary recompilation.
+	(gen-8bit-gap-table): Likewise.
+	(move-if-change): New variable.
+	(all generated .h rules): Change to be .stmp rules.
+	(%.h): New rule; depend on %.stmp; no commands.
+	(distribute): Add gen-8bit.sh, gen-8bit-gap.sh,
+	gen-8bit-gap-1.sh.
+
+1998-05-15 01:09  Zack Weinberg  <zack@rabi.phys.columbia.edu>
+
+	* Makerules (libc-map): Deleted.
+	(load-map-file): Set to the appropriate compiler switch, not
+	just the file name.  If libfoo-map is not set, look for a
+	libfoo.map in the current directory and $(..).
+	(map-file): New variable, contains just the mapfile name.
+	(build-shlib): Adjust for new value of load-map-file.
+	(libc.so): Correct dependencies.
+
+	* extra-lib.mk: Correct shlib dependencies since libfoo-map
+	may not be set anymore.
+
+	* elf/Makefile: Set ld-map to $(..)libc.map, not $(libc-map).
+	Delete libdl-map.  Tweak ld.so link rule to work with changed
+	variable settings in Makerules.
+	* iconvdata/Makefile: Tweak build-module to work with changed
+	variable settings in Makerules.
+
+	* db/Makefile: Delete libdb-map.
+	* hesiod/Makefile: Delete libnss_hesiod-map.
+	* linuxthreads/Makefile: Delete libpthread-map.
+	* locale/Makefile: Delete libBrokenLocale-map.
+	* login/Makefile: Delete libutil-map.
+	* math/Makefile: Delete libm-map.
+	* md5-crypt/Makefile: Delete libcrypt-map.
+	* nis/Makefile: Delete libnsl-map, libnss_nis-map,
+	libnss_nisplus-map, and libnss_compat-map.
+	* nss/Makefile: Delete libnss_files-map, libnss_db-map, and
+	libnss_ldap-map.
+	* resolv/Makefile: Delete libresolv-map and libnss_dns-map.
+	* rt/Makefile: Delete librt-map.
+
+1998-05-15 01:06  Zack Weinberg  <zack@rabi.phys.columbia.edu>
+
+	* configure.in: Instead of substituting `yes' or `no' for whether
+	--no-whole-archive is available, set @no_whole_archive@ to the
+	appropriate gcc switch or the empty string.  Likewise for
+	-fno-exceptions.
+	* config.make.in: Replace have-no-whole-archive with
+	no-whole-archive and have-no-exceptions with no-exceptions.
+	* Makerules: Delete stanzas setting no-whole-archive and
+	no-exceptions.
+
+	* sunrpc/Makefile: Use move-if-change to update generated .h
+	and .c files.
+
+1998-05-13  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* wcsmbs/wcsmbsload.c (extract_charset_name): Use strcspn instead
+	of strchr loop.
+
+1998-05-15  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* time/tzfile.c (__tzfile_read): Remove unused variable info.
+	(__tzfile_compute): Likewise.
+
+1998-05-15  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* sysdeps/unix/sysv/linux/bits/socket.h (AF_SNA,PF_SNA): Add new
+	defines from Linux 2.1.102.
+
 1998-05-14 23:14  Ulrich Drepper  <drepper@cygnus.com>
 
 	* locale/programs/ld-ctype.c: Write correct mb_cur_max value.
diff --git a/Makerules b/Makerules
index 223442cbfe..dadafdbc88 100644
--- a/Makerules
+++ b/Makerules
@@ -325,9 +325,9 @@ ifeq (yes,$(build-shared))
 # Reference map file only when versioning is selected and a map file name
 # is given.
 ifeq ($(versioning),yes)
-load-map-file = $($(@F:%.so=%)-map)
-else
-load-map-file =
+map-file = $(firstword $(wildcard \
+		$($(@F:.so=-map)) $(@F:.so=.map) $(..)$(@F:.so=.map)))
+load-map-file = $(map-file:%=-Wl,--version-script=%)
 endif
 
 # Pattern rule to build a shared object from an archive of PIC objects.
@@ -338,12 +338,6 @@ endif
 lib%.so: lib%_pic.a $(+preinit) $(+postinit)
 	$(build-shlib)
 
-ifeq ($(have-no-whole-archive),yes)
-no-whole-archive = -Wl,--no-whole-archive
-else
-no-whole-archive =
-endif
-
 ifeq ($(elf),yes)
 interp-obj = $(common-objpfx)elf/interp.os
 $(common-objpfx)libc.so: $(interp-obj)
@@ -352,12 +346,12 @@ endif
 
 define build-shlib
 $(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS)  \
-	  -B$(csu-objpfx) $(load-map-file:%=-Wl,--version-script=%) \
+	  -B$(csu-objpfx) $(load-map-file) \
 	  -Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
 	  $(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
 	  -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
 	  -Wl,--whole-archive \
-	  $(filter-out $($(@F:.so=)-map) $(+preinit) $(+postinit),$^) \
+	  $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \
 	  $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so)
 endef
 
@@ -385,8 +379,6 @@ LDFLAGS-c.so = -nostdlib -nostartfiles
 LDLIBS-c.so = $(gnulib)
 # Give libc.so an entry point and make it directly runnable itself.
 LDFLAGS-c.so += -e __libc_main
-# We have a versioning file for libc.so.
-libc-map = $(..)libc.map
 # Pre-link the objects of libc_pic.a so that we can locally resolve
 # COMMON symbols before we link against ld.so.  This is because ld.so
 # contains some of libc_pic.a already, which will prevent the COMMONs
@@ -399,7 +391,7 @@ $(common-objpfx)libc_pic.os: $(common-objpfx)libc_pic.a
 $(common-objpfx)libc.so: $(elfobjdir)/soinit.os \
 			 $(common-objpfx)libc_pic.os \
 			 $(elfobjdir)/sofini.os $(elfobjdir)/ld.so \
-			 $(libc-map)
+			 $(..)libc.map
 	$(build-shlib)
 common-generated += libc.so libc_pic.os
 ifdef libc.so-version
@@ -409,15 +401,6 @@ common-generated += libc.so$(libc.so-version)
 endif
 endif
 
-# Some files must not be compiled with the exception handler mechanism
-# enabled (introduced in gcc-2.8).  Use $(no-exceptions) in the
-# appropriate CFLAGS definition.
-ifeq ($(have-no-exceptions),yes)
-no-exceptions = -fno-exceptions
-else
-no-exceptions =
-endif
-
 # Figure out the source filenames in this directory.
 
 override sources	:= $(addsuffix .c,$(filter-out $(elided-routines),\
diff --git a/config.make.in b/config.make.in
index d23ee8dbd8..0a76b10ede 100644
--- a/config.make.in
+++ b/config.make.in
@@ -37,9 +37,9 @@ need-nopic-initfini = @nopic_initfini@
 with-cvs = @with_cvs@
 
 versioning = @VERSIONING@
+no-whole-archive = @no_whole_archive@
+no-exceptions = @no_exceptions@
 
-have-no-whole-archive = @libc_cv_ld_no_whole_archive@
-have-no-exceptions = @libc_cv_gcc_no_exceptions@
 have-bash2 = @libc_cv_have_bash2@
 have-ksh = @libc_cv_have_ksh@
 
diff --git a/configure b/configure
index 5e6f231bd1..cb9c48f279 100755
--- a/configure
+++ b/configure
@@ -2523,9 +2523,12 @@ rm -f conftest*
 fi
 
 echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
+if test $libc_cv_ld_no_whole_archive = yes; then
+  no_whole_archive=-Wl,--no-whole-archive
+fi
 
 echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
-echo "configure:2529: checking for gcc -fno-exceptions" >&5
+echo "configure:2532: checking for gcc -fno-exceptions" >&5
 if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2536,7 +2539,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -fno-exceptions
-			    -o conftest conftest.c 1>&5'; { (eval echo configure:2540: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c 1>&5'; { (eval echo configure:2543: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_no_exceptions=yes
 else
   libc_cv_gcc_no_exceptions=no
@@ -2545,17 +2548,20 @@ rm -f conftest*
 fi
 
 echo "$ac_t""$libc_cv_gcc_no_exceptions" 1>&6
+if test $libc_cv_ld_no_whole_archive = yes; then
+  no_exceptions=-fno-exceptions
+fi
 
 if test "$base_machine" = alpha ; then
 echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6
-echo "configure:2552: checking for function ..ng prefix" >&5
+echo "configure:2558: checking for function ..ng prefix" >&5
 if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<\EOF
 foo () { }
 EOF
-if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2559: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
+if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2565: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
 then
   libc_cv_gcc_alpha_ng_prefix=yes
 else
@@ -2582,19 +2588,19 @@ if test "$host_cpu" = powerpc ; then
 # Check for a bug present in at least versions 2.8.x of GCC
 # and versions 1.0.x of EGCS.
 echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6
-echo "configure:2586: checking whether clobbering cr0 causes problems" >&5
+echo "configure:2592: checking whether clobbering cr0 causes problems" >&5
 if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2591 "configure"
+#line 2597 "configure"
 #include "confdefs.h"
 int tester(int x) { asm ("" : : : "cc"); return x & 123; }
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2598: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_c_asmcr0_bug='no'
 else
@@ -2616,12 +2622,12 @@ fi
 fi
 
 echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
-echo "configure:2620: checking for DWARF2 unwind info support" >&5
+echo "configure:2626: checking for DWARF2 unwind info support" >&5
 if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<EOF
-#line 2625 "configure"
+#line 2631 "configure"
 static char __EH_FRAME_BEGIN__;
 _start ()
 {
@@ -2648,7 +2654,7 @@ __bzero () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info
 			    -nostdlib -nostartfiles
-			    -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2658: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_dwarf2_unwind_info=static
 else
   libc_cv_gcc_dwarf2_unwind_info=no
@@ -2656,7 +2662,7 @@ fi
 if test $libc_cv_gcc_dwarf2_unwind_info = no; then
   if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame
 			      -nostdlib -nostartfiles
-			      -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2660: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			      -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2666: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
     libc_cv_gcc_dwarf2_unwind_info=yes
   else
     libc_cv_gcc_dwarf2_unwind_info=no
@@ -2730,7 +2736,7 @@ if test "$uname" = "sysdeps/generic"; then
   fi
 
   echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
-echo "configure:2734: checking OS release for uname" >&5
+echo "configure:2740: checking OS release for uname" >&5
 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2752,7 +2758,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
   uname_release="$libc_cv_uname_release"
 
   echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
-echo "configure:2756: checking OS version for uname" >&5
+echo "configure:2762: checking OS version for uname" >&5
 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2774,7 +2780,7 @@ else
 fi
 
 echo $ac_n "checking stdio selection""... $ac_c" 1>&6
-echo "configure:2778: checking stdio selection" >&5
+echo "configure:2784: checking stdio selection" >&5
 
 case $stdio in
 libio) cat >> confdefs.h <<\EOF
@@ -2786,7 +2792,7 @@ esac
 echo "$ac_t""$stdio" 1>&6
 
 echo $ac_n "checking ldap selection""... $ac_c" 1>&6
-echo "configure:2790: checking ldap selection" >&5
+echo "configure:2796: checking ldap selection" >&5
 
 case $add_ons in
 *ldap*)
@@ -2837,7 +2843,7 @@ if test $shared = default; then
 fi
 
 echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6
-echo "configure:2841: checking whether -fPIC is default" >&5
+echo "configure:2847: checking whether -fPIC is default" >&5
 if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3044,8 +3050,8 @@ s%@AWK@%$AWK%g
 s%@PERL@%$PERL%g
 s%@VERSIONING@%$VERSIONING%g
 s%@libc_cv_have_initfini@%$libc_cv_have_initfini%g
-s%@libc_cv_ld_no_whole_archive@%$libc_cv_ld_no_whole_archive%g
-s%@libc_cv_gcc_no_exceptions@%$libc_cv_gcc_no_exceptions%g
+s%@no_whole_archive@%$no_whole_archive%g
+s%@no_exceptions@%$no_exceptions%g
 s%@uname_sysname@%$uname_sysname%g
 s%@uname_release@%$uname_release%g
 s%@uname_version@%$uname_version%g
diff --git a/configure.in b/configure.in
index d04c18b0b3..683f6b6a39 100644
--- a/configure.in
+++ b/configure.in
@@ -883,7 +883,10 @@ else
   libc_cv_ld_no_whole_archive=no
 fi
 rm -f conftest*])
-AC_SUBST(libc_cv_ld_no_whole_archive)dnl
+if test $libc_cv_ld_no_whole_archive = yes; then
+  no_whole_archive=-Wl,--no-whole-archive
+fi
+AC_SUBST(no_whole_archive)dnl
 
 AC_CACHE_CHECK(for gcc -fno-exceptions, libc_cv_gcc_no_exceptions, [dnl
 cat > conftest.c <<\EOF
@@ -900,7 +903,10 @@ else
   libc_cv_gcc_no_exceptions=no
 fi
 rm -f conftest*])
-AC_SUBST(libc_cv_gcc_no_exceptions)dnl
+if test $libc_cv_ld_no_whole_archive = yes; then
+  no_exceptions=-fno-exceptions
+fi
+AC_SUBST(no_exceptions)dnl
 
 if test "$base_machine" = alpha ; then
 AC_CACHE_CHECK(for function ..ng prefix, libc_cv_gcc_alpha_ng_prefix, [dnl
diff --git a/db/Makefile b/db/Makefile
index e9817e2f89..32a637f0bf 100644
--- a/db/Makefile
+++ b/db/Makefile
@@ -19,7 +19,6 @@ libdb-routines := bt_close bt_conv bt_debug bt_delete bt_get \
 		  mpool \
 		  rec_close rec_delete rec_get rec_open rec_put rec_search \
 		  rec_seq rec_utils
-libdb-map	:= libdb.map
 
 headers		:= db.h mpool.h ndbm.h
 distribute	:= compat.h					\
diff --git a/elf/Makefile b/elf/Makefile
index 2f2e4b1934..b8b5b36b40 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -35,7 +35,7 @@ elide-routines.os = $(dl-routines) dl-support enbl-secure
 # ld.so uses those routines, plus some special stuff for being the program
 # interpreter and operating independent of libc.
 rtld-routines	:= rtld $(dl-routines) dl-sysdep dl-minimal
-ld-map		= $(libc-map)
+ld-map		= $(..)libc.map
 distribute	= $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
 		  dl-hash.h soinit.c sofini.c ldd.sh.in ldd.bash.in eval.c \
 		  genrtldtbl.awk atomicity.h dl-procinfo.h ldsodefs.h \
@@ -44,7 +44,6 @@ distribute	= $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
 extra-libs	 = libdl
 extra-libs-others = $(extra-libs)
 libdl-routines	:= dlopen dlclose dlsym dlvsym dlerror dladdr
-libdl-map	:= libdl.map
 
 before-compile = $(objpfx)trusted-dirs.h $(objpfx)rtldtbl.h
 
@@ -112,14 +111,10 @@ endif
 
 $(objpfx)ld.so: $(objpfx)librtld.os $(addprefix $(objpfx),$(rtld-ldscript)) \
 		$(ld-map)
-	$(rtld-link) -Wl,-soname=$(rtld-installed-name)
-
-define rtld-link
-$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
-	  -Wl,-rpath=$(default-rpath) $(LDFLAGS-rtld) \
-	  $(filter-out $(rtld-ldscript) $($(@F:.so=)-map),$^) \
-	  $(load-map-file:%=-Wl,--version-script=%)
-endef
+	$(LINK.o) -nostdlib -nostartfiles -shared -o $@		\
+		-Wl,-rpath=$(default-rpath) $(LDFLAGS-rtld)	\
+		$(filter-out $(rtld-ldscript) $(map-file),$^)	\
+		$(load-map-file) -Wl,-soname=$(rtld-installed-name)
 
 # The dl code in the static libc needs a default library path.
 CFLAGS-dl-support.c = -D'DEFAULT_RPATH="$(default-rpath)"'
diff --git a/extra-lib.mk b/extra-lib.mk
index 793dc09c38..0b79d4a459 100644
--- a/extra-lib.mk
+++ b/extra-lib.mk
@@ -50,6 +50,6 @@ object-suffixes-left = $(object-suffixes-$(lib))
 include $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-$(lib)))
 
 # Add the version script to the dependencies of the shared library.
-$(objpfx)$(lib).so: $($(lib)-map)
+$(objpfx)$(lib).so: $(firstword $(wildcard $($(lib)-map) $(lib).map $(..)$(lib).map))
 
 endif
diff --git a/hesiod/Makefile b/hesiod/Makefile
index 9959cee3fc..f1356bbfbd 100644
--- a/hesiod/Makefile
+++ b/hesiod/Makefile
@@ -30,7 +30,6 @@ subdir-dirs = nss_hesiod
 vpath %.c nss_hesiod
 
 libnss_hesiod-routines	:= hesiod hesiod-grp hesiod-pwd hesiod-service
-libnss_hesiod-map	:= libnss_hesiod.map
 # Build only shared library
 libnss_hesiod-inhibit-o	= $(filter-out .os,$(object-suffixes))
 
diff --git a/iconvdata/Makefile b/iconvdata/Makefile
index 778de6e76a..8d5ace82aa 100644
--- a/iconvdata/Makefile
+++ b/iconvdata/Makefile
@@ -195,7 +195,8 @@ distribute := 8bit-generic.c 8bit-gap.c gap.pl gaptab.pl gconv-modules	    \
 	      ibm880.c ibm891.c ibm903.c ibm904.c ibm905.c ibm918.c	    \
 	      ibm1004.c ibm1026.c ibm1047.c cp1250.c cp1251.c cp1252.c	    \
 	      cp1253.c cp1254.c cp1255.c cp1256.c cp1257.c cp874.c cp874.h  \
-	      cp737.c cp737.h cp775.c cp775.h iso-2022-jp.c iso-2022-kr.c
+	      cp737.c cp737.h cp775.c cp775.h iso-2022-jp.c iso-2022-kr.c   \
+	      gen-8bit.sh gen-8bit-gap.sh gen-8bit-gap-1.sh
 
 # We build the transformation modules only when we build shared libs.
 ifeq (yes,$(build-shared))
@@ -204,11 +205,11 @@ ifeq (yes,$(build-shared))
 # and it does not depend on the destination name to start with `lib'.
 define build-module
 $(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS)  \
-	  -B$(csu-objpfx) $(load-map-file:%=-Wl,--version-script=%) \
+	  -B$(csu-objpfx) $(load-map-file) \
 	  $(LDFLAGS.so) $(LDFLAGS-$(@F:%.so=%).so) \
 	  -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
 	  -Wl,--whole-archive \
-	  $(filter-out $($(@F:.so=)-map) $(+preinit) $(+postinit),$^) \
+	  $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \
 	  $(no-whole-archive) $(LDLIBS-$(@F:%.so=%).so)
 endef
 
@@ -223,11 +224,13 @@ install-others	= $(addprefix $(inst_gconvdir)/, $(modules.so))	\
 
 # If we have the localedata add-on available we can build the conversion
 # tables for numerous charsets.
+move-if-change = ./$(..)scripts/move-if-change
+
 define generate-8bit-table
 $(make-target-directory)
-rm -f $@.new
-$(SHELL) ./gen-8bit.sh $< > $@.new
-mv -f $@.new $@
+$(SHELL) ./gen-8bit.sh $< > $(@:stmp=T)
+$(move-if-change) $(@:stmp=T) $(@:stmp=h)
+touch $@
 endef
 
 sed-generated-headers := iso8859-2.h iso8859-3.h iso8859-4.h iso8859-6.h \
@@ -243,9 +246,9 @@ sed-generated-headers := iso8859-2.h iso8859-3.h iso8859-4.h iso8859-6.h \
 
 define generate-8bit-gap-table
 $(make-target-directory)
-rm -f $@.new
-PERL="$(PERL)" $(SHELL) ./gen-8bit-gap.sh $< > $@.new
-mv -f $@.new $@
+PERL="$(PERL)" $(SHELL) ./gen-8bit-gap.sh $< > $(@:stmp=T)
+$(move-if-change) $(@:stmp=T) $(@:stmp=h)
+touch $@
 endef
 
 perl-generated-headers := koi8-r.h latin-greek.h latin-greek-1.h	 \
@@ -271,184 +274,190 @@ ifneq ($(PERL),no)
 before-compile += $(addprefix $(objpfx),$(perl-generated-headers))
 endif
 
-
 # Rules to generate the headers.
-$(objpfx)iso8859-2.h: ../localedata/charmaps/ISO-8859-2 gen-8bit.sh
+$(sed-generated-headers:%=$(objpfx)%): $(objpfx)%.h: $(objpfx)%.stmp
+	@:
+
+$(objpfx)iso8859-2.stmp: ../localedata/charmaps/ISO-8859-2 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)iso8859-3.h: ../localedata/charmaps/ISO-8859-3 gen-8bit.sh
+$(objpfx)iso8859-3.stmp: ../localedata/charmaps/ISO-8859-3 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)iso8859-4.h: ../localedata/charmaps/ISO-8859-4 gen-8bit.sh
+$(objpfx)iso8859-4.stmp: ../localedata/charmaps/ISO-8859-4 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)iso8859-6.h: ../localedata/charmaps/ISO-8859-6 gen-8bit.sh
+$(objpfx)iso8859-6.stmp: ../localedata/charmaps/ISO-8859-6 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)iso8859-9.h: ../localedata/charmaps/ISO-8859-9 gen-8bit.sh
+$(objpfx)iso8859-9.stmp: ../localedata/charmaps/ISO-8859-9 gen-8bit.sh
 	$(generate-8bit-table)
 
-$(objpfx)koi-8.h: ../localedata/charmaps/KOI-8 gen-8bit.sh
+$(objpfx)koi-8.stmp: ../localedata/charmaps/KOI-8 gen-8bit.sh
 	$(generate-8bit-table)
-
-$(objpfx)hp-roman8.h: ../localedata/charmaps/HP-ROMAN8 gen-8bit.sh
+$(objpfx)hp-roman8.stmp: ../localedata/charmaps/HP-ROMAN8 gen-8bit.sh
 	$(generate-8bit-table)
 
-$(objpfx)ebcdic-at-de.h: ../localedata/charmaps/EBCDIC-AT-DE gen-8bit.sh
+$(objpfx)ebcdic-at-de.stmp: ../localedata/charmaps/EBCDIC-AT-DE gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-at-de-a.h: ../localedata/charmaps/EBCDIC-AT-DE-A gen-8bit.sh
+$(objpfx)ebcdic-at-de-a.stmp: ../localedata/charmaps/EBCDIC-AT-DE-A gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-ca-fr.h: ../localedata/charmaps/EBCDIC-CA-FR gen-8bit.sh
+$(objpfx)ebcdic-ca-fr.stmp: ../localedata/charmaps/EBCDIC-CA-FR gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-dk-no.h: ../localedata/charmaps/EBCDIC-DK-NO gen-8bit.sh
+$(objpfx)ebcdic-dk-no.stmp: ../localedata/charmaps/EBCDIC-DK-NO gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-dk-no-a.h: ../localedata/charmaps/EBCDIC-DK-NO-A gen-8bit.sh
+$(objpfx)ebcdic-dk-no-a.stmp: ../localedata/charmaps/EBCDIC-DK-NO-A gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-es.h: ../localedata/charmaps/EBCDIC-ES gen-8bit.sh
+$(objpfx)ebcdic-es.stmp: ../localedata/charmaps/EBCDIC-ES gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-es-a.h: ../localedata/charmaps/EBCDIC-ES-A gen-8bit.sh
+$(objpfx)ebcdic-es-a.stmp: ../localedata/charmaps/EBCDIC-ES-A gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-es-s.h: ../localedata/charmaps/EBCDIC-ES-S gen-8bit.sh
+$(objpfx)ebcdic-es-s.stmp: ../localedata/charmaps/EBCDIC-ES-S gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-fi-se.h: ../localedata/charmaps/EBCDIC-FI-SE gen-8bit.sh
+$(objpfx)ebcdic-fi-se.stmp: ../localedata/charmaps/EBCDIC-FI-SE gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-fi-se-a.h: ../localedata/charmaps/EBCDIC-FI-SE-A gen-8bit.sh
+$(objpfx)ebcdic-fi-se-a.stmp: ../localedata/charmaps/EBCDIC-FI-SE-A gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-fr.h: ../localedata/charmaps/EBCDIC-FR gen-8bit.sh
+$(objpfx)ebcdic-fr.stmp: ../localedata/charmaps/EBCDIC-FR gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-is-friss.h: ../localedata/charmaps/EBCDIC-IS-FRISS gen-8bit.sh
+$(objpfx)ebcdic-is-friss.stmp: ../localedata/charmaps/EBCDIC-IS-FRISS gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-it.h: ../localedata/charmaps/EBCDIC-IT gen-8bit.sh
+$(objpfx)ebcdic-it.stmp: ../localedata/charmaps/EBCDIC-IT gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-pt.h: ../localedata/charmaps/EBCDIC-PT gen-8bit.sh
+$(objpfx)ebcdic-pt.stmp: ../localedata/charmaps/EBCDIC-PT gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-uk.h: ../localedata/charmaps/EBCDIC-UK gen-8bit.sh
+$(objpfx)ebcdic-uk.stmp: ../localedata/charmaps/EBCDIC-UK gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ebcdic-us.h: ../localedata/charmaps/EBCDIC-US gen-8bit.sh
+$(objpfx)ebcdic-us.stmp: ../localedata/charmaps/EBCDIC-US gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm037.h: ../localedata/charmaps/IBM037 gen-8bit.sh
+
+$(objpfx)ibm037.stmp: ../localedata/charmaps/IBM037 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm038.h: ../localedata/charmaps/IBM038 gen-8bit.sh
+$(objpfx)ibm038.stmp: ../localedata/charmaps/IBM038 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm274.h: ../localedata/charmaps/IBM274 gen-8bit.sh
+$(objpfx)ibm274.stmp: ../localedata/charmaps/IBM274 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm275.h: ../localedata/charmaps/IBM275 gen-8bit.sh
+$(objpfx)ibm275.stmp: ../localedata/charmaps/IBM275 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm423.h: ../localedata/charmaps/IBM423 gen-8bit.sh
+$(objpfx)ibm423.stmp: ../localedata/charmaps/IBM423 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm500.h: ../localedata/charmaps/IBM500 gen-8bit.sh
+$(objpfx)ibm500.stmp: ../localedata/charmaps/IBM500 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm870.h: ../localedata/charmaps/IBM870 gen-8bit.sh
+$(objpfx)ibm870.stmp: ../localedata/charmaps/IBM870 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm871.h: ../localedata/charmaps/IBM871 gen-8bit.sh
+$(objpfx)ibm871.stmp: ../localedata/charmaps/IBM871 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm891.h: ../localedata/charmaps/IBM891 gen-8bit.sh
+$(objpfx)ibm891.stmp: ../localedata/charmaps/IBM891 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm903.h: ../localedata/charmaps/IBM903 gen-8bit.sh
+$(objpfx)ibm903.stmp: ../localedata/charmaps/IBM903 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm904.h: ../localedata/charmaps/IBM904 gen-8bit.sh
+$(objpfx)ibm904.stmp: ../localedata/charmaps/IBM904 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm905.h: ../localedata/charmaps/IBM905 gen-8bit.sh
+$(objpfx)ibm905.stmp: ../localedata/charmaps/IBM905 gen-8bit.sh
 	$(generate-8bit-table)
-$(objpfx)ibm1047.h: ../localedata/charmaps/IBM1047 gen-8bit.sh
+$(objpfx)ibm1047.stmp: ../localedata/charmaps/IBM1047 gen-8bit.sh
 	$(generate-8bit-table)
 
-
 ifneq ($(PERL),no)
-$(objpfx)iso8859-7jp.h: ../localedata/charmaps/ISO-8859-7 gen-8bit-gap-1.sh
-	$(make-target-directory)
-	rm -f $@.new
-	PERL="$(PERL)" $(SHELL) ./gen-8bit-gap-1.sh $< >$@.new
-	mv -f $@.new $@
+$(perl-generated-headers:%=$(objpfx)%): $(objpfx)%.h: $(objpfx)%.stmp
+	@:
 
-$(objpfx)iso8859-5.h: ../localedata/charmaps/ISO-8859-5 gen-8bit-gap.sh
+$(objpfx)iso8859-5.stmp: ../localedata/charmaps/ISO-8859-5 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)iso8859-7.h: ../localedata/charmaps/ISO-8859-7 gen-8bit-gap.sh
+$(objpfx)iso8859-7.stmp: ../localedata/charmaps/ISO-8859-7 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)iso8859-8.h: ../localedata/charmaps/ISO-8859-8 gen-8bit-gap.sh
+$(objpfx)iso8859-7jp.stmp: ../localedata/charmaps/ISO-8859-7 gen-8bit-gap-1.sh
+	$(make-target-directory)
+	PERL="$(PERL)" $(SHELL) ./gen-8bit-gap-1.sh $< >$(@:stmp=T)
+	$(move-if-change) $(@:stmp=T) $(@:stmp=h)
+	touch $@
+
+$(objpfx)iso8859-8.stmp: ../localedata/charmaps/ISO-8859-8 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)iso8859-10.h: ../localedata/charmaps/ISO-8859-10 gen-8bit-gap.sh
+$(objpfx)iso8859-10.stmp: ../localedata/charmaps/ISO-8859-10 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
 
-$(objpfx)koi8-r.h: ../localedata/charmaps/KOI8-R gen-8bit-gap.sh
+$(objpfx)koi8-r.stmp: ../localedata/charmaps/KOI8-R gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)latin-greek.h: ../localedata/charmaps/LATIN-GREEK gen-8bit-gap.sh
+$(objpfx)latin-greek.stmp: ../localedata/charmaps/LATIN-GREEK gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)latin-greek-1.h: ../localedata/charmaps/LATIN-GREEK-1 gen-8bit-gap.sh
+$(objpfx)latin-greek-1.stmp: ../localedata/charmaps/LATIN-GREEK-1 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm256.h: ../localedata/charmaps/IBM256 gen-8bit-gap.sh
+
+$(objpfx)ibm256.stmp: ../localedata/charmaps/IBM256 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm273.h: ../localedata/charmaps/IBM273 gen-8bit-gap.sh
+$(objpfx)ibm273.stmp: ../localedata/charmaps/IBM273 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm277.h: ../localedata/charmaps/IBM277 gen-8bit-gap.sh
+$(objpfx)ibm277.stmp: ../localedata/charmaps/IBM277 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm278.h: ../localedata/charmaps/IBM278 gen-8bit-gap.sh
+$(objpfx)ibm278.stmp: ../localedata/charmaps/IBM278 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm280.h: ../localedata/charmaps/IBM280 gen-8bit-gap.sh
+$(objpfx)ibm280.stmp: ../localedata/charmaps/IBM280 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm281.h: ../localedata/charmaps/IBM281 gen-8bit-gap.sh
+$(objpfx)ibm281.stmp: ../localedata/charmaps/IBM281 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm284.h: ../localedata/charmaps/IBM284 gen-8bit-gap.sh
+$(objpfx)ibm284.stmp: ../localedata/charmaps/IBM284 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm285.h: ../localedata/charmaps/IBM285 gen-8bit-gap.sh
+$(objpfx)ibm285.stmp: ../localedata/charmaps/IBM285 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm290.h: ../localedata/charmaps/IBM290 gen-8bit-gap.sh
+$(objpfx)ibm290.stmp: ../localedata/charmaps/IBM290 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm297.h: ../localedata/charmaps/IBM297 gen-8bit-gap.sh
+$(objpfx)ibm297.stmp: ../localedata/charmaps/IBM297 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm420.h: ../localedata/charmaps/IBM420 gen-8bit-gap.sh
+$(objpfx)ibm420.stmp: ../localedata/charmaps/IBM420 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm424.h: ../localedata/charmaps/IBM424 gen-8bit-gap.sh
+$(objpfx)ibm424.stmp: ../localedata/charmaps/IBM424 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm437.h: ../localedata/charmaps/IBM437 gen-8bit-gap.sh
+$(objpfx)ibm437.stmp: ../localedata/charmaps/IBM437 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm850.h: ../localedata/charmaps/IBM850 gen-8bit-gap.sh
+$(objpfx)ibm850.stmp: ../localedata/charmaps/IBM850 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm851.h: ../localedata/charmaps/IBM851 gen-8bit-gap.sh
+$(objpfx)ibm851.stmp: ../localedata/charmaps/IBM851 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm852.h: ../localedata/charmaps/IBM852 gen-8bit-gap.sh
+$(objpfx)ibm852.stmp: ../localedata/charmaps/IBM852 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm855.h: ../localedata/charmaps/IBM855 gen-8bit-gap.sh
+$(objpfx)ibm855.stmp: ../localedata/charmaps/IBM855 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm857.h: ../localedata/charmaps/IBM857 gen-8bit-gap.sh
+$(objpfx)ibm857.stmp: ../localedata/charmaps/IBM857 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm860.h: ../localedata/charmaps/IBM860 gen-8bit-gap.sh
+$(objpfx)ibm860.stmp: ../localedata/charmaps/IBM860 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm861.h: ../localedata/charmaps/IBM861 gen-8bit-gap.sh
+$(objpfx)ibm861.stmp: ../localedata/charmaps/IBM861 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm862.h: ../localedata/charmaps/IBM862 gen-8bit-gap.sh
+$(objpfx)ibm862.stmp: ../localedata/charmaps/IBM862 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm863.h: ../localedata/charmaps/IBM863 gen-8bit-gap.sh
+$(objpfx)ibm863.stmp: ../localedata/charmaps/IBM863 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm864.h: ../localedata/charmaps/IBM864 gen-8bit-gap.sh
+$(objpfx)ibm864.stmp: ../localedata/charmaps/IBM864 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm865.h: ../localedata/charmaps/IBM865 gen-8bit-gap.sh
+$(objpfx)ibm865.stmp: ../localedata/charmaps/IBM865 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm868.h: ../localedata/charmaps/IBM868 gen-8bit-gap.sh
+$(objpfx)ibm868.stmp: ../localedata/charmaps/IBM868 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm869.h: ../localedata/charmaps/IBM869 gen-8bit-gap.sh
+$(objpfx)ibm869.stmp: ../localedata/charmaps/IBM869 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm875.h: ../localedata/charmaps/IBM875 gen-8bit-gap.sh
+$(objpfx)ibm875.stmp: ../localedata/charmaps/IBM875 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm880.h: ../localedata/charmaps/IBM880 gen-8bit-gap.sh
+$(objpfx)ibm880.stmp: ../localedata/charmaps/IBM880 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm918.h: ../localedata/charmaps/IBM918 gen-8bit-gap.sh
+$(objpfx)ibm918.stmp: ../localedata/charmaps/IBM918 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm1004.h: ../localedata/charmaps/IBM1004 gen-8bit-gap.sh
+$(objpfx)ibm1004.stmp: ../localedata/charmaps/IBM1004 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)ibm1026.h: ../localedata/charmaps/IBM1026 gen-8bit-gap.sh
+$(objpfx)ibm1026.stmp: ../localedata/charmaps/IBM1026 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)cp1250.h: ../localedata/charmaps/CP1250 gen-8bit-gap.sh
+
+$(objpfx)cp1250.stmp: ../localedata/charmaps/CP1250 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)cp1251.h: ../localedata/charmaps/CP1251 gen-8bit-gap.sh
+$(objpfx)cp1251.stmp: ../localedata/charmaps/CP1251 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)cp1252.h: ../localedata/charmaps/CP1252 gen-8bit-gap.sh
+$(objpfx)cp1252.stmp: ../localedata/charmaps/CP1252 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)cp1253.h: ../localedata/charmaps/CP1253 gen-8bit-gap.sh
+$(objpfx)cp1253.stmp: ../localedata/charmaps/CP1253 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)cp1254.h: ../localedata/charmaps/CP1254 gen-8bit-gap.sh
+$(objpfx)cp1254.stmp: ../localedata/charmaps/CP1254 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)cp1255.h: ../localedata/charmaps/CP1255 gen-8bit-gap.sh
+$(objpfx)cp1255.stmp: ../localedata/charmaps/CP1255 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)cp1256.h: ../localedata/charmaps/CP1256 gen-8bit-gap.sh
+$(objpfx)cp1256.stmp: ../localedata/charmaps/CP1256 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-$(objpfx)cp1257.h: ../localedata/charmaps/CP1257 gen-8bit-gap.sh
+$(objpfx)cp1257.stmp: ../localedata/charmaps/CP1257 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
 endif
 
diff --git a/linuxthreads/Makefile b/linuxthreads/Makefile
index d75cb73631..da92138111 100644
--- a/linuxthreads/Makefile
+++ b/linuxthreads/Makefile
@@ -34,7 +34,6 @@ extra-libs-others := $(extra-libs)
 libpthread-routines := attr cancel condvar join manager mutex ptfork \
 		       ptlongjmp pthread signals specific errno lockfile \
 		       semaphore spinlock wrapsyscall rwlock
-libpthread-map	:= libpthread.map
 
 include ../Rules
 
diff --git a/locale/Makefile b/locale/Makefile
index b93298310b..84005116c8 100644
--- a/locale/Makefile
+++ b/locale/Makefile
@@ -46,7 +46,6 @@ extra-libs	= libBrokenLocale
 extra-libs-others = $(extra-libs)
 
 libBrokenLocale-routines = broken_cur_max
-libBrokenLocale-map = libBrokenLocale.map
 
 subdir-dirs	= programs
 vpath %.c programs
diff --git a/login/Makefile b/login/Makefile
index 96c75f7b4a..40cee55f80 100644
--- a/login/Makefile
+++ b/login/Makefile
@@ -48,7 +48,6 @@ extra-libs      := libutil
 extra-libs-others := $(extra-libs)
 
 libutil-routines:= login login_tty logout logwtmp openpty forkpty
-libutil-map	:= libutil.map
 
 include ../Rules
 
diff --git a/login/README.utmpd b/login/README.utmpd
index d70b3d8de2..b691c36f27 100644
--- a/login/README.utmpd
+++ b/login/README.utmpd
@@ -1,7 +1,8 @@
 With the introduction of version 2 of the GNU C Library the format of
-the UTMP and WTMP files changed for some configurations (see Q&A 10 of
-the FAQ).  This version of the GNU C Library contains a solution for
-the problems this may cause, by providing an UTMP daemon `utmpd'.
+the UTMP and WTMP files changed for some configurations (see Q&A `Why
+does getlogin() always return NULL on my Linux box?' of the FAQ).
+This version of the GNU C Library contains a solution for the problems
+this may cause, by providing an UTMP daemon `utmpd'.
 
 Do I need it?
 =============
diff --git a/math/Makefile b/math/Makefile
index 6b0b2bf6b4..103937e580 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -36,8 +36,6 @@ aux		:= fpu_control setfpucw
 extra-libs	:= libm
 extra-libs-others = $(extra-libs)
 
-libm-map	:= libm.map
-
 libm-support = k_standard s_lib_version s_matherr s_signgam		\
 	       fclrexcpt fgetexcptflg fraiseexcpt fsetexcptflg		\
 	       ftestexcept fegetround fesetround fegetenv feholdexcpt	\
diff --git a/md5-crypt/Makefile b/md5-crypt/Makefile
index e948fb0491..28b90df9a0 100644
--- a/md5-crypt/Makefile
+++ b/md5-crypt/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -32,7 +32,6 @@ extra-libs-others := $(extra-libs)
 
 md5-routines := crypt-entry md5-crypt md5
 libcrypt-routines := $(md5-routines)
-libcrypt-map := libcrypt.map
 
 onlymd5-routines := onlymd5-entry md5-crypt md5
 distribute += onlymd5-entry.c
diff --git a/nis/Makefile b/nis/Makefile
index b31aad4401..f91121bc11 100644
--- a/nis/Makefile
+++ b/nis/Makefile
@@ -57,15 +57,12 @@ libnsl-map	= libnsl.map
 
 libnss_compat-routines	:= $(addprefix compat-,grp pwd spwd) nisplus-parser
 libnss_compat-inhibit-o	= $(filter-out .os,$(object-suffixes))
-libnss_compat-map	:= libnss_compat.map
 
 libnss_nis-routines	:= $(addprefix nis-,$(databases))
 libnss_nis-inhibit-o	= $(filter-out .os,$(object-suffixes))
-libnss_nis-map		:= libnss_nis.map
 
 libnss_nisplus-routines	:= $(addprefix nisplus-,$(databases)) nisplus-parser
 libnss_nisplus-inhibit-o = $(filter-out .os,$(object-suffixes))
-libnss_nisplus-map	:= libnss_nisplus.map
 
 include ../Rules
 
diff --git a/nss/Makefile b/nss/Makefile
index cf953f1019..69a99c6a75 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -54,18 +54,15 @@ vpath %.c $(subdir-dirs)
 
 
 libnss_files-routines	:= $(addprefix files-,$(filter-out key, $(databases)))
-libnss_files-map	:= libnss_files.map
 distribute		+= files-XXX.c files-parse.c
 
 libnss_db-routines	:= $(addprefix db-,$(filter-out hosts network key,\
 							$(databases)))
-libnss_db-map		:= libnss_db.map
 generated		+= $(filter-out db-alias.c db-netgrp.c, \
 					$(addsuffix .c,$(libnss_db-routines)))
 distribute		+= db-XXX.c
 
 libnss_ldap-routines	:= $(addprefix ldap-,proto) util ldap-nss
-libnss_ldap-map		:= libnss_ldap.map
 
 
 # Build static module if requested
diff --git a/posix/wordexp-test.c b/posix/wordexp-test.c
index 81f93a1577..82af1666a2 100644
--- a/posix/wordexp-test.c
+++ b/posix/wordexp-test.c
@@ -205,9 +205,6 @@ main (int argc, char *argv[])
     {
       struct test_case_struct ts;
 
-      printf ("Test %d (~root): ", ++tests);
-      fflush (stdout);
-
       ts.retval = 0;
       ts.env = NULL;
       ts.words = "~root";
@@ -217,12 +214,7 @@ main (int argc, char *argv[])
       ts.ifs = IFS;
 
       if (testit (&ts))
-	{
-	  printf ("FAILED\n");
-	  ++fail;
-	}
-      else
-	printf ("OK\n");
+	++fail;
     }
 
   puts ("tests completed, now cleaning up");
diff --git a/resolv/Makefile b/resolv/Makefile
index 938cde75dd..fe5a0f16c1 100644
--- a/resolv/Makefile
+++ b/resolv/Makefile
@@ -36,13 +36,11 @@ extra-libs-others = $(extra-libs)
 libresolv-routines := gethnamaddr res_comp res_debug	\
 		      res_data res_mkquery res_query res_send		\
 		      inet_net_ntop inet_net_pton inet_neta base64
-libresolv-map := libresolv.map
 
 subdir-dirs = nss_dns
 vpath %.c nss_dns
 
 libnss_dns-routines	:= dns-host dns-network
-libnss_dns-map		:= libnss_dns.map
 ifneq ($(build-static-nss),yes)
 libnss_dns-inhibit-o	= $(filter-out .os,$(object-suffixes))
 endif
diff --git a/rt/Makefile b/rt/Makefile
index bc8f9234bf..69d76151ed 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -28,8 +28,6 @@ librt-routines := aio_cancel aio_error aio_fsync aio_misc aio_read	\
 		  aio_write64 lio_listio lio_listio64 aio_sigqueue	\
 		  aio_notify
 
-librt-map := librt.map
-
 # Make sure that everything is distributed independent of configuration.
 distribute := aio_misc.h $(librt-routines:=.c) $(librt-map)
 
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index a6101cfc6b..3697e036c6 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -134,15 +134,14 @@ $(inst_sysconfdir)/rpc: etc.rpc $(+force)
 # Generate the rpcsvc headers with rpcgen.
 # We use a stamp file to avoid unnessary recompilation each time rpcgen is
 # relinked.
+move-if-change = ./$(..)scripts/move-if-change
 $(rpcsvc:%.x=$(objpfx)rpcsvc/%.h): $(objpfx)rpcsvc/%.h: $(objpfx)rpcsvc/%.stmp
 	@:
 $(objpfx)rpcsvc/%.stmp: rpcsvc/%.x $(objpfx)rpcgen
 	$(make-target-directory)
 	-@rm -f ${@:stmp=T} $@
 	$(rpcgen-cmd) -h $< -o ${@:stmp=T}
-	if test -r ${@:stmp=h} && cmp -s ${@:stmp=h} ${@:stmp=T}; \
-	then rm -f ${@:stmp=T}; \
-	else mv -f ${@:stmp=T} ${@:stmp=h}; fi
+	$(move-if-change) $(@:stmp=T) $(@:stmp=h)
 	touch $@
 
 # Generate the rpcsvc XDR functions with rpcgen.
@@ -151,9 +150,7 @@ $(rpcsvc:%.x=$(objpfx)x%.c): $(objpfx)x%.c: $(objpfx)x%.stmp
 $(objpfx)x%.stmp: rpcsvc/%.x $(objpfx)rpcgen
 	-@rm -f ${@:stmp=T} $@
 	$(rpcgen-cmd) -c $< -o ${@:stmp=T}
-	if test -r ${@:stmp=c} && cmp -s ${@:stmp=c} ${@:stmp=T}; \
-	then rm -f ${@:stmp=T}; \
-	else mv -f ${@:stmp=T} ${@:stmp=c}; fi
+	$(move-if-change) $(@:stmp=T) $(@:stmp=c)
 	touch $@
 
 # The generated source files depend on the corresponding generated headers.
diff --git a/sysdeps/generic/setenv.c b/sysdeps/generic/setenv.c
index 69bd992832..baae4c59b2 100644
--- a/sysdeps/generic/setenv.c
+++ b/sysdeps/generic/setenv.c
@@ -61,6 +61,8 @@ __libc_lock_define_initialized (static, envlock)
 # define setenv __setenv
 # define unsetenv __unsetenv
 # define clearenv __clearenv
+# define tfind __tfind
+# define tsearch __tsearch
 #endif
 
 /* In the GNU C library implementation we try to be more clever and
@@ -75,8 +77,20 @@ __libc_lock_define_initialized (static, envlock)
    values.  */
 static void *known_values;
 
-# define KNOWN_VALUE(Str) tfind (Str, &known_values, (__compar_fn_t) strcmp)
-# define STORE_VALUE(Str) tsearch (Str, &known_values, (__compar_fn_t) strcmp)
+# define KNOWN_VALUE(Str) \
+  ({									      \
+    void **value = tfind (Str, &known_values, (__compar_fn_t) strcmp);	      \
+    if (value != NULL)							      \
+      value = *(const char **) value;					      \
+    value;								      \
+  })
+# define STORE_VALUE(Str) \
+  ({									      \
+    void **value = tsearch (Str, &known_values, (__compar_fn_t) strcmp);      \
+    if (value != NULL)							      \
+      value = *(const char **) value;					      \
+    value;								      \
+  })
 
 #else
 # undef USE_TSEARCH
@@ -240,7 +254,7 @@ unsetenv (name)
 	char **dp = ep;
 
 	/* Store the value so that we can reuse it later.  */
-	STORE_VALUE (ep);
+	STORE_VALUE (*ep);
 
 	do
 	  dp[0] = dp[1];
diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h
index 9b07535816..5517ba8803 100644
--- a/sysdeps/unix/sysv/linux/bits/socket.h
+++ b/sysdeps/unix/sysv/linux/bits/socket.h
@@ -80,6 +80,7 @@ enum __socket_type
 #define	PF_ASH		18	/* Ash.  */
 #define	PF_ECONET	19	/* Acorn Econet.  */
 #define	PF_ATMSVC	20	/* ATM SVCs.  */
+#define	PF_SNA		22	/* Linux SNA Project */
 #define	PF_MAX		32	/* For now..  */
 
 /* Address families.  */
@@ -107,6 +108,7 @@ enum __socket_type
 #define	AF_ASH		PF_ASH
 #define	AF_ECONET	PF_ECONET
 #define	AF_ATMSVC	PF_ATMSVC
+#define	AF_SNA		PF_SNA
 #define	AF_MAX		PF_MAX
 
 /* Socket level values.  Others are defined in the appropriate headers.
diff --git a/time/tzfile.c b/time/tzfile.c
index c9becf3238..9fab857ecc 100644
--- a/time/tzfile.c
+++ b/time/tzfile.c
@@ -90,7 +90,6 @@ __tzfile_read (const char *file)
   struct tzhead tzhead;
   size_t chars;
   register size_t i;
-  struct ttinfo *info;
 
   __use_tzfile = 0;
 
@@ -415,13 +414,14 @@ find_transition (time_t timer)
 
 int
 __tzfile_compute (time_t timer, int use_localtime,
-		  long int *leap_correct, int *leap_hit)
+		  long int *leap_correct, int *leap_hit,
+		  int *isdst, long int *offset)
 {
+  struct ttinfo *info = find_transition (timer);
   register size_t i;
 
   if (use_localtime)
     {
-      struct ttinfo *info = find_transition (timer);
       __daylight = rule_stdoff != rule_dstoff;
       __timezone = -rule_stdoff;
       __tzname[1] = NULL;
@@ -434,6 +434,9 @@ __tzfile_compute (time_t timer, int use_localtime,
 	__tzname[1] = __tzname[0];
     }
 
+  *isdst = info->isdst;
+  *offset = info->offset;
+
   *leap_correct = 0L;
   *leap_hit = 0;
 
diff --git a/time/tzset.c b/time/tzset.c
index e42be39db8..251967e5c6 100644
--- a/time/tzset.c
+++ b/time/tzset.c
@@ -37,7 +37,8 @@ extern struct tm _tmbuf;
 extern int __use_tzfile;
 extern void __tzfile_read __P ((const char *file));
 extern int __tzfile_compute __P ((time_t timer, int use_localtime,
-				  long int *leap_correct, int *leap_hit));
+				  long int *leap_correct, int *leap_hit,
+				  int *isdst, long int *offset));
 extern void __tzfile_default __P ((const char *std, const char *dst,
 				   long int stdoff, long int dstoff));
 extern char *__tzstring __P ((const char *string));
@@ -594,6 +595,8 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
 {
   long int leap_correction;
   int leap_extra_secs;
+  int isdst;
+  long int offset;
 
   if (timer == NULL)
     {
@@ -612,7 +615,8 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
   if (__use_tzfile)
     {
       if (! __tzfile_compute (*timer, use_localtime,
-			      &leap_correction, &leap_extra_secs))
+			      &leap_correction, &leap_extra_secs,
+			      &isdst, &offset))
 	tp = NULL;
     }
   else
@@ -621,16 +625,18 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
 	tp = NULL;
       leap_correction = 0L;
       leap_extra_secs = 0;
+
+      isdst = (*timer >= tz_rules[0].change && *timer < tz_rules[1].change);
+      offset = tz_rules[isdst].offset;
     }
 
   if (tp)
     {
       if (use_localtime)
 	{
-	  tp->tm_isdst = (*timer >= tz_rules[0].change
-			  && *timer < tz_rules[1].change);
-	  tp->tm_zone = __tzname[tp->tm_isdst];
-	  tp->tm_gmtoff = tz_rules[tp->tm_isdst].offset;
+	  tp->tm_isdst = isdst;
+	  tp->tm_zone = __tzname[isdst];
+	  tp->tm_gmtoff = offset;
 	}
       else
 	{
diff --git a/wcsmbs/wcsmbsload.c b/wcsmbs/wcsmbsload.c
index 1f4065513d..f2699b6107 100644
--- a/wcsmbs/wcsmbsload.c
+++ b/wcsmbs/wcsmbsload.c
@@ -96,8 +96,7 @@ getfct (const char *to, const char *from)
     const char *cp = str;						      \
     char *result = NULL;						      \
 									      \
-    while (strchr ("@.+,", *cp) == NULL)				      \
-      ++cp;								      \
+    cp += strcspn (cp, "@.+,");						      \
     if (*cp == '.')							      \
       {									      \
 	const char *endp = ++cp;					      \