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