diff --git a/INSTALL b/INSTALL
index 4d9024c..bc972b2 100644
--- a/INSTALL
+++ b/INSTALL
@@ -5,11 +5,6 @@ Before you do anything else, you should read the FAQ at
 <http://sourceware.org/glibc/wiki/FAQ>.  It answers common questions and
 describes problems you may experience with compilation and installation.
 
-   Features can be added to the GNU C Library via "add-on" bundles.
-These are separate tar files, which you unpack into the top level of the
-source tree.  Then you give 'configure' the '--enable-add-ons' option to
-activate them, and they will be compiled into the library.
-
    You will need recent versions of several GNU tools: definitely GCC
 and GNU Make, and possibly others.  *Note Tools for Compilation::,
 below.
@@ -69,18 +64,6 @@ will be used, and CFLAGS sets optimization options for the compiler.
      this option if you want to compile the GNU C Library with a newer
      set of kernel headers than the ones found in '/usr/include'.
 
-'--enable-add-ons[=LIST]'
-     Specify add-on packages to include in the build.  If this option is
-     specified with no list, it enables all the add-on packages it finds
-     in the main source directory; this is the default behavior.  You
-     may specify an explicit list of add-ons to use in LIST, separated
-     by spaces or commas (if you use spaces, remember to quote them from
-     the shell).  Each add-on in LIST can be an absolute directory name
-     or can be a directory name relative to the main source directory,
-     or relative to the build directory (that is, the current working
-     directory).  For example,
-     '--enable-add-ons=nptl,../glibc-libidn-VERSION'.
-
 '--enable-kernel=VERSION'
      This option is currently only useful on GNU/Linux systems.  The
      VERSION parameter should have the form X.Y.Z and describes the
diff --git a/Makeconfig b/Makeconfig
index b51904b..e20d132 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -59,15 +59,7 @@ stack-align-test-flags =
 # `configure' writes a definition of `config-sysdirs' in `config.make'.
 sysdirs := $(foreach D,$(config-sysdirs),$(firstword $(filter /%,$D) $(..)$D))
 
-# Add-ons that contribute sysdeps trees get added to the include list
-# after sysdeps/generic.  This makes #include <sysdeps/...> work right
-# to find specific add-on files without assuming the add-on directory name.
-# It also means that headers can go into an add-on's base directory
-# instead of the add-on needing a sysdeps/generic of its own.
-sysdeps-srcdirs := $(foreach add-on,$(sysdeps-add-ons),\
-			     $(firstword $(filter /%,$(add-on)) \
-					 $(..)$(add-on)))
-+sysdep_dirs = $(sysdirs) $(sysdeps-srcdirs)
++sysdep_dirs = $(sysdirs)
 ifdef objdir
 +sysdep_dirs := $(objdir) $(+sysdep_dirs)
 endif
@@ -81,8 +73,8 @@ $(common-objpfx)config.make: $(common-objpfx)config.status \
 			     $(..)config.make.in $(..)config.h.in
 	cd $(<D); $(SHELL) $(<F)
 
