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