Use sysdeps/x86/tininess.h for i386 and x86_64
[glibc.git] / configure.in
blob928b7b62a954936c1ca761c77915218288b1a61c
1 dnl Process this file with autoconf to produce a configure script.
2 AC_PREREQ(2.53)dnl              dnl Minimum Autoconf version required.
3 AC_INIT([GNU C Library], [(see version.h)], [http://sourceware.org/bugzilla/], [glibc])
4 AC_CONFIG_SRCDIR([include/features.h])
5 AC_CONFIG_HEADERS([config.h])
6 AC_CONFIG_AUX_DIR([scripts])
8 # Glibc should not depend on any header files
9 AC_DEFUN([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
10   [m4_divert_text([DEFAULTS],
11     [ac_includes_default='/* none */'])])
13 dnl This is here so we can set $subdirs directly based on configure fragments.
14 AC_CONFIG_SUBDIRS()
16 AC_CANONICAL_HOST
18 AC_PROG_CC
19 if test $host != $build; then
20   AC_CHECK_PROGS(BUILD_CC, gcc cc)
22 AC_SUBST(cross_compiling)
23 AC_PROG_CPP
24 # We need the C++ compiler only for testing.
25 AC_PROG_CXX
26 AC_CHECK_TOOL(READELF, readelf, false)
28 if test "`cd $srcdir; /bin/pwd`" = "`/bin/pwd`"; then
29   AC_MSG_ERROR([you must configure in a separate build directory])
32 # This will get text that should go into config.make.
33 config_vars=
35 # Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
36 AC_ARG_WITH([gd],
37             AC_HELP_STRING([--with-gd=DIR],
38                            [find libgd include dir and library with prefix DIR]),
39             [dnl
40 case "$with_gd" in
41 yes|''|no) ;;
42 *) libgd_include="-I$withval/include"
43    libgd_ldflags="-L$withval/lib" ;;
44 esac
46 AC_ARG_WITH([gd-include],
47             AC_HELP_STRING([--with-gd-include=DIR],
48                            [find libgd include files in DIR]),
49             [dnl
50 case "$with_gd_include" in
51 ''|no) ;;
52 *) libgd_include="-I$withval" ;;
53 esac
55 AC_ARG_WITH([gd-lib],
56             AC_HELP_STRING([--with-gd-lib=DIR],
57                            [find libgd library files in DIR]),
58             [dnl
59 case "$with_gd_lib" in
60 ''|no) ;;
61 *) libgd_ldflags="-L$withval" ;;
62 esac
65 if test -n "$libgd_include"; then
66   config_vars="$config_vars
67 CFLAGS-memusagestat.c = $libgd_include"
69 if test -n "$libgd_ldflags"; then
70   config_vars="$config_vars
71 libgd-LDFLAGS = $libgd_ldflags"
74 dnl Arguments to specify presence of other packages/features.
75 AC_ARG_WITH([fp],
76             AC_HELP_STRING([--with-fp],
77                            [if using floating-point hardware @<:@default=yes@:>@]),
78             [with_fp=$withval],
79             [with_fp=yes])
80 AC_SUBST(with_fp)
81 AC_ARG_WITH([binutils],
82             AC_HELP_STRING([--with-binutils=PATH],
83                            [specify location of binutils (as and ld)]),
84             [path_binutils=$withval],
85             [path_binutils=''])
86 AC_ARG_WITH([selinux],
87             AC_HELP_STRING([--with-selinux],
88                            [if building with SELinux support]),
89             [with_selinux=$withval],
90             [with_selinux=auto])
92 AC_ARG_WITH([headers],
93             AC_HELP_STRING([--with-headers=PATH],
94                            [location of system headers to use
95                             (for example /usr/src/linux/include)
96                             @<:@default=compiler default@:>@]),
97             [sysheaders=$withval],
98             [sysheaders=''])
99 AC_SUBST(sysheaders)
101 AC_SUBST(use_default_link)
102 AC_ARG_WITH([default-link],
103             AC_HELP_STRING([--with-default-link],
104                            [do not use explicit linker scripts]),
105             [use_default_link=$withval],
106             [use_default_link=default])
108 AC_ARG_ENABLE([sanity-checks],
109               AC_HELP_STRING([--disable-sanity-checks],
110                              [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
111               [enable_sanity=$enableval],
112               [enable_sanity=yes])
114 AC_ARG_ENABLE([shared],
115               AC_HELP_STRING([--enable-shared],
116                              [build shared library @<:@default=yes if GNU ld@:>@]),
117               [shared=$enableval],
118               [shared=yes])
119 AC_ARG_ENABLE([profile],
120               AC_HELP_STRING([--enable-profile],
121                              [build profiled library @<:@default=no@:>@]),
122               [profile=$enableval],
123               [profile=no])
124 AC_ARG_ENABLE([versioning],
125               AC_HELP_STRING([--disable-versioning],
126                              [do not include versioning information in the library objects @<:@default=yes if supported@:>@]),
127               [enable_versioning=$enableval],
128               [enable_versioning=yes])
130 AC_ARG_ENABLE([oldest-abi],
131               AC_HELP_STRING([--enable-oldest-abi=ABI],
132                              [configure the oldest ABI supported @<:@e.g. 2.2@:>@ @<:@default=glibc default@:>@]),
133               [oldest_abi=$enableval],
134               [oldest_abi=no])
135 if test "$oldest_abi" = yes || test "$oldest_abi" = no; then
136   oldest_abi=default
137 else
138   AC_DEFINE_UNQUOTED(GLIBC_OLDEST_ABI, "$oldest_abi")
140 AC_SUBST(oldest_abi)
142 AC_ARG_ENABLE([stackguard-randomization],
143               AC_HELP_STRING([--enable-stackguard-randomization],
144                              [initialize __stack_chk_guard canary with a random number at program start]),
145               [enable_stackguard_randomize=$enableval],
146               [enable_stackguard_randomize=no])
147 if test "$enable_stackguard_randomize" = yes; then
148   AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
151 dnl Generic infrastructure for drop-in additions to libc.
152 AC_ARG_ENABLE([add-ons],
153               AC_HELP_STRING([--enable-add-ons@<:@=DIRS...@:>@],
154                              [configure and build add-ons in DIR1,DIR2,...
155                               search for add-ons if no parameter given]),
156                              , [enable_add_ons=yes])
158 AC_ARG_ENABLE([hidden-plt],
159               AC_HELP_STRING([--disable-hidden-plt],
160                              [do not hide internal function calls to avoid PLT]),
161               [hidden=$enableval],
162               [hidden=yes])
163 if test "x$hidden" = xno; then
164   AC_DEFINE(NO_HIDDEN)
167 AC_ARG_ENABLE([bind-now],
168               AC_HELP_STRING([--enable-bind-now],
169                              [disable lazy relocations in DSOs]),
170               [bindnow=$enableval],
171               [bindnow=no])
172 AC_SUBST(bindnow)
174 dnl On some platforms we cannot use dynamic loading.  We must provide
175 dnl static NSS modules.
176 AC_ARG_ENABLE([static-nss],
177               AC_HELP_STRING([--enable-static-nss],
178                              [build static NSS modules @<:@default=no@:>@]),
179               [static_nss=$enableval],
180               [static_nss=no])
181 dnl Enable static NSS also if we build no shared objects.
182 if test x"$static_nss" = xyes || test x"$shared" = xno; then
183   static_nss=yes
184   AC_DEFINE(DO_STATIC_NSS)
187 AC_ARG_ENABLE([force-install],
188               AC_HELP_STRING([--disable-force-install],
189                              [don't force installation of files from this package, even if they are older than the installed files]),
190               [force_install=$enableval],
191               [force_install=yes])
192 AC_SUBST(force_install)
194 dnl On some platforms we allow dropping compatibility with all kernel
195 dnl versions.
196 AC_ARG_ENABLE([kernel],
197               AC_HELP_STRING([--enable-kernel=VERSION],
198                              [compile for compatibility with kernel not older than VERSION]),
199               [minimum_kernel=$enableval],
200               [])
201 dnl Prevent unreasonable values.
202 if test "$minimum_kernel" = yes || test "$minimum_kernel" = no; then
203   # Better nothing than this.
204   minimum_kernel=""
205 else
206   if test "$minimum_kernel" = current; then
207     minimum_kernel=`uname -r 2>/dev/null` || minimum_kernel=
208   fi
211 dnl For the development we sometimes want gcc to issue even more warnings.
212 dnl This is not the default since many of the extra warnings are not
213 dnl appropriate.
214 AC_ARG_ENABLE([all-warnings],
215               AC_HELP_STRING([--enable-all-warnings],
216                              [enable all useful warnings gcc can issue]),
217               [all_warnings=$enableval],
218               [])
219 AC_SUBST(all_warnings)
221 AC_ARG_ENABLE([multi-arch],
222               AC_HELP_STRING([--enable-multi-arch],
223                              [enable single DSO with optimizations for multiple architectures]),
224               [multi_arch=$enableval],
225               [multi_arch=default])
227 AC_ARG_ENABLE([nss-crypt],
228               AC_HELP_STRING([--enable-nss-crypt],
229                              [enable libcrypt to use nss]),
230               [nss_crypt=$enableval],
231               [nss_crypt=no])
232 if test x$nss_crypt = xyes; then
233   nss_includes=-I$(nss-config --includedir 2>/dev/null)
234   if test $? -ne 0; then
235     AC_MSG_ERROR([cannot find include directory with nss-config])
236   fi
237   old_CFLAGS="$CFLAGS"
238   CFLAGS="$CFLAGS $nss_includes"
239   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
240 #include <hasht.h>
241 #include <nsslowhash.h>
242 void f (void) { NSSLOW_Init (); }])],
243              libc_cv_nss_crypt=yes,
244              AC_MSG_ERROR([
245 cannot find NSS headers with lowlevel hash function interfaces]))
246   old_LIBS="$LIBS"
247   LIBS="$LIBS -lfreebl3"
248   AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
249 #include <hasht.h>
250 #include <nsslowhash.h>],
251                                   [NSSLOW_Init();])],
252                  libc_cv_nss_crypt=yes,
253                  AC_MSG_ERROR([
254 cannot link program using lowlevel NSS hash functions]))
255   CFLAGS="$old_CFLAGS"
256   LIBS="$old_LIBS"
257 else
258   libc_cv_nss_crypt=no
260 AC_SUBST(libc_cv_nss_crypt)
263 AC_ARG_ENABLE([obsolete-rpc],
264               AC_HELP_STRING([--enable-obsolete-rpc],
265                              [build and install the obsolete RPC code for link-time usage]),
266               [link_obsolete_rpc=$enableval],
267               [link_obsolete_rpc=no])
268 AC_SUBST(link_obsolete_rpc)
270 if test "$link_obsolete_rpc" = yes; then
271   AC_DEFINE(LINK_OBSOLETE_RPC)
274 AC_ARG_ENABLE([systemtap],
275               [AS_HELP_STRING([--enable-systemtap],
276                [enable systemtap static probe points @<:@default=no@:>@])],
277               [systemtap=$enableval],
278               [systemtap=no])
279 if test "x$systemtap" != xno; then
280   AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
281   old_CFLAGS="$CFLAGS"
282   CFLAGS="-std=gnu99 $CFLAGS"
283   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
284 void foo (int i, void *p)
286   asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
287        :: STAP_PROBE_ASM_OPERANDS (2, i, p));
288 }]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])
289   CFLAGS="$old_CFLAGS"])
290   if test $libc_cv_sdt = yes; then
291     AC_DEFINE([USE_STAP_PROBE])
292   elif test "x$systemtap" != xauto; then
293     AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
294   fi
297 AC_ARG_ENABLE([build-nscd],
298               [AS_HELP_STRING([--disable-build-nscd],
299                [disable building and installing the nscd daemon])],
300               [build_nscd=$enableval],
301               [build_nscd=default])
302 AC_SUBST(build_nscd)
304 # Note the use of $use_nscd is near the bottom of the file.
305 AC_ARG_ENABLE([nscd],
306               [AS_HELP_STRING([--disable-nscd],
307                [library functions will not contact the nscd daemon])],
308               [use_nscd=$enableval],
309               [use_nscd=yes])
311 # The way shlib-versions is used to generate soversions.mk uses a
312 # fairly simplistic model for name recognition that can't distinguish
313 # i486-pc-linux-gnu fully from i486-pc-gnu.  So we mutate a $host_os
314 # of `gnu*' here to be `gnu-gnu*' just so that shlib-versions can
315 # tell.  This doesn't get used much beyond that, so it's fairly safe.
316 case "$host_os" in
317 linux*)
318   ;;
319 gnu*)
320   host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
321   ;;
322 esac
324 # We keep the original values in `$config_*' and never modify them, so we
325 # can write them unchanged into config.make.  Everything else uses
326 # $machine, $vendor, and $os, and changes them whenever convenient.
327 config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
329 # Don't allow vendor == "unknown"
330 test "$config_vendor" = unknown && config_vendor=
331 config_os="`echo $config_os | sed 's/^unknown-//'`"
333 # Some configurations imply other options.
334 elf=yes
336 # The configure fragment of an add-on port can modify these to supplement
337 # or override the table in the case statement below.  No fragment should
338 # ever change the config_* variables, however.
339 machine=$config_machine
340 vendor=$config_vendor
341 os=$config_os
342 base_os=''
344 # config.guess on some IBM machines says `rs6000' instead of `powerpc'.
345 # Unify this here.
346 if test "$machine" = rs6000; then
347   machine="powerpc"
350 # Braindead PowerPC box with absolutely no FPU.
351 case "$machine-$host_os" in
352   powerpc*-*soft)
353     with_fp=no
354     ;;
355 esac
357 submachine=
358 AC_ARG_WITH([cpu],
359             AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
360             [dnl
361   case "$withval" in
362   yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
363   no) ;;
364   *) submachine="$withval" ;;
365   esac
368 dnl Let sysdeps/*/preconfigure act here, like they can in add-ons.
369 LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
371 # An add-on can set this when it wants to disable the sanity check below.
372 libc_config_ok=no
374 dnl Having this here, though empty, makes sure that if add-ons' fragments
375 dnl do AC_CONFIG_SUBDIRS([some-dir]), which just sets $subdirs, then
376 dnl our AC_OUTPUT will actually use it.
377 AC_CONFIG_SUBDIRS()
379 case "$enable_add_ons" in
380 ''|no) add_ons= ;;
381 yes|'*')
382  add_ons=`cd $srcdir && ls -d 2> /dev/null */configure */sysdeps |
383           sed 's@/[[^/]]*$@@' | sort | uniq`
384          add_ons_automatic=yes
385          ;;
386 *) add_ons=`echo "$enable_add_ons" | sed 's/,/ /g'`
387        add_ons_automatic=no ;;
388 esac
390 configured_add_ons=
391 add_ons_sfx=
392 add_ons_pfx=
393 if test x"$add_ons" != x; then
394   for f in $add_ons; do
395     # Some sanity checks
396     case "$f" in
397     crypt)
398       AC_MSG_ERROR([
399 *** It seems that you're using an old \`crypt' add-on.  crypt is now
400 *** part of glibc and using the old add-on will not work with this
401 *** release.  Start again with fresh sources and without the old
402 *** \`crypt' add-on.])
403     ;;
404     localedata)
405       AC_MSG_ERROR([
406 *** It seems that you're using an old \`localedata' add-on.  localedata
407 *** is now part of glibc and using the old add-on will not work with
408 *** this release.  Start again with fresh sources and without the old
409 *** \`localedata' add-on.])
410     ;;
411     esac
412   done
414   # Now source each add-on's configure fragment.
415   # The fragments can use $srcdir/$libc_add_on to find themselves,
416   # and test $add_ons_automatic to see if they were explicitly requested.
417   # A fragment can clear (or even change) $libc_add_on to affect
418   # whether it goes into the list to be actually used in the build.
419   use_add_ons=
420   for libc_add_on in $add_ons; do
421     # Test whether such a directory really exists.
422     # It can be absolute, or relative to $srcdir, or relative to the build dir.
423     case "$libc_add_on" in
424     /*)
425       libc_add_on_srcdir=$libc_add_on
426       ;;
427     *)
428       test -d "$srcdir/$libc_add_on" || {
429         if test -d "$libc_add_on"; then
430           libc_add_on="`pwd`/$libc_add_on"
431         else
432           AC_MSG_ERROR(add-on directory \"$libc_add_on\" does not exist)
433         fi
434       }
435       libc_add_on_srcdir=$srcdir/$libc_add_on
436       ;;
437     esac
439     libc_add_on_frag=$libc_add_on_srcdir/configure
440     libc_add_on_canonical=
441     libc_add_on_config_subdirs=
442     if test -r "$libc_add_on_frag"; then
443       AC_MSG_NOTICE(running configure fragment for add-on $libc_add_on)
444       libc_add_on_canonical=unknown
445       libc_add_on_subdirs=
446       . "$libc_add_on_frag"
447       test -z "$libc_add_on" || {
448         configured_add_ons="$configured_add_ons $libc_add_on"
449         if test "x$libc_add_on_canonical" = xunknown; then
450           AC_MSG_ERROR(fragment must set \$libc_add_on_canonical)
451         fi
452         for d in $libc_add_on_subdirs; do
453           case "$libc_add_on" in
454           /*) subdir_srcdir="$libc_add_on" ;;
455           *) subdir_srcdir="\$(..)$libc_add_on" ;;
456           esac
457           case "$d" in
458           .)
459             d="${libc_add_on_canonical:-$libc_add_on}"
460             ;;
461           /*)
462             subdir_srcdir="$d"
463             ;;
464           *)
465             subdir_srcdir="$subdir_srcdir/$d"
466             ;;
467           esac
468           d=`echo "$d" | sed 's@/*$@@;s@^.*/@@'`
469           add_on_subdirs="$add_on_subdirs $d"
470           test "$subdir_srcdir" = "\$(..)$d" || config_vars="$config_vars
471 $d-srcdir = $subdir_srcdir"
472         done
473         for d in $libc_add_on_config_subdirs; do
474           case "$d" in
475           /*) AC_MSG_ERROR(dnl
476 fragment uses absolute path in \$libc_add_on_config_subdirs) ;;
477           esac
478           if test ! -d "$libc_add_on_srcdir/$d"; then
479             AC_MSG_ERROR(fragment wants to configure missing directory $d)
480           fi
481           case "$libc_add_on" in
482           /*) AC_MSG_ERROR(dnl
483 relative path required for add-on using \$libc_add_on_config_subdirs) ;;
484           esac
485           subdirs="$subdirs $libc_add_on/$d"
486         done
487       }
488     fi
489     if test -n "$libc_add_on"; then
490       LIBC_PRECONFIGURE([$libc_add_on_srcdir], [add-on $libc_add_on for])
491       use_add_ons="$use_add_ons $libc_add_on"
492       add_ons_pfx="$add_ons_pfx $libc_add_on/"
493       test -z "$libc_add_on_canonical" ||
494       add_ons_sfx="$add_ons_sfx /$libc_add_on_canonical"
495     fi
496   done
497   # Use echo to strip excess whitespace.
498   add_ons="`echo $use_add_ons`"
500 AC_SUBST(add_ons)
501 AC_SUBST(add_on_subdirs)
505 ### I put this here to prevent those annoying emails from people who cannot
506 ### read and try to compile glibc on unsupported platforms.  --drepper
508 ### By using the undocumented --enable-hacker-mode option for configure
509 ### one can skip this test to make the configuration not fail for unsupported
510 ### platforms.
512 if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
513   case "$machine-$host_os" in
514   *-linux* | *-gnu*)
515     ;;
516   *)
517     echo "*** The GNU C library is currently not available for this platform."
518     echo "*** So far nobody cared to port it and if there is no volunteer it"
519     echo "*** might never happen.  So, if you have interest to see glibc on"
520     echo "*** this platform visit"
521     echo "***   http://www.gnu.org/software/libc/porting.html"
522     echo "*** and join the group of porters"
523     exit 1
524     ;;
525   esac
528 dnl We need to use [ and ] for other purposes for a while now.
529 changequote(,)dnl
530 # Expand the configuration machine name into a subdirectory by architecture
531 # type and particular chip.  If an add-on configure fragment already set
532 # base_machine, we don't change it.
533 test -n "$base_machine" || case "$machine" in
534 i[34567]86)     base_machine=i386 machine=i386/$machine ;;
535 powerpc)        base_machine=powerpc machine=powerpc/powerpc32 ;;
536 powerpc64)      base_machine=powerpc machine=powerpc/powerpc64 ;;
537 s390)           base_machine=s390 machine=s390/s390-32 ;;
538 s390x)          base_machine=s390 machine=s390/s390-64 ;;
539 sh3*)           base_machine=sh machine=sh/sh3 ;;
540 sh4*)           base_machine=sh machine=sh/sh4 ;;
541 sparc | sparcv[67])
542                 base_machine=sparc machine=sparc/sparc32 ;;
543 sparcv8 | supersparc | hypersparc)
544                 base_machine=sparc machine=sparc/sparc32/sparcv8 ;;
545 sparcv8plus | sparcv8plusa | sparcv9)
546                 base_machine=sparc machine=sparc/sparc32/sparcv9 ;;
547 sparcv8plusb | sparcv9b)
548                 base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9b ;;
549 sparcv9v)
550                 base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9v ;;
551 sparcv9v2)
552                 base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9v2 ;;
553 sparc64)
554                 base_machine=sparc machine=sparc/sparc64 ;;
555 sparc64b)
556                 base_machine=sparc machine=sparc/sparc64/sparcv9b ;;
557 sparc64v)
558                 base_machine=sparc machine=sparc/sparc64/sparcv9v ;;
559 sparc64v2)
560                 base_machine=sparc machine=sparc/sparc64/sparcv9v2 ;;
561 *)              base_machine=$machine ;;
562 esac
563 changequote([,])dnl
564 AC_SUBST(base_machine)
566 if test "$base_machine" = "i386"; then
567   AC_DEFINE(USE_REGPARMS)
570 # For the multi-arch option we need support in the assembler & linker.
571 AC_CACHE_CHECK([for assembler and linker STT_GNU_IFUNC support],
572                libc_cv_ld_gnu_indirect_function, [dnl
573 cat > conftest.s <<EOF
574 .type foo,%gnu_indirect_function
575 foo:
576 .globl _start
577 _start:
578 .globl __start
579 __start:
580 .data
581 .long foo
583 libc_cv_ld_gnu_indirect_function=no
584 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
585             -nostartfiles -nostdlib \
586             -o conftest conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
587   # Do a link to see if the backend supports IFUNC relocs.
588   $READELF -r conftest 1>&AS_MESSAGE_LOG_FD
589   LC_ALL=C $READELF -r conftest | grep 'no relocations' >/dev/null || {
590     libc_cv_ld_gnu_indirect_function=yes
591   }
593 rm -f conftest*])
595 AC_MSG_CHECKING(whether .text pseudo-op must be used)
596 AC_CACHE_VAL(libc_cv_dot_text, [dnl
597 cat > conftest.s <<EOF
598 .text
600 libc_cv_dot_text=
601 if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
602   libc_cv_dot_text=.text
604 rm -f conftest*])
605 if test -z "$libc_cv_dot_text"; then
606   AC_MSG_RESULT(no)
607 else
608   AC_MSG_RESULT(yes)
611 if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
612   if test x"$multi_arch" = xyes; then
613     AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
614   else
615     multi_arch=no
616   fi
618 if test x"$multi_arch" != xno; then
619   multi_arch_d=/multiarch
622 # Compute the list of sysdep directories for this configuration.
623 # This can take a while to compute.
624 sysdep_dir=$srcdir/sysdeps
625 AC_MSG_CHECKING(sysdep dirs)
626 dnl We need to use [ and ] for other purposes for a while now.
627 changequote(,)dnl
628 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
629 os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
631 test "x$base_os" != x || case "$os" in
632 gnu*)
633   base_os=mach/hurd ;;
634 linux*)
635   base_os=unix/sysv ;;
636 esac
638 # For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
639 tail=$os
640 ostry=$os
641 while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
642   ostry="$ostry /$o"
643   tail=$o
644 done
645 o=`echo $tail | sed 's/[0-9]*$//'`
646 if test $o != $tail; then
647   ostry="$ostry /$o"
649 # For linux-gnu, try linux-gnu, then linux.
650 o=`echo $tail | sed 's/-.*$//'`
651 if test $o != $tail; then
652   ostry="$ostry /$o"
655 # For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
656 base=
657 tail=$base_os
658 while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
659   set $b
660   base="$base /$1"
661   tail="$2"
662 done
664 # For sparc/sparc32, try sparc/sparc32 and then sparc.
665 mach=
666 tail=$machine${submachine:+/$submachine}
667 while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
668   set $m
669   # Prepend the machine's FPU directory unless --without-fp.
670   if test "$with_fp" = yes; then
671     mach="$mach /$1/fpu"
672   else
673     mach="$mach /$1/nofpu"
674   fi
675   mach="$mach /$1"
676   tail="$2"
677 done
679 dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
680 changequote([,])dnl
682 # Find what sysdep directories exist.
683 sysnames_add_ons=
684 sysnames=
685 for b in $base ''; do
686   for m0 in $mach ''; do
687     for v in /$vendor ''; do
688       test "$v" = / && continue
689       for o in /$ostry ''; do
690         test "$o" = / && continue
691         for m in $multi_arch_d $mach ''; do
692           for d in $add_ons_pfx ''; do
693             for a in $add_ons_sfx ''; do
694               if test -n "$m0$m0sub$b$v$o$m$msub"; then
695                 try_srcdir="${srcdir}/"
696                 case "$d" in
697                 /*) try_srcdir= ;;
698                 esac
699                 try="${d}sysdeps$m0$m0sub$b$v$o$m$msub$a"
700                 test -n "$enable_debug_configure" &&
701                 echo "$0 [DEBUG]: try $try" >&2
702                 if test -d "$try_srcdir$try"; then
703                   sysnames="$sysnames $try"
704                   { test -n "$o" || test -n "$b"; } && os_used=t
705                   { test -n "$m" || test -n "$m0"; } && machine_used=t
706                   case x${m0:-$m} in
707                   x*/$submachine) submachine_used=t ;;
708                   esac
709                   if test -n "$d"; then
710                     case "$sysnames_add_ons" in
711                     *" $d "*) ;;
712                     *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
713                     esac
714                   fi
715                 fi
716               fi
717             done
718           done
719         done
720       done
721     done
722   done
723 done
725 # If the assembler supports gnu_indirect_function symbol type and the
726 # architecture supports multi-arch, we enable multi-arch by default.
727 case $sysnames_add_ons$sysnames in
728 *"$multi_arch_d"*)
729   ;;
731   test x"$multi_arch" = xdefault && multi_arch=no
732   ;;
733 esac
734 if test x"$multi_arch" != xno; then
735   AC_DEFINE(USE_MULTIARCH)
737 AC_SUBST(multi_arch)
739 if test -z "$os_used" && test "$os" != none; then
740   AC_MSG_ERROR(Operating system $os is not supported.)
742 if test -z "$machine_used" && test "$machine" != none; then
743   AC_MSG_ERROR(The $machine is not supported.)
745 if test -z "$submachine_used" && test -n "$submachine"; then
746   AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
748 AC_SUBST(submachine)
750 # We have now validated the configuration.
752 # Expand the list of system names into a full list of directories
753 # from each element's parent name and Implies file (if present).
754 set $sysnames
755 names=
756 while test $# -gt 0; do
757   name=$1
758   shift
760   case " $names " in *" $name "*)
761     # Already in the list.
762     continue
763   esac
765   # Report each name as we discover it, so there is no long pause in output.
766   echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
768   name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
770   case $name in
771     /*) xsrcdir= ;;
772     *)  xsrcdir=$srcdir/ ;;
773   esac
774   test -n "$enable_debug_configure" &&
775   echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
777   for implies_file in Implies Implies-before Implies-after; do
778     implies_type=`echo $implies_file | sed s/-/_/`
779     eval ${implies_type}=
780     if test -f $xsrcdir$name/$implies_file; then
781       # Collect more names from the `Implies' file (removing comments).
782       implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
783       for x in $implied_candidate; do
784         found=no
785         if test -d $xsrcdir$name_base/$x; then
786           eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
787           found=yes
788         fi
789         for d in $add_ons_pfx ''; do
790           try="${d}sysdeps/$x"
791           case $d in
792            /*) try_srcdir= ;;
793            *) try_srcdir=$srcdir/ ;;
794           esac
795           test -n "$enable_debug_configure" &&
796            echo "[DEBUG]: $name $implies_file $x try($d) {$try_srcdir}$try" >&2
797           if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
798           then
799             eval "${implies_type}=\"\$${implies_type} \$try\""
800             found=yes
801             case "$sysnames_add_ons" in
802             *" $d "*) ;;
803             *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
804             esac
805           fi
806         done
807         if test $found = no; then
808           AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
809         fi
810       done
811     fi
812   done
814   # Add NAME to the list of names.
815   names="$names $name"
817   # Find the parent of NAME, using the empty string if it has none.
818 changequote(,)dnl
819   parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
820 changequote([,])dnl
822   test -n "$enable_debug_configure" &&
823     echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
824 Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
826   # Add the names implied by NAME, and NAME's parent (if it has one), to
827   # the list of names to be processed (the argument list).  We prepend the
828   # implied names to the list and append the parent.  We want implied
829   # directories to come before further directories inferred from the
830   # configuration components; this ensures that for sysv4, unix/common
831   # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
832   # after sysv4).
833   sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
834   test -n "$sysnames" && set $sysnames
835 done
837 # Add the default directories.
838 default_sysnames="sysdeps/generic"
839 sysnames="$names $default_sysnames"
840 AC_SUBST(sysnames)
841 # The other names were emitted during the scan.
842 AC_MSG_RESULT($default_sysnames)
844 # Collect the list of add-ons that supply partial sysdeps trees.
845 sysdeps_add_ons=
846 for add_on in $add_ons; do
847   case "$add_on" in
848   /*) xsrcdir= ;;
849   *) xsrcdir="$srcdir/" ;;
850   esac
852   test -d "$xsrcdir$add_on/sysdeps" || {
853     case "$configured_add_ons " in
854     *" $add_on "*) ;;
855     *|'')
856       AC_MSG_ERROR(add-on $add_on has no configure fragment or sysdeps tree)
857       ;;
858     esac
859     continue
860   }
862   sysdeps_add_ons="$sysdeps_add_ons $add_on"
863   case "$sysnames_add_ons" in
864   *" $add_on/ "*) ;;
865   *|'')
866     AC_MSG_WARN(add-on $add_on contributed no sysdeps directories)
867     continue ;;
868   esac
870   found=no
871   for d in $sysnames; do
872     case "$d" in
873     $add_on/sysdeps/*) ;;
874     *) continue ;;
875     esac
876     (cd "$xsrcdir$d" && for f in *[[!~]]; do
877        case "$f" in
878        sys|bits)
879          for ff in $f/*.h; do
880            test -d "$ff" || { test -e "$ff" && exit 88; }
881          done
882          ;;
883        *)
884          test -d "$f" || { test -e "$f" && exit 88; }
885          ;;
886        esac
887      done)
888     if test $? -eq 88; then
889       found=yes
890       break
891     fi
892   done
893   if test $found = no; then
894     AC_MSG_WARN(add-on $add_on contributed no useful sysdeps directories)
895   fi
896 done
897 AC_SUBST(sysdeps_add_ons)
900 ### Locate tools.
902 AC_PROG_INSTALL
903 if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
904   # The makefiles need to use a different form to find it in $srcdir.
905   INSTALL='\$(..)./scripts/install-sh -c'
907 AC_PROG_LN_S
909 LIBC_PROG_BINUTILS
910 AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in
912 # Accept binutils 2.20 or newer.
913 AC_CHECK_PROG_VER(AS, $AS, --version,
914                   [GNU assembler.* \([0-9]*\.[0-9.]*\)],
915                   [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
916 AC_CHECK_PROG_VER(LD, $LD, --version,
917                   [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
918                   [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], LD=: critic_missing="$critic_missing ld")
920 # These programs are version sensitive.
921 AC_CHECK_TOOL_PREFIX
922 AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
923   [version \([egcygnustpi-]*[0-9.]*\)], [4.[3-9].* | 4.[1-9][0-9].* | [5-9].* ],
924   critic_missing="$critic_missing gcc")
925 AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
926   [GNU Make[^0-9]*\([0-9][0-9.]*\)],
927   [3.79* | 3.[89]*], critic_missing="$critic_missing make")
929 AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
930   [GNU gettext.* \([0-9]*\.[0-9.]*\)],
931   [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
932   MSGFMT=: aux_missing="$aux_missing msgfmt")
933 AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
934   [GNU texinfo.* \([0-9][0-9.]*\)],
935   [4.[5-9]*|4.[1-9][0-9]*|[5-9].*],
936   MAKEINFO=: aux_missing="$aux_missing makeinfo")
937 AC_CHECK_PROG_VER(SED, sed, --version,
938   [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
939   [3.0[2-9]*|3.[1-9]*|[4-9]*],
940   SED=: aux_missing="$aux_missing sed")
941 AC_CHECK_PROG_VER(AWK, gawk, --version,
942   [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
943   [[3-9].*], critic_missing="$critic_missing gawk")
945 AC_CHECK_TOOL(NM, nm, false)
947 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
948 case "x$AUTOCONF" in
949 xno|x|x:) AUTOCONF=no ;;
951   AC_CACHE_CHECK(dnl
952 whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
953   if (cd $srcdir; $AUTOCONF $ACFLAGS configure.in > /dev/null 2>&1); then
954     libc_cv_autoconf_works=yes
955   else
956     libc_cv_autoconf_works=no
957   fi])
958   test $libc_cv_autoconf_works = yes || AUTOCONF=no
959   ;;
960 esac
961 if test "x$AUTOCONF" = xno; then
962   aux_missing="$aux_missing autoconf"
965 test -n "$critic_missing" && AC_MSG_ERROR([
966 *** These critical programs are missing or too old:$critic_missing
967 *** Check the INSTALL file for required versions.])
969 test -n "$aux_missing" && AC_MSG_WARN([
970 *** These auxiliary programs are missing or incompatible versions:$aux_missing
971 *** some features will be disabled.
972 *** Check the INSTALL file for required versions.])
974 # if using special system headers, find out the compiler's sekrit
975 # header directory and add that to the list.  NOTE: Only does the right
976 # thing on a system that doesn't need fixincludes.  (Not presently a problem.)
977 if test -n "$sysheaders"; then
978   SYSINCLUDES=-nostdinc
979   for d in include include-fixed; do
980     i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
981     SYSINCLUDES="$SYSINCLUDES -isystem $i"
982   done
983   SYSINCLUDES="$SYSINCLUDES \
984 -isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
985   if test -n "$CXX"; then
986     CXX_SYSINCLUDES=
987     cxxmachine=`$CXX -dumpmachine 2>&AS_MESSAGE_LOG_FD` &&
988     cxxheaders=`$CXX -v -S -x c++ /dev/null -o /dev/null 2>&1 \
989         | sed -n -e '1,/#include/d' -e '/^ \//{p;q;}' | sed 's/ //'`
990     test "x$cxxheaders" != x && test "x$i" != "x$cxxheaders" &&
991     CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders \
992 -isystem $cxxheaders/$cxxmachine -isystem $cxxheaders/backward"
993   fi
995 AC_SUBST(SYSINCLUDES)
996 AC_SUBST(CXX_SYSINCLUDES)
998 # Test if LD_LIBRARY_PATH contains the notation for the current directory
999 # since this would lead to problems installing/building glibc.
1000 # LD_LIBRARY_PATH contains the current directory if one of the following
1001 # is true:
1002 # - one of the terminals (":" and ";") is the first or last sign
1003 # - two terminals occur directly after each other
1004 # - the path contains an element with a dot in it
1005 AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
1006 changequote(,)dnl
1007 case ${LD_LIBRARY_PATH} in
1008   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
1009     ld_library_path_setting="contains current directory"
1010     ;;
1011   *)
1012     ld_library_path_setting="ok"
1013     ;;
1014 esac
1015 changequote([,])dnl
1016 AC_MSG_RESULT($ld_library_path_setting)
1017 if test "$ld_library_path_setting" != "ok"; then
1018 AC_MSG_ERROR([
1019 *** LD_LIBRARY_PATH shouldn't contain the current directory when
1020 *** building glibc. Please change the environment variable
1021 *** and run configure again.])
1024 AC_CACHE_CHECK(whether GCC supports -static-libgcc, libc_cv_gcc_static_libgcc, [dnl
1025 if $CC -v -static-libgcc 2>&1 | grep 'unrecognized option.*static-libgcc' >/dev/null; then
1026   libc_cv_gcc_static_libgcc=
1027 else
1028   libc_cv_gcc_static_libgcc=-static-libgcc
1029 fi])
1030 AC_SUBST(libc_cv_gcc_static_libgcc)
1032 AC_PATH_PROG(BASH_SHELL, bash, no)
1033 if test "$BASH_SHELL" != no &&
1034    $BASH_SHELL -c 'test "$BASH_VERSINFO" \
1035              && test "$BASH_VERSINFO" -ge 2 >&/dev/null'; then
1036   libc_cv_have_bash2=yes
1037 else
1038   libc_cv_have_bash2=no
1040 AC_SUBST(libc_cv_have_bash2)
1042 dnl We need a ksh compatible shell for tzselect.
1043 if test "$BASH_SHELL" = no; then
1044   AC_PATH_PROG(KSH, ksh, no)
1045   if test "$KSH" = no; then
1046     libc_cv_have_ksh=no
1047   else
1048     libc_cv_have_ksh=yes
1049   fi
1050 else
1051   KSH="$BASH_SHELL"
1052   AC_SUBST(KSH)
1053   libc_cv_have_ksh=yes
1055 AC_SUBST(libc_cv_have_ksh)
1057 AC_PATH_PROG(PERL, perl, no)
1058 if test "$PERL" != no &&
1059    (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1060   PERL=no
1062 AC_PATH_PROG(INSTALL_INFO, install-info, no,
1063              $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
1064 AC_PATH_PROG(BISON, bison, no, $PATH:/usr/local/bin:/usr/bin:/bin)
1066 AC_CACHE_CHECK(for libc-friendly stddef.h, libc_cv_friendly_stddef, [dnl
1067 AC_TRY_COMPILE(dnl
1068 [#define __need_size_t
1069 #define __need_wchar_t
1070 #include <stddef.h>
1071 #define __need_NULL
1072 #include <stddef.h>], [size_t size; wchar_t wchar;
1073 #ifdef offsetof
1074 #error stddef.h ignored __need_*
1075 #endif
1076 if (&size == NULL || &wchar == NULL) abort ();],
1077                libc_cv_friendly_stddef=yes,
1078                libc_cv_friendly_stddef=no)])
1079 if test $libc_cv_friendly_stddef = yes; then
1080   config_vars="$config_vars
1081 override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
1084 AC_CACHE_CHECK(whether we need to use -P to assemble .S files,
1085                libc_cv_need_minus_P, [dnl
1086 cat > conftest.S <<EOF
1087 #include "confdefs.h"
1088 /* Nothing whatsoever.  */
1090 if AC_TRY_COMMAND(${CC-cc} $CPPFLAGS $ASFLAGS -c conftest.S 1>&AS_MESSAGE_LOG_FD); then
1091   libc_cv_need_minus_P=no
1092 else
1093   libc_cv_need_minus_P=yes
1095 rm -f conftest*])
1096 if test $libc_cv_need_minus_P = yes; then
1097   config_vars="$config_vars
1098 asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
1101 AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
1102 cat > conftest.s <<EOF
1103 ${libc_cv_dot_text}
1104 foo:
1105 .set glibc_conftest_frobozz,foo
1106 .globl glibc_conftest_frobozz
1108 # The alpha-dec-osf1 assembler gives only a warning for `.set'
1109 # (but it doesn't work), so we must do a linking check to be sure.
1110 cat > conftest1.c <<\EOF
1111 extern int glibc_conftest_frobozz;
1112 void _start() { glibc_conftest_frobozz = 1; }
1114 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
1115             -nostartfiles -nostdlib \
1116             -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1117   libc_cv_asm_set_directive=yes
1118 else
1119   libc_cv_asm_set_directive=no
1121 rm -f conftest*])
1122 if test $libc_cv_asm_set_directive = yes; then
1123   AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1126 AC_CACHE_CHECK(for assembler gnu_unique_object symbol type,
1127                libc_cv_asm_unique_object, [dnl
1128 cat > conftest.s <<EOF
1129 ${libc_cv_dot_text}
1130 _sym:
1131 .type _sym, %gnu_unique_object
1133 if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1134   libc_cv_asm_unique_object=yes
1135 else
1136   libc_cv_asm_unique_object=no
1138 rm -f conftest*])
1139 if test $libc_cv_asm_unique_object = yes; then
1140   AC_DEFINE(HAVE_ASM_UNIQUE_OBJECT)
1143 AC_CACHE_CHECK(for .symver assembler directive, libc_cv_asm_symver_directive,
1144 [cat > conftest.s <<EOF
1145 ${libc_cv_dot_text}
1146 _sym:
1147 .symver _sym,sym@VERS
1149 if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1150   libc_cv_asm_symver_directive=yes
1151 else
1152   libc_cv_asm_symver_directive=no
1154 rm -f conftest*])
1155 AC_CACHE_CHECK(for ld --version-script, libc_cv_ld_version_script_option, [dnl
1156 if test $libc_cv_asm_symver_directive = yes; then
1157   cat > conftest.s <<EOF
1158 ${libc_cv_dot_text}
1159 _sym:
1160 .symver _sym,sym@VERS
1162   cat > conftest.map <<EOF
1163 VERS_1 {
1164         global: sym;
1167 VERS_2 {
1168         global: sym;
1169 } VERS_1;
1171   if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1172     if AC_TRY_COMMAND([${CC-cc} $CFLAGS $LDFLAGS -shared
1173                                 -o conftest.so conftest.o
1174                                 -nostartfiles -nostdlib
1175                                 -Wl,--version-script,conftest.map
1176                        1>&AS_MESSAGE_LOG_FD]);
1177     then
1178       libc_cv_ld_version_script_option=yes
1179     else
1180       libc_cv_ld_version_script_option=no
1181     fi
1182   else
1183     libc_cv_ld_version_script_option=no
1184   fi
1185 else
1186   libc_cv_ld_version_script_option=no
1188 rm -f conftest*])
1189 if test $shared != no &&
1190    test $libc_cv_asm_symver_directive = yes &&
1191    test $libc_cv_ld_version_script_option = yes &&
1192    test $enable_versioning = yes; then
1193   VERSIONING=yes
1194   AC_DEFINE(DO_VERSIONING)
1195 else
1196   VERSIONING=no
1198 AC_SUBST(VERSIONING)
1200 if test $shared != no && test $VERSIONING = no; then
1201   echo "\
1202 *** WARNING: You should not compile GNU libc without versioning. Not using
1203 *** versioning will introduce incompatibilities so that old binaries
1204 *** will not run anymore.
1205 *** For versioning you need recent binutils (binutils-2.8.1.0.23 or newer)."
1207 AC_CACHE_CHECK(for .previous assembler directive,
1208                libc_cv_asm_previous_directive, [dnl
1209 cat > conftest.s <<EOF
1210 .section foo_section
1211 .previous
1213 if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
1214   libc_cv_asm_previous_directive=yes
1215 else
1216   libc_cv_asm_previous_directive=no
1218 rm -f conftest*])
1219 if test $libc_cv_asm_previous_directive = yes; then
1220   AC_DEFINE(HAVE_ASM_PREVIOUS_DIRECTIVE)
1221 else
1222   AC_CACHE_CHECK(for .popsection assembler directive,
1223                  libc_cv_asm_popsection_directive, [dnl
1224   cat > conftest.s <<EOF
1225 .pushsection foo_section
1226 .popsection
1228   if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
1229     libc_cv_asm_popsection_directive=yes
1230   else
1231     libc_cv_asm_popsection_directive=no
1232   fi
1233   rm -f conftest*])
1234   if test $libc_cv_asm_popsection_directive = yes; then
1235     AC_DEFINE(HAVE_ASM_POPSECTION_DIRECTIVE)
1236   fi
1238 AC_CACHE_CHECK(for .protected and .hidden assembler directive,
1239                libc_cv_asm_protected_directive, [dnl
1240 cat > conftest.s <<EOF
1241 .protected foo
1242 foo:
1243 .hidden bar
1244 bar:
1246 if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
1247   libc_cv_asm_protected_directive=yes
1248 else
1249   AC_MSG_ERROR(assembler support for symbol visibility is required)
1251 rm -f conftest*])
1253 if test $libc_cv_asm_protected_directive = yes; then
1254   AC_CACHE_CHECK(whether __attribute__((visibility())) is supported,
1255                  libc_cv_visibility_attribute,
1256                  [cat > conftest.c <<EOF
1257                   int foo __attribute__ ((visibility ("hidden"))) = 1;
1258                   int bar __attribute__ ((visibility ("protected"))) = 1;
1260                   libc_cv_visibility_attribute=no
1261                   if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1262                     if grep '\.hidden.*foo' conftest.s >/dev/null; then
1263                       if grep '\.protected.*bar' conftest.s >/dev/null; then
1264                         libc_cv_visibility_attribute=yes
1265                       fi
1266                     fi
1267                   fi
1268                   rm -f conftest.{c,s}
1269                  ])
1270   if test $libc_cv_visibility_attribute != yes; then
1271     AC_MSG_ERROR(compiler support for visibility attribute is required)
1272   fi
1275 if test $libc_cv_visibility_attribute = yes; then
1276   AC_CACHE_CHECK(for broken __attribute__((visibility())),
1277                  libc_cv_broken_visibility_attribute,
1278                  [cat > conftest.c <<EOF
1279                   int foo (int x);
1280                   int bar (int x) __asm__ ("foo") __attribute__ ((visibility ("hidden")));
1281                   int bar (int x) { return x; }
1283                   libc_cv_broken_visibility_attribute=yes
1284                   if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1285 changequote(,)dnl
1286                     if grep '\.hidden[  _]foo' conftest.s >/dev/null; then
1287 changequote([,])dnl
1288                       libc_cv_broken_visibility_attribute=no
1289                     fi
1290                   fi
1291                   rm -f conftest.c conftest.s
1292                  ])
1293   if test $libc_cv_broken_visibility_attribute = yes; then
1294     AC_MSG_ERROR(working compiler support for visibility attribute is required)
1295   fi
1298 AC_CACHE_CHECK(for broken __attribute__((alias())),
1299                libc_cv_broken_alias_attribute,
1300                [cat > conftest.c <<EOF
1301                extern int foo (int x) __asm ("xyzzy");
1302                int bar (int x) { return x; }
1303                extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1304                extern int dfoo;
1305                extern __typeof (dfoo) dfoo __asm ("abccb");
1306                int dfoo = 1;
1308                libc_cv_broken_alias_attribute=yes
1309                if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1310                  if grep 'xyzzy' conftest.s >/dev/null &&
1311                     grep 'abccb' conftest.s >/dev/null; then
1312                    libc_cv_broken_alias_attribute=no
1313                  fi
1314                fi
1315                rm -f conftest.c conftest.s
1316                ])
1317 if test $libc_cv_broken_alias_attribute = yes; then
1318   AC_MSG_ERROR(working alias attribute support required)
1321 if test $libc_cv_visibility_attribute = yes; then
1322   AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1323                  libc_cv_have_sdata_section,
1324                  [echo "int i;" > conftest.c
1325                   libc_cv_have_sdata_section=no
1326                   if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1327                      | grep '\.sdata' >/dev/null; then
1328                     libc_cv_have_sdata_section=yes
1329                   fi
1330                   rm -f conftest.c conftest.so
1331                  ])
1332   if test $libc_cv_have_sdata_section = yes; then
1333     AC_DEFINE(HAVE_SDATA_SECTION)
1334   fi
1337 AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
1338                libc_cv_initfini_array, [dnl
1339 LIBC_TRY_LINK_STATIC([
1340 int foo (void) { return 1; }
1341 int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
1343   [if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
1344     libc_cv_initfini_array=yes
1345   else
1346     libc_cv_initfini_array=no
1347   fi],
1348   [libc_cv_initfini_array=no])
1350 if test $libc_cv_initfini_array != yes; then
1351   AC_MSG_ERROR([Need linker with .init_array/.fini_array support.])
1354 AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
1355                libc_cv_ctors_header, [dnl
1356   libc_cv_ctors_header=yes
1357   LIBC_TRY_LINK_STATIC([
1358 __attribute__ ((constructor)) void ctor (void) { asm (""); }
1359 __attribute__ ((destructor))  void dtor (void) { asm (""); }
1361               [dnl
1362       AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
1363         { gsub(/\@<:@ */, "@<:@") }
1364         $2 == ".ctors" || $2 == ".dtors" {
1365           size = strtonum("0x" $6)
1366           align = strtonum("0x" $NF)
1367           seen@<:@$2@:>@ = 1
1368           stub@<:@$2@:>@ = size == align * 2
1369         }
1370         END {
1371           ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1372           dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1373           exit ((ctors_ok && dtors_ok) ? 0 : 1)
1374         }
1375       '], [libc_cv_ctors_header=no])
1376     ], [dnl
1377       AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1378     ])
1380 if test $libc_cv_ctors_header = no; then
1381   AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1384 AC_CACHE_CHECK(for libunwind-support in compiler,
1385                libc_cv_cc_with_libunwind, [
1386   cat > conftest.c <<EOF
1387 int main (void) { return 0; }
1389   if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
1390      conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
1391     libc_cv_cc_with_libunwind=yes
1392   else
1393     libc_cv_cc_with_libunwind=no
1394   fi
1395   rm -f conftest*])
1396 AC_SUBST(libc_cv_cc_with_libunwind)
1397 if test $libc_cv_cc_with_libunwind = yes; then
1398   AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1401 AC_CACHE_CHECK(for -z nodelete option,
1402                libc_cv_z_nodelete, [dnl
1403 cat > conftest.c <<EOF
1404 int _start (void) { return 42; }
1406 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1407                    -fPIC -shared -o conftest.so conftest.c
1408                    -nostartfiles -nostdlib
1409                    -Wl,--enable-new-dtags,-z,nodelete 1>&AS_MESSAGE_LOG_FD])
1410 then
1411   libc_cv_z_nodelete=yes
1412 else
1413   AC_MSG_ERROR(linker with -z nodelete support required)
1415 rm -f conftest*])
1417 AC_CACHE_CHECK(for -z nodlopen option,
1418                libc_cv_z_nodlopen, [dnl
1419 cat > conftest.c <<EOF
1420 int _start (void) { return 42; }
1422 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1423                         -fPIC -shared -o conftest.so conftest.c
1424                         -nostartfiles -nostdlib
1425                         -Wl,--enable-new-dtags,-z,nodlopen 1>&AS_MESSAGE_LOG_FD])
1426 then
1427   libc_cv_z_nodlopen=yes
1428 else
1429   AC_MSG_ERROR(linker with -z nodlopen support required)
1431 rm -f conftest*])
1433 AC_CACHE_CHECK(for -z initfirst option,
1434                libc_cv_z_initfirst, [dnl
1435 cat > conftest.c <<EOF
1436 int _start (void) { return 42; }
1438 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1439                         -fPIC -shared -o conftest.so conftest.c
1440                         -nostartfiles -nostdlib
1441                         -Wl,--enable-new-dtags,-z,initfirst 1>&AS_MESSAGE_LOG_FD])
1442 then
1443   libc_cv_z_initfirst=yes
1444 else
1445   AC_MSG_ERROR(linker with -z initfirst support required)
1447 rm -f conftest*])
1449 # Add-on fragments can set these for other machines.
1450 libc_commonpagesize=${libc_commonpagesize:-no}
1451 libc_relro_required=${libc_relro_required:-no}
1452 case "$base_machine" in
1453   i[[34567]]86 | x86_64 | powerpc* | s390*)
1454     libc_commonpagesize=0x1000
1455     libc_relro_required=yes
1456     ;;
1457   sparc*)
1458     libc_commonpagesize=0x2000
1459     libc_relro_required=yes
1460     ;;
1461 esac
1463 if test $libc_commonpagesize != no; then
1464   AC_CACHE_CHECK(for -z relro option,
1465                  libc_cv_z_relro, [dnl
1466   libc_cv_z_relro=no
1467   AC_LANG_CONFTEST([AC_LANG_SOURCE([[
1468 int _start (void) { return 42; }
1469 extern void _exit (int);
1470 /* Since these pointers are const, they should go in rodata.
1471    Since they refer to functions that have to be resolved by
1472    dynamic linking, they should instead go in RELRO data.  */
1473 const void *const relro[] = { &_start, &_exit, 0 };
1474 /* GNU ld fails to produce RELRO data when it's very small and there is no
1475    normal writable data following it, or if only uninitialized (.bss) data
1476    follows it, or only very small writable data.  */
1477 int data[0x10000] = { 1, };
1478 ]])])
1479   cat > conftest.awk <<\EOF
1480 BEGIN {
1481   result = "no"
1482   commonpagesize = strtonum(commonpagesize)
1484 { print "LINE:", $0 > "/dev/stderr" }
1485 $1 == "GNU_RELRO" {
1486   vaddr = strtonum($3)
1487   memsz = strtonum($6)
1488   end = vaddr + memsz
1489   printf "vaddr %#x memsz %#x end %#x commonpagesize %#x\n", \
1490     vaddr, memsz, end, commonpagesize > "/dev/stderr"
1491   result = (end % commonpagesize == 0) ? "yes" : "broken"
1493 END { print result }
1495   AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1496                     -fPIC -shared -o conftest.so conftest.c
1497                     -nostartfiles -nostdlib
1498                     -Wl,-z,relro 1>&AS_MESSAGE_LOG_FD]) &&
1499   AC_TRY_COMMAND([$READELF -Wl conftest.so > conftest.ph]) &&
1500   AC_TRY_COMMAND([
1501       $AWK -v commonpagesize=$libc_commonpagesize -f conftest.awk
1502            conftest.ph > conftest.cps
1503     ]) &&
1504   libc_cv_z_relro=`cat conftest.cps 2>&AS_MESSAGE_LOG_FD`
1505   rm -f conftest*])
1506   if { test "x$libc_relro_required" = xyes &&
1507        test "x$libc_cv_z_relro" != xyes
1508      }
1509   then
1510     AC_MSG_ERROR(linker with -z relro support required)
1511   fi
1512 else
1513   AC_MSG_WARN([missing architecture parameter to check for working -z relro])
1516 AC_CACHE_CHECK(for -Bgroup option,
1517                libc_cv_Bgroup, [dnl
1518 cat > conftest.c <<EOF
1519 int _start (void) { return 42; }
1521 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1522                             -fPIC -shared -o conftest.so conftest.c
1523                             -Wl,-Bgroup -nostdlib 1>&AS_MESSAGE_LOG_FD])
1524 then
1525   libc_cv_Bgroup=yes
1526 else
1527   libc_cv_Bgroup=no
1529 rm -f conftest*])
1530 AC_SUBST(libc_cv_Bgroup)
1532 ASFLAGS_config=
1533 AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1534                libc_cv_as_noexecstack, [dnl
1535 cat > conftest.c <<EOF
1536 void foo (void) { }
1538 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1539                    -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
1540    && grep .note.GNU-stack conftest.s >/dev/null \
1541    && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1542                       -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1543 then
1544   libc_cv_as_noexecstack=yes
1545 else
1546   libc_cv_as_noexecstack=no
1548 rm -f conftest*])
1549 if test $libc_cv_as_noexecstack = yes; then
1550   ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1552 AC_SUBST(ASFLAGS_config)
1554 AC_CACHE_CHECK(for -z combreloc,
1555                libc_cv_z_combreloc, [dnl
1556 cat > conftest.c <<EOF
1557 extern int bar (int);
1558 extern int mumble;
1559 int foo (void) { return bar (mumble); }
1561 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1562                         -fPIC -shared -o conftest.so conftest.c
1563                         -nostdlib -nostartfiles
1564                         -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
1565 then
1566 dnl The following test is a bit weak.  We must use a tool which can test
1567 dnl cross-platform since the gcc used can be a cross compiler.  Without
1568 dnl introducing new options this is not easily doable.  Instead use a tool
1569 dnl which always is cross-platform: readelf.  To detect whether -z combreloc
1570 dnl look for a section named .rel.dyn.
1571   if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
1572     libc_cv_z_combreloc=yes
1573   else
1574     libc_cv_z_combreloc=no
1575   fi
1576 else
1577   libc_cv_z_combreloc=no
1579 rm -f conftest*])
1580 if test "$libc_cv_z_combreloc" = yes; then
1581   AC_DEFINE(HAVE_Z_COMBRELOC)
1583 AC_SUBST(libc_cv_z_combreloc)
1585 AC_CACHE_CHECK(for -z execstack,
1586                libc_cv_z_execstack, [dnl
1587 cat > conftest.c <<EOF
1588 int _start (void) { return 42; }
1590 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1591                             -fPIC -shared -o conftest.so conftest.c
1592                             -Wl,-z,execstack -nostdlib
1593                             1>&AS_MESSAGE_LOG_FD])
1594 then
1595   libc_cv_z_execstack=yes
1596 else
1597   libc_cv_z_execstack=no
1599 rm -f conftest*])
1600 AC_SUBST(libc_cv_z_execstack)
1602 AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
1603 LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1606 AC_SUBST(libc_cv_fpie)
1608 AC_CACHE_CHECK(for --hash-style option,
1609                libc_cv_hashstyle, [dnl
1610 cat > conftest.c <<EOF
1611 int _start (void) { return 42; }
1613 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1614                             -fPIC -shared -o conftest.so conftest.c
1615                             -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1616 then
1617   libc_cv_hashstyle=yes
1618 else
1619   libc_cv_hashstyle=no
1621 rm -f conftest*])
1622 AC_SUBST(libc_cv_hashstyle)
1624 # The linker's default -shared behavior is good enough if it
1625 # does these things that our custom linker scripts ensure that
1626 # all allocated NOTE sections come first.
1627 if test "$use_default_link" = default; then
1628   AC_CACHE_CHECK([for sufficient default -shared layout],
1629                   libc_cv_use_default_link, [dnl
1630   libc_cv_use_default_link=no
1631   cat > conftest.s <<\EOF
1632           .section .note.a,"a",%note
1633           .balign 4
1634           .long 4,4,9
1635           .string "GNU"
1636           .string "foo"
1637           .section .note.b,"a",%note
1638           .balign 4
1639           .long 4,4,9
1640           .string "GNU"
1641           .string "bar"
1643   if AC_TRY_COMMAND([dnl
1644   ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1645        ac_try=`$READELF -S conftest.so | sed -n \
1646          ['${x;p;}
1647           s/^ *\[ *[1-9][0-9]*\]  *\([^ ][^ ]*\)  *\([^ ][^ ]*\) .*$/\2 \1/
1648           t a
1649           b
1650           : a
1651           H']`
1652   then
1653     libc_seen_a=no libc_seen_b=no
1654     set -- $ac_try
1655     while test $# -ge 2 -a "$1" = NOTE; do
1656       case "$2" in
1657       .note.a) libc_seen_a=yes ;;
1658       .note.b) libc_seen_b=yes ;;
1659       esac
1660       shift 2
1661     done
1662     case "$libc_seen_a$libc_seen_b" in
1663     yesyes)
1664       libc_cv_use_default_link=yes
1665       ;;
1666     *)
1667       echo >&AS_MESSAGE_LOG_FD "\
1668 $libc_seen_a$libc_seen_b from:
1669 $ac_try"
1670       ;;
1671     esac
1672   fi
1673   rm -f conftest*])
1674   use_default_link=$libc_cv_use_default_link
1677 AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
1678 if libc_cv_output_format=`
1679 ${CC-cc} -nostartfiles -nostdlib -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
1680 then
1681   :
1682 else
1683   libc_cv_output_format=
1685 test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1686 AC_SUBST(libc_cv_output_format)
1688 AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
1689 cat > conftest.c <<EOF
1690 int foo;
1692 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
1693                             conftest.c 1>&AS_MESSAGE_LOG_FD])
1694 then
1695   libc_cv_fno_toplevel_reorder=yes
1696 else
1697   libc_cv_fno_toplevel_reorder=no
1699 rm -f conftest*])
1700 if test $libc_cv_fno_toplevel_reorder = yes; then
1701   fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
1702 else
1703   fno_unit_at_a_time=-fno-unit-at-a-time
1705 AC_SUBST(fno_unit_at_a_time)
1707 AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
1708 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
1709                    [libc_cv_ssp=yes],
1710                    [libc_cv_ssp=no])
1712 AC_SUBST(libc_cv_ssp)
1714 AC_CACHE_CHECK(for -fgnu89-inline, libc_cv_gnu89_inline, [dnl
1715 cat > conftest.c <<EOF
1716 int foo;
1717 #ifdef __GNUC_GNU_INLINE__
1718 main () { return 0;}
1719 #else
1720 #error
1721 #endif
1723 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -std=gnu99 -fgnu89-inline
1724                             -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD])
1725 then
1726   libc_cv_gnu89_inline=yes
1727 else
1728   libc_cv_gnu89_inline=no
1730 rm -f conftest*])
1731 if test $libc_cv_gnu89_inline = yes; then
1732   gnu89_inline=-fgnu89-inline
1733 else
1734   gnu89_inline=
1736 AC_SUBST(gnu89_inline)
1738 AC_CACHE_CHECK(whether cc puts quotes around section names,
1739                libc_cv_have_section_quotes,
1740                [cat > conftest.c <<EOF
1741                 static const int foo
1742                 __attribute__ ((section ("bar"))) = 1;
1744                 if ${CC-cc} -S conftest.c -o conftest.s; then
1745                   if grep '\.section.*"bar"' conftest.s >/dev/null; then
1746                     libc_cv_have_section_quotes=yes
1747                   else
1748                     libc_cv_have_section_quotes=no
1749                   fi
1750                 else
1751                   libc_cv_have_section_quotes=unknown
1752                 fi
1753                 rm -f conftest.{c,s}
1754                 ])
1755 if test $libc_cv_have_section_quotes = yes; then
1756   AC_DEFINE(HAVE_SECTION_QUOTES)
1759 AC_CACHE_CHECK(for assembler .weak directive, libc_cv_asm_weak_directive,
1760                [dnl
1761 cat > conftest.s <<EOF
1762 ${libc_cv_dot_text}
1763 .globl foo
1764 foo:
1765 .weak foo
1766 .weak bar; bar = foo
1768 if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
1769   libc_cv_asm_weak_directive=yes
1770 else
1771   libc_cv_asm_weak_directive=no
1773 rm -f conftest*])
1775 if test $libc_cv_asm_weak_directive = no; then
1776   AC_CACHE_CHECK(for assembler .weakext directive,
1777                  libc_cv_asm_weakext_directive,
1778                  [dnl
1779 cat > conftest.s <<EOF
1780 ${libc_cv_dot_text}
1781 .globl foo
1782 foo:
1783 .weakext bar foo
1784 .weakext baz
1785 .globl baz
1786 baz:
1788   if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
1789     libc_cv_asm_weakext_directive=yes
1790   else
1791     libc_cv_asm_weakext_directive=no
1792   fi
1793   rm -f conftest*])
1795 fi # no .weak
1797 if test $libc_cv_asm_weak_directive = yes; then
1798   AC_DEFINE(HAVE_ASM_WEAK_DIRECTIVE)
1799 elif test $libc_cv_asm_weakext_directive = yes; then
1800   AC_DEFINE(HAVE_ASM_WEAKEXT_DIRECTIVE)
1803 AC_CACHE_CHECK(whether CFI directives are supported, libc_cv_asm_cfi_directives, [dnl
1804 case $machine in
1805   sparc/sparc64*) cfi_offset=2047;;
1806   *) cfi_offset=0;;
1807 esac
1808 cat > conftest.s <<EOF
1809         .text
1810         .type   func,%function
1811 func:
1812         .cfi_startproc
1813         .cfi_remember_state
1814         .cfi_rel_offset 1, $cfi_offset
1815         .cfi_endproc
1817 if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
1818   libc_cv_asm_cfi_directives=yes
1819 else
1820   libc_cv_asm_cfi_directives=no
1822 rm -f conftest*])
1823 if test $libc_cv_asm_cfi_directives = yes; then
1824   AC_DEFINE(HAVE_ASM_CFI_DIRECTIVES)
1827 AC_CACHE_CHECK(for ld --no-whole-archive, libc_cv_ld_no_whole_archive, [dnl
1828 cat > conftest.c <<\EOF
1829 _start () {}
1830 int __eh_pc;
1831 __throw () {}
1833 dnl No \ in command here because it ends up inside ''.
1834 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1835                             -nostdlib -nostartfiles -Wl,--no-whole-archive
1836                             -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD]); then
1837   libc_cv_ld_no_whole_archive=yes
1838 else
1839   libc_cv_ld_no_whole_archive=no
1841 rm -f conftest*])
1842 if test $libc_cv_ld_no_whole_archive = no; then
1843   AC_MSG_ERROR([support for --no-whole-archive is needed])
1846 AC_CACHE_CHECK(for gcc -fexceptions, libc_cv_gcc_exceptions, [dnl
1847 cat > conftest.c <<\EOF
1848 _start () {}
1849 int __eh_pc;
1850 __throw () {}
1852 dnl No \ in command here because it ends up inside ''.
1853 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1854                             -nostdlib -nostartfiles -fexceptions
1855                             -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD]); then
1856   libc_cv_gcc_exceptions=yes
1857 else
1858   libc_cv_gcc_exceptions=no
1860 rm -f conftest*])
1861 if test $libc_cv_gcc_exceptions = yes; then
1862   exceptions=-fexceptions
1864 AC_SUBST(exceptions)dnl
1866 if test "$host_cpu" = powerpc ; then
1867 # Check for a bug present in at least versions 2.8.x of GCC
1868 # and versions 1.0.x of EGCS.
1869 AC_CACHE_CHECK(whether clobbering cr0 causes problems,libc_cv_c_asmcr0_bug,[dnl
1870 AC_TRY_COMPILE([int tester(int x) { asm ("" : : : "cc"); return x & 123; }],,
1871                libc_cv_c_asmcr0_bug='no',
1872                libc_cv_c_asmcr0_bug='yes')])
1873 if test "$libc_cv_c_asmcr0_bug" != 'no'; then
1874   AC_DEFINE(BROKEN_PPC_ASM_CR0)
1878 AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1879 cat > conftest.c <<\EOF
1880 void zero (void *x)
1882   __builtin_memset (x, 0, 1000);
1886 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | fgrep "memset" > /dev/null]);
1887 then
1888   libc_cv_gcc_builtin_memset=no
1889 else
1890   libc_cv_gcc_builtin_memset=yes
1892 rm -f conftest* ])
1893 if test "$libc_cv_gcc_builtin_memset" = yes ; then
1894   AC_DEFINE(HAVE_BUILTIN_MEMSET)
1897 AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1898 cat > conftest.c <<\EOF
1899 extern char *strstr (const char *, const char *) __asm ("my_strstr");
1900 char *foo (const char *a, const char *b)
1902   return __builtin_strstr (a, b);
1906 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | fgrep "my_strstr" > /dev/null]);
1907 then
1908   libc_cv_gcc_builtin_redirection=yes
1909 else
1910   libc_cv_gcc_builtin_redirection=no
1912 rm -f conftest* ])
1913 if test "$libc_cv_gcc_builtin_redirection" = no; then
1914   AC_MSG_ERROR([support for the symbol redirection needed])
1917 dnl Check whether the compiler supports the __thread keyword.
1918 AC_CACHE_CHECK([for __thread], libc_cv_gcc___thread,
1919 [cat > conftest.c <<\EOF
1920 __thread int a = 42;
1922 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c >&AS_MESSAGE_LOG_FD]); then
1923   libc_cv_gcc___thread=yes
1924 else
1925   libc_cv_gcc___thread=no
1927 rm -f conftest*])
1928 if test "$libc_cv_gcc___thread" = no; then
1929   AC_MSG_ERROR([support for the __thread keyword is required])
1932 dnl Check whether the compiler supports the tls_model attribute.
1933 AC_CACHE_CHECK([for tls_model attribute], libc_cv_gcc_tls_model_attr, [dnl
1934 cat > conftest.c <<\EOF
1935 extern __thread int a __attribute__((tls_model ("initial-exec")));
1937 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -Werror conftest.c >&AS_MESSAGE_LOG_FD]); then
1938   libc_cv_gcc_tls_model_attr=yes
1939 else
1940   libc_cv_gcc_tls_model_attr=no
1942 rm -f conftest*])
1943 if test "$libc_cv_gcc_tls_model_attr" = no; then
1944   AC_MSG_ERROR([support for the tls_model attribute is required])
1947 dnl Determine how to disable generation of FMA instructions.
1948 AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1949                libc_cv_cc_nofma, [dnl
1950 libc_cv_cc_nofma=
1951 for opt in -ffp-contract=off -mno-fused-madd; do
1952   LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1953 done])
1955 if test -n "$submachine"; then
1956   AC_CACHE_CHECK([for compiler option for CPU variant],
1957                  libc_cv_cc_submachine, [dnl
1958   libc_cv_cc_submachine=no
1959   for opt in "-march=$submachine" "-mcpu=$submachine"; do
1960     LIBC_TRY_CC_OPTION([$opt], [
1961       libc_cv_cc_submachine="$opt"
1962       break], [])
1963   done])
1964   if test "x$libc_cv_cc_submachine" = xno; then
1965     AC_MSG_ERROR([${CC-cc} does not support $submachine])
1966   fi
1968 AC_SUBST(libc_cv_cc_submachine)
1970 dnl Check whether we have the gd library available.
1971 AC_MSG_CHECKING(for libgd)
1972 if test "$with_gd" != "no"; then
1973   old_CFLAGS="$CFLAGS"
1974   CFLAGS="$CFLAGS $libgd_include"
1975   old_LDFLAGS="$LDFLAGS"
1976   LDFLAGS="$LDFLAGS $libgd_ldflags"
1977   old_LIBS="$LIBS"
1978   LIBS="$LIBS -lgd -lpng -lz -lm"
1979   AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
1980   CFLAGS="$old_CFLAGS"
1981   LDFLAGS="$old_LDFLAGS"
1982   LIBS="$old_LIBS"
1983 else
1984   LIBGD=no
1986 AC_MSG_RESULT($LIBGD)
1987 AC_SUBST(LIBGD)
1989 # SELinux detection
1990 if test x$with_selinux = xno ; then
1991   have_selinux=no;
1992 else
1993   # See if we have the SELinux library
1994   AC_CHECK_LIB(selinux, is_selinux_enabled,
1995                have_selinux=yes, have_selinux=no)
1996   # See if we have the SELinux header with the NSCD permissions in it.
1997   if test x$have_selinux = xyes ; then
1998     AC_MSG_CHECKING([for NSCD Flask permissions in selinux/av_permissions.h])
1999     AC_TRY_COMPILE([#include <selinux/av_permissions.h>],
2000                     [#ifdef NSCD__SHMEMHOST
2001                      return 0;
2002                      #else
2003                      #error NSCD__SHMEMHOST not defined
2004                      #endif],
2005                     have_selinux=yes, have_selinux=no)
2006     AC_MSG_RESULT($have_selinux)
2007   fi
2009   if test x$with_selinux = xyes ; then
2010     if test x$have_selinux = xno ; then
2011       AC_MSG_ERROR([SELinux explicitly required, but sufficiently recent SELinux library not found])
2012     fi
2013   fi
2015 # Check if we're building with SELinux support.
2016 if test "x$have_selinux" = xyes; then
2017   AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
2019   # See if we have the libaudit library
2020   AC_CHECK_LIB(audit, audit_log_user_avc_message,
2021                have_libaudit=yes, have_libaudit=no)
2022   if test "x$have_libaudit" = xyes; then
2023     AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
2024   fi
2025   AC_SUBST(have_libaudit)
2027   # See if we have the libcap library
2028   AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
2029   if test "x$have_libcap" = xyes; then
2030     AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
2031   fi
2032   AC_SUBST(have_libcap)
2034 AC_SUBST(have_selinux)
2036 dnl check for the size of 'long double'.
2037 AC_CHECK_SIZEOF(long double, 0)
2038 sizeof_long_double=$ac_cv_sizeof_long_double
2039 AC_SUBST(sizeof_long_double)
2041 CPPUNDEFS=
2042 dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
2043 dnl Since we are building the implementations of the fortified functions here,
2044 dnl having the macro defined interacts very badly.
2045 AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
2046 [AC_TRY_COMPILE([], [
2047 #ifdef _FORTIFY_SOURCE
2048 # error bogon
2049 #endif],
2050                 [libc_cv_predef_fortify_source=no],
2051                 [libc_cv_predef_fortify_source=yes])])
2052 if test $libc_cv_predef_fortify_source = yes; then
2053   CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
2055 AC_SUBST(CPPUNDEFS)
2057 dnl Check for silly hacked compilers inserting -fstack-protector.
2058 dnl This breaks badly for the early startup code we compile, since
2059 dnl the compiled code can refer to a magic machine-dependent location
2060 dnl for the canary value before we have sufficient setup for that to
2061 dnl work.  It's also questionable to build all of libc with this flag
2062 dnl even when you're doing that for most applications you build, since
2063 dnl libc's code is so heavily-used and performance-sensitive.  If we
2064 dnl ever really want to make that work, it should be enabled explicitly
2065 dnl in the libc build, not inherited from implicit compiler settings.
2066 AC_CACHE_CHECK([whether $CC implicitly enables -fstack-protector],
2067                libc_cv_predef_stack_protector, [
2068 AC_TRY_COMPILE([extern void foobar (char *);],
2069                [char large_array[2048]; foobar (large_array);], [
2070 libc_undefs=`$NM -u conftest.o |
2071   LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
2072     2>&AS_MESSAGE_LOG_FD` || {
2073   AC_MSG_ERROR([confusing output from $NM -u])
2075 echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
2076 # On some architectures, there are architecture-specific undefined
2077 # symbols (resolved by the linker), so filter out unknown symbols.
2078 # This will fail to produce the correct result if the compiler
2079 # defaults to -fstack-protector but this produces an undefined symbol
2080 # other than __stack_chk_fail.  However, compilers like that have not
2081 # been encountered in practice.
2082 libc_undefs=`echo "$libc_undefs" | egrep '^(foobar|__stack_chk_fail)$'`
2083 case "$libc_undefs" in
2084 foobar) libc_cv_predef_stack_protector=no ;;
2085 '__stack_chk_fail
2086 foobar') libc_cv_predef_stack_protector=yes ;;
2087 *) AC_MSG_ERROR([unexpected symbols in test: $libc_undefs]) ;;
2088 esac],
2089                [AC_MSG_ERROR([test compilation failed])])
2091 libc_extra_cflags=
2092 if test $libc_cv_predef_stack_protector = yes; then
2093   libc_extra_cflags=-fno-stack-protector
2095 AC_SUBST(libc_extra_cflags)
2097 ### End of automated tests.
2098 ### Now run sysdeps configure fragments.
2100 # They also can set these variables.
2101 use_ldconfig=no
2102 ldd_rewrite_script=no
2103 libc_cv_sysconfdir=$sysconfdir
2104 libc_cv_localstatedir=$localstatedir
2105 libc_cv_gcc_unwind_find_fde=no
2106 libc_cv_idn=no
2108 # Iterate over all the sysdep directories we will use, running their
2109 # configure fragments.
2110 for dir in $sysnames; do
2111   case $dir in
2112     /*) dest=$dir ;;
2113     *)  dest=$srcdir/$dir ;;
2114   esac
2115   if test -r $dest/configure; then
2116     AC_MSG_RESULT(running configure fragment for $dir)
2117     . $dest/configure
2118   fi
2119 done
2121 if test x$libc_cv_gcc_unwind_find_fde = xyes; then
2122   AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
2124 AC_SUBST(libc_cv_gcc_unwind_find_fde)
2126 # A sysdeps configure fragment can reset this if IFUNC is not actually
2127 # usable even though the assembler knows how to generate the symbol type.
2128 if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
2129   AC_DEFINE(HAVE_IFUNC)
2132 # This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
2133 # configure fragment can override the value to prevent this AC_DEFINE.
2134 AC_SUBST(use_nscd)
2135 if test "x$use_nscd" != xno; then
2136   AC_DEFINE([USE_NSCD])
2138 if test "x$build_nscd" = xdefault; then
2139   build_nscd=$use_nscd
2142 # Test for old glibc 2.0.x headers so that they can be removed properly
2143 # Search only in includedir.
2144 AC_MSG_CHECKING(for old glibc 2.0.x headers)
2145 if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h"
2146 then
2147   old_glibc_headers=yes
2148 else
2149   old_glibc_headers=no
2151 AC_MSG_RESULT($old_glibc_headers)
2152 if test ${old_glibc_headers} = yes; then
2153   AC_MSG_WARN(*** During \"make install\" old headers from glibc 2.0.x will)
2154   AC_MSG_WARN(*** be removed.)
2156 AC_SUBST(old_glibc_headers)
2158 AC_SUBST(libc_cv_slibdir)
2159 AC_SUBST(libc_cv_localedir)
2160 AC_SUBST(libc_cv_sysconfdir)
2161 AC_SUBST(libc_cv_localstatedir)
2162 AC_SUBST(libc_cv_rootsbindir)
2163 AC_SUBST(libc_cv_forced_unwind)
2165 dnl sysdeps/CPU/configure.in checks set this via arch-specific asm tests
2166 AC_SUBST(libc_cv_cc_sse4)
2167 AC_SUBST(libc_cv_cc_avx)
2168 AC_SUBST(libc_cv_cc_sse2avx)
2169 AC_SUBST(libc_cv_cc_novzeroupper)
2170 AC_SUBST(libc_cv_cc_fma4)
2171 AC_SUBST(libc_cv_cc_nofma)
2172 AC_SUBST(libc_cv_as_i686)
2173 AC_SUBST(libc_cv_sparc_as_vis3)
2175 if test x$use_ldconfig = xyes; then
2176   AC_DEFINE(USE_LDCONFIG)
2178 AC_SUBST(use_ldconfig)
2179 AC_SUBST(ldd_rewrite_script)
2181 AC_SUBST(static)
2182 AC_SUBST(shared)
2184 AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
2185 [libc_cv_pic_default=yes
2186 cat > conftest.c <<EOF
2187 #if defined __PIC__ || defined __pic__ || defined PIC || defined pic
2188 # error PIC is default.
2189 #endif
2191 if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
2192   libc_cv_pic_default=no
2194 rm -f conftest.*])
2195 AC_SUBST(libc_cv_pic_default)
2197 AC_SUBST(profile)
2198 AC_SUBST(static_nss)
2200 AC_SUBST(DEFINES)
2202 dnl See sysdeps/mach/configure.in for this variable.
2203 AC_SUBST(mach_interface_list)
2205 VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
2206 RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
2207 AC_SUBST(VERSION)
2208 AC_SUBST(RELEASE)
2210 AC_CONFIG_FILES([config.make Makefile])
2211 AC_CONFIG_COMMANDS([default],[[
2212 case $CONFIG_FILES in *config.make*)
2213 echo "$config_vars" >> config.make;;
2214 esac
2215 test -d bits || mkdir bits]],[[config_vars='$config_vars']])
2216 AC_OUTPUT