-# Find all the add-on and sysdeps configure fragments, to make sure we
-# re-run configure when any of them changes.
+# Find all the sysdeps configure fragments, to make sure we re-run
+# configure when any of them changes.
 $(common-objpfx)config.status: $(..)version.h $(..)configure \
 			       $(foreach dir,$(sysdirs),\
 					 $(wildcard $(dir)/Implies) \
@@ -90,14 +82,7 @@ $(common-objpfx)config.status: $(..)version.h $(..)configure \
 						    $(firstword $(wildcard \
  $(addprefix $(dir)/,configure configure.ac))))) \
 			       $(patsubst %.ac,%,\
- $(wildcard $(..)sysdeps/*/preconfigure $(..)sysdeps/*/preconfigure.ac)) \
-			       $(patsubst %.ac,%,\
-					  $(foreach add-on,$(add-ons),\
-						    $(firstword $(wildcard \
- $(addprefix $(firstword $(filter /%,$(add-on)) $(..)$(add-on))/,\
-	     configure configure.ac))) \
- $(wildcard $(addprefix $(firstword $(filter /%,$(add-on)) $(..)$(add-on))/,\
-			sysdeps/*/preconfigure sysdeps/*/preconfigure.ac))))
+ $(wildcard $(..)sysdeps/*/preconfigure $(..)sysdeps/*/preconfigure.ac))
 	@cd $(@D); if test -f $(@F); then exec $(SHELL) $(@F) --recheck; else \
 	 echo The GNU C library has not been configured. >&2; \
 	 echo Run \`configure\' to configure it before building. >&2; \
@@ -1076,8 +1061,6 @@ endif
 ifeq ($(sysd-sorted-done),t)
 -include $(common-objpfx)soversions.mk
 ifndef avoid-generated
-# This lets add-ons give more-specific matches that override defaults
-# in the top-level file.
 $(common-objpfx)shlib-versions.v.i: \
 	$(wildcard $(+sysdep_dirs:=/shlib-versions) \
 		   $(subdir-srcdirs:=/shlib-versions)) \
@@ -1185,7 +1168,7 @@ all-subdirs = csu assert ctype locale intl catgets math setjmp signal	    \
 	      grp pwd posix io termios resource misc socket sysvipc gmon    \
 	      gnulib iconv iconvdata wctype manual shadow gshadow po argp   \
 	      crypt localedata timezone rt conform debug mathvec support    \
-	      $(add-on-subdirs) dlfcn elf
+	      dlfcn elf
 
 ifndef avoid-generated
 # sysd-sorted itself will contain rules making the sysd-sorted target
diff --git a/Makefile b/Makefile
index 3e0ae6f..869fe70 100644
--- a/Makefile
+++ b/Makefile
@@ -351,8 +351,7 @@ files-for-dist := README INSTALL configure ChangeLog NEWS
 
 # Regenerate stuff, then error if these things are not committed yet.
 dist-prepare: $(files-for-dist)
-	conf=`find sysdeps $(addsuffix /sysdeps,$(sysdeps-add-ons)) \
-		   -name configure`; \
+	conf=`find sysdeps -name configure`; \
 	$(MAKE) $$conf && \
 	git diff --stat HEAD -- $^ $$conf \
 	| $(AWK) '{ print; rc=1 } END { exit rc }'
diff --git a/NEWS b/NEWS
index e346d2a..6d7b448 100644
--- a/NEWS
+++ b/NEWS
@@ -45,6 +45,10 @@ Deprecated and removed features, and other changes affecting compatibility:
   platforms where it was previously the same, this changes the C++ name
   mangling for interfaces involving this type.
 
+* The add-ons mechanism for building additional packages at the same time as
+  glibc has been removed.  The --enable-add-ons configure option is now
+  ignored.
+
 Changes to build and runtime requirements:
 
   [Add changes to build and runtime requirements here]
diff --git a/config.make.in b/config.make.in
index ea7a42c..fd2dbc9 100644
--- a/config.make.in
+++ b/config.make.in
@@ -90,9 +90,6 @@ build-pic-default= @libc_cv_pic_default@
 build-pie-default= @libc_cv_pie_default@
 build-profile = @profile@
 build-static-nss = @static_nss@
-add-ons = @add_ons@
-add-on-subdirs = @add_on_subdirs@
-sysdeps-add-ons = @sysdeps_add_ons@
 cross-compiling = @cross_compiling@
 force-install = @force_install@
 link-obsolete-rpc = @link_obsolete_rpc@
diff --git a/configure b/configure
index 067d92d..0e53eaf 100755
--- a/configure
+++ b/configure
@@ -659,7 +659,6 @@ LN_S
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
-sysdeps_add_ons
 sysnames
 submachine
 multi_arch
@@ -667,8 +666,6 @@ no_stack_protector
 stack_protector
 libc_cv_ssp
 base_machine
-add_on_subdirs
-add_ons
 have_tunables
 build_pt_chown
 build_nscd
@@ -771,7 +768,6 @@ enable_timezone_tools
 enable_hardcoded_path_in_tests
 enable_stackguard_randomization
 enable_lock_elision
-enable_add_ons
 enable_hidden_plt
 enable_bind_now
 enable_stack_protector
@@ -806,8 +802,7 @@ CPP
 CXX
 CXXFLAGS
 CCC'
-ac_subdirs_all='
-'
+ac_subdirs_all=''
 
 # Initialize some variables set by options.
 ac_init_help=
@@ -1434,9 +1429,6 @@ Optional Features:
                           number at program start
   --enable-lock-elision=yes/no
                           Enable lock elision for pthread mutexes by default
-  --enable-add-ons[=DIRS...]
-                          configure and build add-ons in DIR1,DIR2,... search
-                          for add-ons if no parameter given
   --disable-hidden-plt    do not hide internal function calls to avoid PLT
   --enable-bind-now       disable lazy relocations in DSOs
   --enable-stack-protector=[yes|no|all|strong]
@@ -3415,14 +3407,6 @@ if test "$enable_lock_elision" = yes ; then
 
 fi
 
-# Check whether --enable-add-ons was given.
-if test "${enable_add_ons+set}" = set; then :
-  enableval=$enable_add_ons;
-else
-  enable_add_ons=yes
-fi
-
-
 # Check whether --enable-hidden-plt was given.
 if test "${enable_hidden_plt+set}" = set; then :
   enableval=$enable_hidden_plt; hidden=$enableval
@@ -3781,7 +3765,7 @@ config_os="`echo $config_os | sed 's/^unknown-//'`"
 # Some configurations imply other options.
 elf=yes
 
-# The configure fragment of an add-on port can modify these to supplement
+# The configure fragment of a port can modify these to supplement
 # or override the table in the case statement below.  No fragment should
 # ever change the config_* variables, however.
 machine=$config_machine
@@ -3819,143 +3803,6 @@ $as_echo_n "checking for sysdeps preconfigure fragments... " >&6; }
 $as_echo "" >&6; }
 fi
 
-subdirs="$subdirs "
-
-
-case "$enable_add_ons" in
-''|no) add_ons= ;;
-yes|'*')
- add_ons=`cd $srcdir && ls -d 2> /dev/null */configure */sysdeps |
-	  sed 's@/[^/]*$@@' | sort | uniq`
-	 add_ons_automatic=yes
-	 ;;
-*) add_ons=`echo "$enable_add_ons" | sed 's/,/ /g'`
-       add_ons_automatic=no ;;
-esac
-
-configured_add_ons=
-add_ons_sfx=
-add_ons_pfx=
-if test x"$add_ons" != x; then
-  for f in $add_ons; do
-    # Some sanity checks
-    case "$f" in
-    crypt)
-      as_fn_error $? "
-*** It seems that you're using an old \`crypt' add-on.  crypt is now
-*** part of glibc and using the old add-on will not work with this
-*** release.  Start again with fresh sources and without the old
-*** \`crypt' add-on." "$LINENO" 5
-    ;;
-    localedata)
-      as_fn_error $? "
-*** It seems that you're using an old \`localedata' add-on.  localedata
-*** is now part of glibc and using the old add-on will not work with
-*** this release.  Start again with fresh sources and without the old
-*** \`localedata' add-on." "$LINENO" 5
-    ;;
-    esac
-  done
-
-  # Now source each add-on's configure fragment.
-  # The fragments can use $srcdir/$libc_add_on to find themselves,
-  # and test $add_ons_automatic to see if they were explicitly requested.
-  # A fragment can clear (or even change) $libc_add_on to affect
-  # whether it goes into the list to be actually used in the build.
-  use_add_ons=
-  for libc_add_on in $add_ons; do
-    # Test whether such a directory really exists.
-    # It can be absolute, or relative to $srcdir, or relative to the build dir.
-    case "$libc_add_on" in
-    /*)
-      libc_add_on_srcdir=$libc_add_on
-      ;;
-    *)
-      test -d "$srcdir/$libc_add_on" || {
-	if test -d "$libc_add_on"; then
-	  libc_add_on="`pwd`/$libc_add_on"
-	else
-	  as_fn_error $? "add-on directory \"$libc_add_on\" does not exist" "$LINENO" 5
-	fi
-      }
-      libc_add_on_srcdir=$srcdir/$libc_add_on
-      ;;
-    esac
-
-    libc_add_on_frag=$libc_add_on_srcdir/configure
-    libc_add_on_canonical=
-    libc_add_on_config_subdirs=
-    if test -r "$libc_add_on_frag"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: running configure fragment for add-on $libc_add_on" >&5
-$as_echo "$as_me: running configure fragment for add-on $libc_add_on" >&6;}
-      libc_add_on_canonical=unknown
-      libc_add_on_subdirs=
-      . "$libc_add_on_frag"
-      test -z "$libc_add_on" || {
-	configured_add_ons="$configured_add_ons $libc_add_on"
-	if test "x$libc_add_on_canonical" = xunknown; then
-	  as_fn_error $? "fragment must set \$libc_add_on_canonical" "$LINENO" 5
-	fi
-	for d in $libc_add_on_subdirs; do
-	  case "$libc_add_on" in
-	  /*) subdir_srcdir="$libc_add_on" ;;
-	  *) subdir_srcdir="\$(..)$libc_add_on" ;;
-	  esac
-	  case "$d" in
-	  .)
-	    d="${libc_add_on_canonical:-$libc_add_on}"
-	    ;;
-	  /*)
-	    subdir_srcdir="$d"
-	    ;;
-	  *)
-	    subdir_srcdir="$subdir_srcdir/$d"
-	    ;;
-	  esac
-	  d=`echo "$d" | sed 's@/*$@@;s@^.*/@@'`
-	  add_on_subdirs="$add_on_subdirs $d"
-	  test "$subdir_srcdir" = "\$(..)$d" || config_vars="$config_vars
-$d-srcdir = $subdir_srcdir"
-	done
-	for d in $libc_add_on_config_subdirs; do
-	  case "$d" in
-	  /*) as_fn_error $? "fragment uses absolute path in \$libc_add_on_config_subdirs" "$LINENO" 5 ;;
-	  esac
-	  if test ! -d "$libc_add_on_srcdir/$d"; then
-	    as_fn_error $? "fragment wants to configure missing directory $d" "$LINENO" 5
-	  fi
-	  case "$libc_add_on" in
-	  /*) as_fn_error $? "relative path required for add-on using \$libc_add_on_config_subdirs" "$LINENO" 5 ;;
-	  esac
-	  subdirs="$subdirs $libc_add_on/$d"
-	done
-      }
-    fi
-    if test -n "$libc_add_on"; then
-      if frags=`ls -d $libc_add_on_srcdir/sysdeps/*/preconfigure 2> /dev/null`
-then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking add-on $libc_add_on for preconfigure fragments" >&5
-$as_echo_n "checking add-on $libc_add_on for preconfigure fragments... " >&6; }
-  for frag in $frags; do
-    name=`echo "$frag" | sed 's@/[^/]*$@@;s@^.*/@@'`
-    echo $ECHO_N "$name $ECHO_C" >&6
-    . "$frag"
-  done
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
-$as_echo "" >&6; }
-fi
-      use_add_ons="$use_add_ons $libc_add_on"
-      add_ons_pfx="$add_ons_pfx $libc_add_on/"
-      test -z "$libc_add_on_canonical" ||
-      add_ons_sfx="$add_ons_sfx /$libc_add_on_canonical"
-    fi
-  done
-  # Use echo to strip excess whitespace.
-  add_ons="`echo $use_add_ons`"
-fi
-
-
-
 
 ###
 ### By using the undocumented --enable-hacker-mode option for configure
