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