Remove add-ons mechanism

Message ID alpine.DEB.2.20.1709281748010.30081@digraph.polyomino.org.uk
State New, archived
Headers

Commit Message

Joseph Myers Sept. 28, 2017, 5:49 p.m. UTC
  glibc has an add-ons mechanism to allow additional software to be
integrated into the glibc build.  Such add-ons may be within the glibc
source tree, or outside it at a path passed to the --enable-add-ons
configure option.

localedata and crypt were once add-ons, distributed in separate
release tarballs, but long since stopped using that mechanism.
Linuxthreads was always an add-on.  Ports spent some time as an add-on
with separate release tarballs, then was first moved into the glibc
source tree, then had its sysdeps files moved into the main sysdeps
hierarchy so the add-ons mechanism was no longer used.  NPTL spent
some time as an add-on in the main glibc tree before stopping using
the add-on mechanism.  libidn used to have separate release tarballs
but no longer does so, but still uses the add-ons mechanism within the
glibc source tree.  Various other software has supported building with
the add-ons mechanism at times in the past, but I don't think any is
still widely used.

Add-ons involve significant, little-used complexity in the glibc build
system, and make it hard to understand what the space of possible
glibc configurations is.  This patch removes the add-ons mechanism.
libidn is now built via the Subdirs mechanism to cause any
configuration using sysdeps/unix/inet to build libidn; HAVE_LIBIDN
(which effectively means shared libraries are available) is now
defined via sysdeps/unix/inet/configure.  Various references to
add-ons around the source tree are removed (in the case of maint.texi,
the example list of sysdeps directories is still very out of date).

Externally maintained ports should now put their files in the normal
sysdeps directory structure rather than being arranged as add-ons;
they probably need to change e.g. elf.h anyway, rather than actually
being able to work just as a drop-in subtree.  Hurd libpthread should
be arranged similarly to NPTL, so some files might go in a
hurd-pthreads (or similar) top-level directory in glibc, while sysdeps
files should go in the normal sysdeps directory structure (possibly in
hurd or hurd-pthreads subdirectories, just as there are nptl
subdirectories in the sysdeps tree).

Tested for x86_64.  I'm also running build-many-glibcs.py tests.

2017-09-28  Joseph Myers  <joseph@codesourcery.com>

	* configure.ac (--enable-add-ons): Remove option.
	(machine): Do not mention add-ons in comment.
	(LIBC_PRECONFIGURE): Likewise.
	(add_ons): Remove variable and sanity checks and logic to locate
	add-ons.
	(add_ons_automatic): Remove variable.
	(configured_add_ons): Likewise.
	(add_ons_sfx): Likewise.
	(add_ons_pfx): Likewise.
	(add_on_subdirs): Likewise.
	(sysnames_add_ons): Likewise.  Remove loop over add-ons and
	consideration of add-ons in Implies handling.
	(sysdeps_add_ons): Likewise.
	* configure: Regenerated.
	* libidn/configure.ac: Remove.
	* libidn/configure: Likewise.
	* sysdeps/unix/inet/configure.ac: New file.
	* sysdeps/unix/inet/configure: New generated file.
	* sysdeps/unix/inet/Subdirs: Add libidn.
	* Makeconfig (sysdeps-srcdirs): Remove variable.
	(+sysdep_dirs): Do not include $(sysdeps-srcdirs).
	($(common-objpfx)config.status): Do not depend on add-on files.
	($(common-objpfx)shlib-versions.v.i): Do not mention add-ons in
	comment.
	(all-subdirs): Do not include $(add-on-subdirs).
	* Makefile (dist-prepare): Do not use $(sysdeps-add-ons).
	* config.make.in (add-ons): Remove variable.
	(add-on-subdirs): Likewise.
	(sysdeps-add-ons): Likewise.
	* manual/Makefile (add-chapters): Remove.
	($(objpfx)texis): Do not depend on $(add-chapters).
	(nonexamples): Do not handle $(add-chapters).
	(examples): Do not handle $(add-ons).
	(chapters.% top-menu.%): Do not pass '$(add-chapters)' to
	libc-texinfo.sh.
	* manual/install.texi (Installation): Do not mention add-ons.
	(--enable-add-ons): Do not document configure option.
	* INSTALL: Regenerated.
	* manual/libc-texinfo.sh: Do not handle $2 add-ons argument.
	* manual/maint.texi (Hierarchy Conventions): Do not mention
	add-ons.
	* scripts/build-many-glibcs.py (Glibc.build_glibc): Do not use
	--enable-add-ons.
	* scripts/gen-sorted.awk: Do not handle Subdirs files from
	add-ons.
	* scripts/test-installation.pl: Do not handle glibc-compat add-on.
	* sysdeps/nptl/Makeconfig: Do not mention add-ons in comment.
  

Comments

Zack Weinberg Sept. 28, 2017, 10:01 p.m. UTC | #1
On Thu, Sep 28, 2017 at 1:49 PM, Joseph Myers <joseph@codesourcery.com> wrote:
>
> Add-ons involve significant, little-used complexity in the glibc build
> system, and make it hard to understand what the space of possible
> glibc configurations is.  This patch removes the add-ons mechanism.