@@ -4227,7 +4074,6 @@ done
 
 
 # Find what sysdep directories exist.
-sysnames_add_ons=
 sysnames=
 for b in $base ''; do
   for m0 in $mach ''; do
@@ -4236,34 +4082,21 @@ for b in $base ''; do
       for o in /$ostry ''; do
 	test "$o" = / && continue
 	for m in $mach ''; do
-	  for d in $add_ons_pfx ''; do
-	    for a in $add_ons_sfx ''; do
-	      try_suffix="$m0$b$v$o$m"
-	      if test -n "$try_suffix"; then
-		try_srcdir="${srcdir}/"
-		case "$d" in
-		/*) try_srcdir= ;;
-		esac
-		try="${d}sysdeps$try_suffix$a"
-		test -n "$enable_debug_configure" &&
-		echo "$0 DEBUG: try $try" >&2
-		if test -d "$try_srcdir$try"; then
-		  sysnames="$sysnames $try"
-		  { test -n "$o" || test -n "$b"; } && os_used=t
-		  { test -n "$m" || test -n "$m0"; } && machine_used=t
-		  case x${m0:-$m} in
-		  x*/$submachine) submachine_used=t ;;
-		  esac
-		  if test -n "$d"; then
-		    case "$sysnames_add_ons" in
-		    *" $d "*) ;;
-		    *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
-		    esac
-		  fi
-		fi
-	      fi
-	    done
-	  done
+	  try_suffix="$m0$b$v$o$m"
+	  if test -n "$try_suffix"; then
+	    try_srcdir="${srcdir}/"
+	    try="sysdeps$try_suffix"
+	    test -n "$enable_debug_configure" &&
+	    echo "$0 DEBUG: try $try" >&2
+	    if test -d "$try_srcdir$try"; then
+	      sysnames="$sysnames $try"
+	      { test -n "$o" || test -n "$b"; } && os_used=t
+	      { test -n "$m" || test -n "$m0"; } && machine_used=t
+	      case x${m0:-$m} in
+	      x*/$submachine) submachine_used=t ;;
+	      esac
+	    fi
+	  fi
 	done
       done
     done
