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