I don't disagree with this patch exactly, but I was thinking of using
the add-ons mechanism to prototype a CSPRNG addition to glibc and I'd
like to ask how you think that should be done instead (and more
generally, how you think new features that people might want to
experiment with but that are not yet ready for prime time should be
distributed -- branches are Not Great, as one has to keep rebasing
them)

zw
  
Joseph Myers Sept. 28, 2017, 10:38 p.m. UTC | #2
On Thu, 28 Sep 2017, Zack Weinberg wrote:

> On Thu, Sep 28, 2017 at 1:49 PM, Joseph Myers <joseph@codesourcery.com> wrote:
> >
> > Add-ons involve significant, little-used complexity in the glibc build
> > system, and make it hard to understand what the space of possible
> > glibc configurations is.  This patch removes the add-ons mechanism.
> 
> I don't disagree with this patch exactly, but I was thinking of using
> the add-ons mechanism to prototype a CSPRNG addition to glibc and I'd
> like to ask how you think that should be done instead (and more
> generally, how you think new features that people might want to
> experiment with but that are not yet ready for prime time should be
> distributed -- branches are Not Great, as one has to keep rebasing
> them)

I'd expect branches to be used.  That way the feature is in a form 
actually more or less like how it might be added to glibc (including e.g. 
adding interfaces to existing headers if appropriate).  I don't think 
frequent rebasing is really needed.

If you also want the feature to be usable by people with older glibc 
versions without needing to update / rebuild glibc, that would indicate 
having a separate library version of the feature, with some form of 
automation to copy sources from one to the other.
  
Florian Weimer Sept. 29, 2017, 11:04 a.m. UTC | #3
On 09/29/2017 12:01 AM, Zack Weinberg wrote:
> On Thu, Sep 28, 2017 at 1:49 PM, Joseph Myers <joseph@codesourcery.com> wrote:
>>
>> Add-ons involve significant, little-used complexity in the glibc build
>> system, and make it hard to understand what the space of possible
>> glibc configurations is.  This patch removes the add-ons mechanism.
> 
> I don't disagree with this patch exactly, but I was thinking of using
> the add-ons mechanism to prototype a CSPRNG addition to glibc

I've got something towards an implementation of arc4random (not 
certifiable, but it should be unpredictable in practice).

I think I found a way to do full fork protection even without 
MADV_WIPEONFORK, using a global counter in a MAP_SHARED segment. 
Reseeding is still needed to deal with a counter overflow on 32-bit 
architectures, and there is some overhead by the globally shared 
counter, but I think it is superior to all approaches I've seen so far 
(and it does not require a fork handler or a system call for every 
random number generation).

Thanks,
Florian
  
Florian Weimer Sept. 30, 2017, 6:35 a.m. UTC | #4
On 09/28/2017 07:49 PM, Joseph Myers wrote:
> 	* configure.ac (--enable-add-ons): Remove option.

I'm in favor of this change.  I looked at the patch and I don't see 
anything obviously wrong with it.  The removal appears to be complete, 
and the things I tested appear to be working.

Thanks,
Florian
  
Joseph Myers Sept. 30, 2017, 9:42 p.m. UTC | #5
On Sat, 30 Sep 2017, Florian Weimer wrote:

> On 09/28/2017 07:49 PM, Joseph Myers wrote:
> > 	* configure.ac (--enable-add-ons): Remove option.
> 
> I'm in favor of this change.  I looked at the patch and I don't see anything
> obviously wrong with it.  The removal appears to be complete, and the things I
> tested appear to be working.

Does anyone else have any comments on this patch?
  
Andreas K. Huettel Oct. 5, 2017, 10:39 a.m. UTC | #6
Am Donnerstag, 28. September 2017, 19:49:28 CEST schrieb Joseph Myers:
> glibc has an add-ons mechanism to allow additional software to be
> integrated into the glibc build. 
[...]
> libidn used to have separate release tarballs
> but no longer does so, but still uses the add-ons mechanism within the
> glibc source tree.  

http://git.savannah.gnu.org/gitweb/?p=libidn.git;a=shortlog

Doesn't look dead to me; actually the libidn inside glibc looks way outdated 
(before 2012 I think).

See also https://sourceware.org/bugzilla/show_bug.cgi?id=22247
[CVE-2017-14062 : Integer overflow in the decode_digit function in 
puny_decode.c in libidn]

> Various other software has supported building with
> the add-ons mechanism at times in the past, but I don't think any is
> still widely used.

> libidn is now built via the Subdirs mechanism to cause any
> configuration using sysdeps/unix/inet to build libidn; HAVE_LIBIDN
> (which effectively means shared libraries are available) is now
> defined via sysdeps/unix/inet/configure.
  