@@ -4272,7 +4105,7 @@ done
 
 # If the assembler supports gnu_indirect_function symbol type and the
 # architecture supports multi-arch, we enable multi-arch by default.
-case $sysnames_add_ons$sysnames in
+case $sysnames in
 *"$multi_arch_d"*)
   ;;
 *)
@@ -4335,24 +4168,15 @@ while test $# -gt 0; do
 	  eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
 	  found=yes
 	fi
-	for d in $add_ons_pfx ''; do
-	  try="${d}sysdeps/$x"
-	  case $d in
-	   /*) try_srcdir= ;;
-	   *) try_srcdir=$srcdir/ ;;
-	  esac
-	  test -n "$enable_debug_configure" &&
-	   echo "DEBUG: $name $implies_file $x try($d) {$try_srcdir}$try" >&2
-	  if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
-	  then
-	    eval "${implies_type}=\"\$${implies_type} \$try\""
-	    found=yes
-	    case "$sysnames_add_ons" in
-	    *" $d "*) ;;
-	    *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
-	    esac
-	  fi
-	done
+	try="sysdeps/$x"
+	try_srcdir=$srcdir/
+	test -n "$enable_debug_configure" &&
+	 echo "DEBUG: $name $implies_file $x try() {$try_srcdir}$try" >&2
+	if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
+	then
+	  eval "${implies_type}=\"\$${implies_type} \$try\""
+	  found=yes
+	fi
 	if test $found = no; then
 	  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $name/$implies_file specifies nonexistent $x" >&5
 $as_echo "$as_me: WARNING: $name/$implies_file specifies nonexistent $x" >&2;}
@@ -4390,63 +4214,6 @@ sysnames="$names $default_sysnames"
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $default_sysnames" >&5
 $as_echo "$default_sysnames" >&6; }
 
-# Collect the list of add-ons that supply partial sysdeps trees.
-sysdeps_add_ons=
-for add_on in $add_ons; do
-  case "$add_on" in
-  /*) xsrcdir= ;;
-  *) xsrcdir="$srcdir/" ;;
-  esac
-
-  test -d "$xsrcdir$add_on/sysdeps" || {
-    case "$configured_add_ons " in
-    *" $add_on "*) ;;
-    *|'')
-      as_fn_error $? "add-on $add_on has no configure fragment or sysdeps tree" "$LINENO" 5
-      ;;
-    esac
-    continue
-  }
-
-  sysdeps_add_ons="$sysdeps_add_ons $add_on"
-  case "$sysnames_add_ons" in
-  *" $add_on/ "*) ;;
-  *|'')
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: add-on $add_on contributed no sysdeps directories" >&5
-$as_echo "$as_me: WARNING: add-on $add_on contributed no sysdeps directories" >&2;}
-    continue ;;
-  esac
-
-  found=no
-  for d in $sysnames; do
-    case "$d" in
-    $add_on/sysdeps/*) ;;
-    *) continue ;;
-    esac
-    (cd "$xsrcdir$d" && for f in *[!~]; do
-       case "$f" in
-       sys|bits)
-	 for ff in $f/*.h; do
-	   test -d "$ff" || { test -e "$ff" && exit 88; }
-	 done
-	 ;;
-       *)
-	 test -d "$f" || { test -e "$f" && exit 88; }
-	 ;;
-       esac
-     done)
-    if test $? -eq 88; then
-      found=yes
-      break
-    fi
-  done
-  if test $found = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: add-on $add_on contributed no useful sysdeps directories" >&5
-$as_echo "$as_me: WARNING: add-on $add_on contributed no useful sysdeps directories" >&2;}
-  fi
-done
-
-
 
 ### Locate tools.
 
diff --git a/configure.ac b/configure.ac
index d412104..bca293f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -209,13 +209,6 @@ if test "$enable_lock_elision" = yes ; then
   AC_DEFINE(ENABLE_LOCK_ELISION)
 fi
 
-dnl Generic infrastructure for drop-in additions to libc.
-AC_ARG_ENABLE([add-ons],
-	      AC_HELP_STRING([--enable-add-ons@<:@=DIRS...@:>@],
-			     [configure and build add-ons in DIR1,DIR2,...
-			      search for add-ons if no parameter given]),
-			     , [enable_add_ons=yes])
-
 AC_ARG_ENABLE([hidden-plt],
 	      AC_HELP_STRING([--disable-hidden-plt],
 			     [do not hide internal function calls to avoid PLT]),
@@ -479,7 +472,7 @@ config_os="`echo $config_os | sed 's/^unknown-//'`"
 # Some configurations imply other options.
 elf=yes
 
-# The configure fragment of an add-on port can modify these to supplement
+# The configure fragment of a port can modify these to supplement
 # or override the table in the case statement below.  No fragment should
 # ever change the config_* variables, however.
 machine=$config_machine
@@ -502,138 +495,9 @@ AC_ARG_WITH([cpu],
 # check below.
 libc_config_ok=no
 
-dnl Let sysdeps/*/preconfigure act here, like they can in add-ons.
+dnl Let sysdeps/*/preconfigure act here.
 LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
 
-dnl Having this here, though empty, makes sure that if add-ons' fragments
-dnl do AC_CONFIG_SUBDIRS([some-dir]), which just sets $subdirs, then
-dnl our AC_OUTPUT will actually use it.
-AC_CONFIG_SUBDIRS()
-
-case "$enable_add_ons" in
-''|no) add_ons= ;;
-yes|'*')
- add_ons=`cd $srcdir && ls -d 2> /dev/null */configure */sysdeps |
-	  sed 's@/[[^/]]*$@@' | sort | uniq`
-	 add_ons_automatic=yes
-	 ;;
-*) add_ons=`echo "$enable_add_ons" | sed 's/,/ /g'`
-       add_ons_automatic=no ;;
-esac
-
-configured_add_ons=
-add_ons_sfx=
-add_ons_pfx=
-if test x"$add_ons" != x; then
-  for f in $add_ons; do
-    # Some sanity checks
-    case "$f" in
-    crypt)
-      AC_MSG_ERROR([
-*** It seems that you're using an old \`crypt' add-on.  crypt is now
-*** part of glibc and using the old add-on will not work with this
-*** release.  Start again with fresh sources and without the old
-*** \`crypt' add-on.])
-    ;;
-    localedata)
-      AC_MSG_ERROR([
-*** It seems that you're using an old \`localedata' add-on.  localedata
-*** is now part of glibc and using the old add-on will not work with
-*** this release.  Start again with fresh sources and without the old
-*** \`localedata' add-on.])
-    ;;
-    esac
-  done
-
-  # Now source each add-on's configure fragment.
-  # The fragments can use $srcdir/$libc_add_on to find themselves,
-  # and test $add_ons_automatic to see if they were explicitly requested.
-  # A fragment can clear (or even change) $libc_add_on to affect
-  # whether it goes into the list to be actually used in the build.
-  use_add_ons=
-  for libc_add_on in $add_ons; do
-    # Test whether such a directory really exists.
-    # It can be absolute, or relative to $srcdir, or relative to the build dir.
-    case "$libc_add_on" in
-    /*)
-      libc_add_on_srcdir=$libc_add_on
-      ;;
-    *)
-      test -d "$srcdir/$libc_add_on" || {
-	if test -d "$libc_add_on"; then
-	  libc_add_on="`pwd`/$libc_add_on"
-	else
-	  AC_MSG_ERROR(add-on directory \"$libc_add_on\" does not exist)
-	fi
-      }
-      libc_add_on_srcdir=$srcdir/$libc_add_on
-      ;;
-    esac
-
-    libc_add_on_frag=$libc_add_on_srcdir/configure
-    libc_add_on_canonical=
-    libc_add_on_config_subdirs=
-    if test -r "$libc_add_on_frag"; then
-      AC_MSG_NOTICE(running configure fragment for add-on $libc_add_on)
-      libc_add_on_canonical=unknown
-      libc_add_on_subdirs=
-      . "$libc_add_on_frag"
-      test -z "$libc_add_on" || {
-	configured_add_ons="$configured_add_ons $libc_add_on"
-	if test "x$libc_add_on_canonical" = xunknown; then
-	  AC_MSG_ERROR(fragment must set \$libc_add_on_canonical)
-	fi
-	for d in $libc_add_on_subdirs; do
-	  case "$libc_add_on" in
-	  /*) subdir_srcdir="$libc_add_on" ;;
-	  *) subdir_srcdir="\$(..)$libc_add_on" ;;
-	  esac
-	  case "$d" in
-	  .)
-	    d="${libc_add_on_canonical:-$libc_add_on}"
-	    ;;
-	  /*)
-	    subdir_srcdir="$d"
-	    ;;
-	  *)
-	    subdir_srcdir="$subdir_srcdir/$d"
-	    ;;
-	  esac
-	  d=`echo "$d" | sed 's@/*$@@;s@^.*/@@'`
-	  add_on_subdirs="$add_on_subdirs $d"
-	  test "$subdir_srcdir" = "\$(..)$d" || config_vars="$config_vars
-$d-srcdir = $subdir_srcdir"
-	done
-	for d in $libc_add_on_config_subdirs; do
-	  case "$d" in
-	  /*) AC_MSG_ERROR(dnl
-fragment uses absolute path in \$libc_add_on_config_subdirs) ;;
-	  esac
-	  if test ! -d "$libc_add_on_srcdir/$d"; then
-	    AC_MSG_ERROR(fragment wants to configure missing directory $d)
-	  fi
-	  case "$libc_add_on" in
-	  /*) AC_MSG_ERROR(dnl
-relative path required for add-on using \$libc_add_on_config_subdirs) ;;
-	  esac
-	  subdirs="$subdirs $libc_add_on/$d"
-	done
-      }
-    fi
-    if test -n "$libc_add_on"; then
-      LIBC_PRECONFIGURE([$libc_add_on_srcdir], [add-on $libc_add_on for])
-      use_add_ons="$use_add_ons $libc_add_on"
-      add_ons_pfx="$add_ons_pfx $libc_add_on/"
-      test -z "$libc_add_on_canonical" ||
-      add_ons_sfx="$add_ons_sfx /$libc_add_on_canonical"
-    fi
-  done
-  # Use echo to strip excess whitespace.
-  add_ons="`echo $use_add_ons`"
-fi
-AC_SUBST(add_ons)
-AC_SUBST(add_on_subdirs)
-
 
 ###
 ### By using the undocumented --enable-hacker-mode option for configure
@@ -849,7 +713,6 @@ dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
 changequote([,])dnl
 
 # Find what sysdep directories exist.
-sysnames_add_ons=
 sysnames=
 for b in $base ''; do
   for m0 in $mach ''; do
@@ -858,34 +721,21 @@ for b in $base ''; do
       for o in /$ostry ''; do
 	test "$o" = / && continue
 	for m in $mach ''; do
-	  for d in $add_ons_pfx ''; do
-	    for a in $add_ons_sfx ''; do
-	      try_suffix="$m0$b$v$o$m"
-	      if test -n "$try_suffix"; then
-		try_srcdir="${srcdir}/"
-		case "$d" in
-		/*) try_srcdir= ;;
-		esac
-		try="${d}sysdeps$try_suffix$a"
-		test -n "$enable_debug_configure" &&
-		echo "$0 [DEBUG]: try $try" >&2
-		if test -d "$try_srcdir$try"; then
-		  sysnames="$sysnames $try"
-		  { test -n "$o" || test -n "$b"; } && os_used=t
-		  { test -n "$m" || test -n "$m0"; } && machine_used=t
-		  case x${m0:-$m} in
-		  x*/$submachine) submachine_used=t ;;
-		  esac
-		  if test -n "$d"; then
-		    case "$sysnames_add_ons" in
-		    *" $d "*) ;;
-		    *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
-		    esac
-		  fi
-		fi
-	      fi
-	    done
-	  done
+	  try_suffix="$m0$b$v$o$m"
+	  if test -n "$try_suffix"; then
+	    try_srcdir="${srcdir}/"
+	    try="sysdeps$try_suffix"
+	    test -n "$enable_debug_configure" &&
+	    echo "$0 [DEBUG]: try $try" >&2
+	    if test -d "$try_srcdir$try"; then
+	      sysnames="$sysnames $try"
+	      { test -n "$o" || test -n "$b"; } && os_used=t
+	      { test -n "$m" || test -n "$m0"; } && machine_used=t
+	      case x${m0:-$m} in
+	      x*/$submachine) submachine_used=t ;;
+	      esac
+	    fi
+	  fi
 	done
       done
     done
@@ -894,7 +744,7 @@ done
 
 # If the assembler supports gnu_indirect_function symbol type and the
 # architecture supports multi-arch, we enable multi-arch by default.
-case $sysnames_add_ons$sysnames in
+case $sysnames in
 *"$multi_arch_d"*)
   ;;
 *)
@@ -956,24 +806,15 @@ while test $# -gt 0; do
 	  eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
 	  found=yes
 	fi
-	for d in $add_ons_pfx ''; do
-	  try="${d}sysdeps/$x"
-	  case $d in
-	   /*) try_srcdir= ;;
-	   *) try_srcdir=$srcdir/ ;;
-	  esac
-	  test -n "$enable_debug_configure" &&
-	   echo "[DEBUG]: $name $implies_file $x try($d) {$try_srcdir}$try" >&2
-	  if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
-	  then
-	    eval "${implies_type}=\"\$${implies_type} \$try\""
-	    found=yes
-	    case "$sysnames_add_ons" in
-	    *" $d "*) ;;
-	    *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
-	    esac
-	  fi
-	done
+	try="sysdeps/$x"
+	try_srcdir=$srcdir/
+	test -n "$enable_debug_configure" &&
+	 echo "[DEBUG]: $name $implies_file $x try() {$try_srcdir}$try" >&2
+	if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
+	then
+	  eval "${implies_type}=\"\$${implies_type} \$try\""
+	  found=yes
+	fi
 	if test $found = no; then
 	  AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
 	fi
@@ -1011,61 +852,6 @@ AC_SUBST(sysnames)
 # The other names were emitted during the scan.
 AC_MSG_RESULT($default_sysnames)
 
-# Collect the list of add-ons that supply partial sysdeps trees.
-sysdeps_add_ons=
-for add_on in $add_ons; do
-  case "$add_on" in
-  /*) xsrcdir= ;;
-  *) xsrcdir="$srcdir/" ;;
-  esac
-
-  test -d "$xsrcdir$add_on/sysdeps" || {
-    case "$configured_add_ons " in
-    *" $add_on "*) ;;
-    *|'')
-      AC_MSG_ERROR(add-on $add_on has no configure fragment or sysdeps tree)
-      ;;
-    esac
-    continue
-  }
-
-  sysdeps_add_ons="$sysdeps_add_ons $add_on"
-  case "$sysnames_add_ons" in
-  *" $add_on/ "*) ;;
-  *|'')
-    AC_MSG_WARN(add-on $add_on contributed no sysdeps directories)
-    continue ;;
-  esac
-
-  found=no
-  for d in $sysnames; do
-    case "$d" in
-    $add_on/sysdeps/*) ;;
-    *) continue ;;
-    esac
-    (cd "$xsrcdir$d" && for f in *[[!~]]; do
-       case "$f" in
-       sys|bits)
-	 for ff in $f/*.h; do
-	   test -d "$ff" || { test -e "$ff" && exit 88; }
-	 done
-	 ;;
-       *)
-	 test -d "$f" || { test -e "$f" && exit 88; }
-	 ;;
-       esac
-     done)
-    if test $? -eq 88; then
-      found=yes
-      break
-    fi
-  done
-  if test $found = no; then
-    AC_MSG_WARN(add-on $add_on contributed no useful sysdeps directories)
-  fi
-done
-AC_SUBST(sysdeps_add_ons)
-
 
 ### Locate tools.
 
diff --git a/libidn/configure b/libidn/configure
deleted file mode 100644
index 8195663..0000000
--- a/libidn/configure
+++ /dev/null
@@ -1,16 +0,0 @@
-# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
-
-libc_add_on_canonical=
-
-if test "$shared" = yes; then :
-
-  libc_add_on_subdirs=.
-
-  # Get this defined in config.h for main source code to test.
-  $as_echo "#define HAVE_LIBIDN 1" >>confdefs.h
-
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libidn add-on ignored with --disable-shared" >&5
-$as_echo "$as_me: WARNING: libidn add-on ignored with --disable-shared" >&2;}
-fi
diff --git a/libidn/configure.ac b/libidn/configure.ac
deleted file mode 100644
index 16740ff..0000000
--- a/libidn/configure.ac
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl glibc configure fragment for libidn add-on
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-
-libc_add_on_canonical=
-
-AS_IF([test "$shared" = yes], [
-  libc_add_on_subdirs=.
-
-  # Get this defined in config.h for main source code to test.
-  AC_DEFINE([HAVE_LIBIDN])
-], [AC_MSG_WARN([libidn add-on ignored with --disable-shared])])
diff --git a/manual/Makefile b/manual/Makefile
index 4ed63a8..3b4c7c9 100644
--- a/manual/Makefile
+++ b/manual/Makefile
@@ -40,20 +40,18 @@ chapters = $(addsuffix .texi, \
 		       resource setjmp signal startup process ipc job	\
 		       nss users sysinfo conf crypt debug threads	\
 		       probes tunables)
-add-chapters = $(wildcard $(foreach d, $(add-ons), ../$d/$d.texi))
 appendices = lang.texi header.texi install.texi maint.texi platform.texi \
 	     contrib.texi
 licenses = freemanuals.texi lgpl-2.1.texi fdl-1.3.texi
 
 -include $(objpfx)texis
-$(objpfx)texis: texis.awk $(chapters) $(add-chapters) $(appendices) $(licenses)
+$(objpfx)texis: texis.awk $(chapters) $(appendices) $(licenses)
 	$(make-target-directory)
 	$(AWK) -f $^ > $@.T
 	mv -f $@.T $@
 
-nonexamples = $(filter-out $(add-chapters) %.c.texi, $(texis))
-examples = $(filter-out $(foreach d, $(add-ons), ../$d/%.c.texi), \
-			$(filter %.c.texi, $(texis)))
+nonexamples = $(filter-out %.c.texi, $(texis))
+examples = $(filter %.c.texi, $(texis))
 
 # Generated files directly included from libc.texinfo.
 libc-texi-generated = chapters.texi top-menu.texi dir-add.texi \
@@ -69,7 +67,6 @@ texis-path := $(filter-out $(libc-texi-generated) summary.texi $(examples), \
 chapters.% top-menu.%: libc-texinfo.sh $(texis-path) Makefile
 	AWK=$(AWK) $(SHELL) $< $(objpfx) \
 				'$(chapters)' \
-			       '$(add-chapters)' \
 			       '$(appendices) $(licenses)'
 
 
diff --git a/manual/install.texi b/manual/install.texi
index 35948b1..96b988e 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -13,11 +13,6 @@ Before you do anything else, you should read the FAQ at
 questions and describes problems you may experience with compilation
 and installation.
 
-Features can be added to @theglibc{} via @dfn{add-on} bundles.  These are
-separate tar files, which you unpack into the top level of the source
-tree.  Then you give @code{configure} the @samp{--enable-add-ons} option
-to activate them, and they will be compiled into the library.
-
 You will need recent versions of several GNU tools: definitely GCC and
 GNU Make, and possibly others.  @xref{Tools for Compilation}, below.
 
@@ -95,17 +90,6 @@ occasionally happen in this case.  You can also use this option if you want to
 compile @theglibc{} with a newer set of kernel headers than the ones found in
 @file{/usr/include}.
 
-@item --enable-add-ons[=@var{list}]
-Specify add-on packages to include in the build.  If this option is
-specified with no list, it enables all the add-on packages it finds in
-the main source directory; this is the default behavior.  You may
-specify an explicit list of add-ons to use in @var{list}, separated by
-spaces or commas (if you use spaces, remember to quote them from the
-shell).  Each add-on in @var{list} can be an absolute directory name
-or can be a directory name relative to the main source directory, or
-relative to the build directory (that is, the current working directory).
-For example, @samp{--enable-add-ons=nptl,../glibc-libidn-@var{version}}.
-
 @item --enable-kernel=@var{version}
 This option is currently only useful on @gnulinuxsystems{}.  The
 @var{version} parameter should have the form X.Y.Z and describes the
diff --git a/manual/libc-texinfo.sh b/manual/libc-texinfo.sh
index 4d0a522..aea27f9 100644
--- a/manual/libc-texinfo.sh
+++ b/manual/libc-texinfo.sh
@@ -31,26 +31,11 @@ collect_nodes () {
   $AWK -f tsort.awk | sed 's/_/ /g'
 }
 
-# Emit "@set ADD-ON" for each add-on contributing a manual chapter.
-for addon in $2; do
-  addon=`basename $addon .texi`
-  echo >&3 "@set $addon"
-done
-
 collect_nodes $1 | build_menu
 
-if [ -n "$2" ]; then
-
-  { echo; echo 'Add-ons'; echo; } >&4
-
-  egrep '^(@c )?@node.*Top' `echo $2 /dev/null | tr ' ' '\n' | sort` |
-  cut -d, -f1 | sed 's/@c //;s/@node //' | build_menu
-
-fi
-
 { echo; echo 'Appendices'; echo; } >&4
 
-collect_nodes $3 | build_menu
+collect_nodes $2 | build_menu
 
 exec 3>&- 4>&- 5>&-
 
diff --git a/manual/maint.texi b/manual/maint.texi
index 473ab16..fce06bf 100644
--- a/manual/maint.texi
+++ b/manual/maint.texi
@@ -381,19 +381,10 @@ identical @file{irix6.2} and @file{irix6.3} directories,
 by removing trailing suffixes starting with a period.
 
 As an example, here is the complete list of directories that would be
-tried for the configuration @w{@samp{i686-linux-gnu}} (with the
-@file{crypt} and @file{linuxthreads} add-on):
+tried for the configuration @w{@samp{i686-linux-gnu}}:
 
 @smallexample
 sysdeps/i386/elf
-crypt/sysdeps/unix
-linuxthreads/sysdeps/unix/sysv/linux
-linuxthreads/sysdeps/pthread
-linuxthreads/sysdeps/unix/sysv
-linuxthreads/sysdeps/unix
-linuxthreads/sysdeps/i386/i686
-linuxthreads/sysdeps/i386
-linuxthreads/sysdeps/pthread/no-cmpxchg
 sysdeps/unix/sysv/linux/i386
 sysdeps/unix/sysv/linux
 sysdeps/gnu
diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
index 8ce1c6f..a6c01f9 100755
--- a/scripts/build-many-glibcs.py
+++ b/scripts/build-many-glibcs.py
@@ -1342,7 +1342,6 @@ class Glibc(object):
         cmdlist.create_copy_dir(srcdir, srcdir_copy)
         cfg_cmd = [os.path.join(srcdir_copy, 'configure'),
                    '--prefix=/usr',
-                   '--enable-add-ons',
                    '--enable-profile',
                    '--build=%s' % self.ctx.build_triplet,
                    '--host=%s' % self.triplet,
diff --git a/scripts/gen-sorted.awk b/scripts/gen-sorted.awk
index 922eafc..ecbed9e 100755
--- a/scripts/gen-sorted.awk
+++ b/scripts/gen-sorted.awk
@@ -46,36 +46,10 @@ type == "Subdirs" && NF == 2 && $1 == "inhibit" {
 type == "Subdirs" && thisdir {
   all[cnt++] = thisdir;
 
-  if (FILENAME ~ (srcpfx ? /^\.\.\/sysdeps\// : /^sysdeps\//) \
-      || system("test -d " srcpfx thisdir) == 0) {
-    # This Subdirs file is in the main source tree,
-    # or this subdirectory exists in the main source tree.
-    this_srcdir = srcpfx thisdir
-  }
-  else {
-    # The Subdirs file comes from an add-on that should have the subdirectory.
-    dir = FILENAME;
-    do
-      sub(/\/[^/]+$/, "", dir);
-    while (dir !~ /\/sysdeps$/);
-    sub(/\/sysdeps$/, "", dir);
-    if (system("test -d " dir "/" thisdir) == 0)
-      dir = dir "/" thisdir;
-    else {
-      sub(/\/[^/]+$/, "", dir);
-      if (system("test -d " dir "/" thisdir) == 0)
-        dir = dir "/" thisdir;
-      else {
-	print FILENAME ":" FNR ":", "cannot find", thisdir > "/dev/stderr";
-	exit 2
-      }
-    }
-    file = dir "/Depend";
-    if (srcpfx)
-      sub(/^\.\.\//, "", dir);
-    if (dir !~ /^\/.*$/)
-      dir = "$(..)" dir;
-    print thisdir "-srcdir", ":=", dir;
+  this_srcdir = srcpfx thisdir
+  if (system("test -d " this_srcdir) != 0) {
+    print FILENAME ":" FNR ":", "cannot find", this_srcdir > "/dev/stderr";
+    exit 2
   }
   file = this_srcdir "/Depend";
   if (system("test -f " file) == 0) {
diff --git a/scripts/test-installation.pl b/scripts/test-installation.pl
index c5b9fde..45c666b 100755
--- a/scripts/test-installation.pl
+++ b/scripts/test-installation.pl
@@ -116,14 +116,13 @@ while (<SOVERSIONS>) {
     # Filter out some libraries we don't want to link:
     # - nss_ldap since it's not yet available
     # - libdb1 since it conflicts with libdb
-    # - libnss1_* from glibc-compat add-on
     # - libthread_db since it contains unresolved references
     # - it's just a test NSS module
     # - We don't provide the libgcc so we don't test it
     # - libmvec if it wasn't built
     next if ($build_mathvec == 0 && $name eq "mvec");
     if ($name ne "nss_ldap" && $name ne "db1"
-	&& !($name =~/^nss1_/) && $name ne "thread_db"
+	&& $name ne "thread_db"
 	&& $name ne "nss_test1" && $name ne "libgcc_s") {
       $link_libs .= " -l$name";
       $versions{$name} = $version;
diff --git a/sysdeps/nptl/Makeconfig b/sysdeps/nptl/Makeconfig
index d31b776..3516d51 100644
--- a/sysdeps/nptl/Makeconfig
+++ b/sysdeps/nptl/Makeconfig
@@ -16,7 +16,7 @@
 # License along with the GNU C Library; if not, see
 # <http://www.gnu.org/licenses/>.
 
-# Makeconfig fragment for NPTL add-on.
+# Makeconfig fragment for NPTL.
 # This gets included at the end of the main glibc Makeconfig.
 
 have-thread-library = yes
diff --git a/sysdeps/unix/inet/Subdirs b/sysdeps/unix/inet/Subdirs
index 0a02dd4..1223e43 100644
--- a/sysdeps/unix/inet/Subdirs
+++ b/sysdeps/unix/inet/Subdirs
@@ -6,3 +6,4 @@ nis
 nscd
 nss
 streams
+libidn
diff --git a/sysdeps/unix/inet/configure b/sysdeps/unix/inet/configure
new file mode 100644
index 0000000..fd0afad
--- /dev/null
+++ b/sysdeps/unix/inet/configure
@@ -0,0 +1,9 @@
+# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
+
+if test "$shared" = yes; then :
+
+  # Get this defined in config.h for main source code to test.
+  $as_echo "#define HAVE_LIBIDN 1" >>confdefs.h
+
+
+fi
diff --git a/sysdeps/unix/inet/configure.ac b/sysdeps/unix/inet/configure.ac
new file mode 100644
index 0000000..e9b3443
--- /dev/null
+++ b/sysdeps/unix/inet/configure.ac
@@ -0,0 +1,7 @@
+dnl glibc configure fragment for sysdeps/unix/inet.
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+
+AS_IF([test "$shared" = yes], [
+  # Get this defined in config.h for main source code to test.
+  AC_DEFINE([HAVE_LIBIDN])
+])