Florian Weimer Oct. 5, 2017, 11:06 a.m. UTC | #7
On 10/05/2017 12:39 PM, Andreas K. Huettel wrote:
> Am Donnerstag, 28. September 2017, 19:49:28 CEST schrieb Joseph Myers:
>> glibc has an add-ons mechanism to allow additional software to be
>> integrated into the glibc build.
> [...]
>> libidn used to have separate release tarballs
>> but no longer does so, but still uses the add-ons mechanism within the
>> glibc source tree.
> 
> http://git.savannah.gnu.org/gitweb/?p=libidn.git;a=shortlog
> 
> Doesn't look dead to me; actually the libidn inside glibc looks way outdated
> (before 2012 I think).

Joseph means glibc-libidn-2.3.4.tar.bz2 etc. available here:

   <https://ftp.gnu.org/pub/gnu/glibc/>

Their packaging is completely different from the libidn upstream releases.

Thanks,
Florian
  
Joseph Myers Oct. 5, 2017, 12:54 p.m. UTC | #8
On Thu, 5 Oct 2017, Florian Weimer wrote:

> Their packaging is completely different from the libidn upstream releases.

And updating from the libidn upstream releases would be problematic given 
that it's a non-FSF-assigned project that has changed license.  (See 
however the idea of enabling glibc to dlopen unmodified upstream libidn to 
implement the functionality that uses glibc's copy of libidn, as a 
possible replacement of that copy.)
  
Andreas K. Huettel Oct. 5, 2017, 1:16 p.m. UTC | #9
Am Donnerstag, 5. Oktober 2017, 14:54:47 CEST schrieb Joseph Myers:
> On Thu, 5 Oct 2017, Florian Weimer wrote:
> > Their packaging is completely different from the libidn upstream releases.
> 
> And updating from the libidn upstream releases would be problematic given
> that it's a non-FSF-assigned project that has changed license.  (See
> however the idea of enabling glibc to dlopen unmodified upstream libidn to
> implement the functionality that uses glibc's copy of libidn, as a
> possible replacement of that copy.)

I understand...

Mostly out of curiosity, what is the usecase for the glibc-internal libidn?

A quick scan on my laptop (Gentoo Linux) shows no binaries that have 
libcidn.so in NEEDED (but many with the separate libidn.so).
  
Andreas Schwab Oct. 5, 2017, 1:39 p.m. UTC | #10
On Okt 05 2017, "Andreas K. Huettel" <dilfridge@gentoo.org> wrote:

> Mostly out of curiosity, what is the usecase for the glibc-internal libidn?

It is used by the resolver for IDN.

> A quick scan on my laptop (Gentoo Linux) shows no binaries that have 
> libcidn.so in NEEDED (but many with the separate libidn.so).

It's loaded on demand, see libidn/idn-stub.c.

Andreas.
  
Florian Weimer Oct. 5, 2017, 1:40 p.m. UTC | #11
On 10/05/2017 03:16 PM, Andreas K. Huettel wrote:

> Mostly out of curiosity, what is the usecase for the glibc-internal libidn?

It's used by getaddrinfo if the AI_IDN flag is passed.

> A quick scan on my laptop (Gentoo Linux) shows no binaries that have
> libcidn.so in NEEDED (but many with the separate libidn.so).

It's not linked directly.  getaddrinfo loads it on demand.  It's this 
way because no one has changed it yet (I tried, but got sidetracked by 
dynamic linker issues).  We should rewrite the code so that it tries 
(external) libidn2 first, then (external) libidn, and then bails out, 
and remove the actual IDN code from the library.  Some care is necessary 
because we should switch from dlsym to dlvsym for the lookup, for 
forwards compatibility.

Thanks,
Florian
  
Joseph Myers Oct. 5, 2017, 3:58 p.m. UTC | #12
I've now committed this patch.
  
Andreas K. Huettel Oct. 5, 2017, 9:11 p.m. UTC | #13
Am Donnerstag, 5. Oktober 2017, 14:54:47 CEST schrieb Joseph Myers:
> On Thu, 5 Oct 2017, Florian Weimer wrote:
> > Their packaging is completely different from the libidn upstream releases.
> 
> And updating from the libidn upstream releases would be problematic given
> that it's a non-FSF-assigned project that has changed license.

So what strategy is best to short-term fix bugs that have already been 
addressed by libidn upstream?

A quick search finds (but I haven't checked all these in detail yet, nor do I 
claim the list is complete):
CVE-2015-2059, CVE-2015-8948, CVE-2016-6261, CVE-2016-6262, CVE-2016-6263
  
Joseph Myers Oct. 5, 2017, 9:30 p.m. UTC | #14
On Thu, 5 Oct 2017, Andreas K. Huettel wrote:

> Am Donnerstag, 5. Oktober 2017, 14:54:47 CEST schrieb Joseph Myers:
> > On Thu, 5 Oct 2017, Florian Weimer wrote:
> > > Their packaging is completely different from the libidn upstream releases.
> > 
> > And updating from the libidn upstream releases would be problematic given
> > that it's a non-FSF-assigned project that has changed license.
> 
> So what strategy is best to short-term fix bugs that have already been 
> addressed by libidn upstream?

Well, you can, as always, apply changes from whatever source that are not 
legally significant for copyright purposes.
  

Patch

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])
+])