config: Added HAVE_AARCH64_SVE_ASM for aarch64
[glibc.git] / configure.ac
blob19051b8ee0607c4b09fed939c4884501e8799914
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)], [https://sourceware.org/bugzilla/],
4   [glibc], [https://www.gnu.org/software/glibc/])
5 AC_CONFIG_SRCDIR([include/features.h])
6 AC_CONFIG_HEADERS([config.h])
7 AC_CONFIG_AUX_DIR([scripts])
9 ACX_PKGVERSION([GNU libc])
10 ACX_BUGURL([https://www.gnu.org/software/libc/bugs.html])
11 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"],
12                    [Package description])
13 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"],
14                    [Bug reporting address])
16 # Glibc should not depend on any header files
17 AC_DEFUN([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
18   [m4_divert_text([DEFAULTS],
19     [ac_includes_default='/* none */'])])
21 # We require GCC, and by default use its preprocessor.  Override AC_PROG_CPP
22 # here to work around the Autoconf issue discussed in
23 # <https://sourceware.org/ml/libc-alpha/2013-01/msg00721.html>.
24 AC_DEFUN([AC_PROG_CPP],
25 [AC_REQUIRE([AC_PROG_CC])dnl
26 AC_ARG_VAR([CPP],      [C preprocessor])dnl
27 _AC_ARG_VAR_CPPFLAGS()dnl
28 # On Suns, sometimes $CPP names a directory.
29 if test -n "$CPP" && test -d "$CPP"; then
30   CPP=
32 if test -z "$CPP"; then
33   CPP="$CC -E"
35 AC_SUBST(CPP)dnl
36 ])# AC_PROG_CPP
38 # We require GCC.  Override _AC_PROG_CC_C89 here to work around the Autoconf
39 # issue discussed in
40 # <https://sourceware.org/ml/libc-alpha/2013-01/msg00757.html>.
41 AC_DEFUN([_AC_PROG_CC_C89], [[$1]])
43 dnl This is here so we can set $subdirs directly based on configure fragments.
44 AC_CONFIG_SUBDIRS()
46 AC_CANONICAL_HOST
48 AC_PROG_CC
49 if test $host != $build; then
50   AC_CHECK_PROGS(BUILD_CC, gcc cc)
52 AC_SUBST(cross_compiling)
53 AC_PROG_CPP
54 AC_CHECK_TOOL(READELF, readelf, false)
56 # We need the C++ compiler only for testing.
57 AC_PROG_CXX
58 # It's useless to us if it can't link programs (e.g. missing -lstdc++).
59 AC_CACHE_CHECK([whether $CXX can link programs], libc_cv_cxx_link_ok, [dnl
60 AC_LANG_PUSH([C++])
61 # Default, dynamic case.
62 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
63                [libc_cv_cxx_link_ok=yes],
64                [libc_cv_cxx_link_ok=no])
65 # Static case.
66 old_LDFLAGS="$LDFLAGS"
67 LDFLAGS="$LDFLAGS -static"
68 AC_LINK_IFELSE([AC_LANG_SOURCE([
69 #include <iostream>
71 int
72 main()
74   std::cout << "Hello, world!";
75   return 0;
77 ])],
78                [],
79                [libc_cv_cxx_link_ok=no])
80 LDFLAGS="$old_LDFLAGS"
81 AC_LANG_POP([C++])])
82 AS_IF([test $libc_cv_cxx_link_ok != yes], [CXX=])
84 if test "`cd $srcdir; pwd -P`" = "`pwd -P`"; then
85   AC_MSG_ERROR([you must configure in a separate build directory])
88 # This will get text that should go into config.make.
89 config_vars=
91 # Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
92 AC_ARG_WITH([gd],
93             AS_HELP_STRING([--with-gd=DIR],
94                            [find libgd include dir and library with prefix DIR]),
95             [dnl
96 case "$with_gd" in
97 yes|''|no) ;;
98 *) libgd_include="-I$withval/include"
99    libgd_ldflags="-L$withval/lib" ;;
100 esac
102 AC_ARG_WITH([gd-include],
103             AS_HELP_STRING([--with-gd-include=DIR],
104                            [find libgd include files in DIR]),
105             [dnl
106 case "$with_gd_include" in
107 ''|no) ;;
108 *) libgd_include="-I$withval" ;;
109 esac
111 AC_ARG_WITH([gd-lib],
112             AS_HELP_STRING([--with-gd-lib=DIR],
113                            [find libgd library files in DIR]),
114             [dnl
115 case "$with_gd_lib" in
116 ''|no) ;;
117 *) libgd_ldflags="-L$withval" ;;
118 esac
121 if test -n "$libgd_include"; then
122   config_vars="$config_vars
123 CFLAGS-memusagestat.c = $libgd_include"
125 if test -n "$libgd_ldflags"; then
126   config_vars="$config_vars
127 libgd-LDFLAGS = $libgd_ldflags"
130 dnl Arguments to specify presence of other packages/features.
131 AC_ARG_WITH([binutils],
132             AS_HELP_STRING([--with-binutils=PATH],
133                            [specify location of binutils (as and ld)]),
134             [path_binutils=$withval],
135             [path_binutils=''])
136 AC_ARG_WITH([selinux],
137             AS_HELP_STRING([--with-selinux],
138                            [if building with SELinux support]),
139             [with_selinux=$withval],
140             [with_selinux=auto])
142 AC_ARG_WITH([headers],
143             AS_HELP_STRING([--with-headers=PATH],
144                            [location of system headers to use
145                             (for example /usr/src/linux/include)
146                             @<:@default=compiler default@:>@]),
147             [sysheaders=$withval],
148             [sysheaders=''])
149 AC_SUBST(sysheaders)
151 AC_SUBST(use_default_link)
152 AC_ARG_WITH([default-link],
153             AS_HELP_STRING([--with-default-link],
154                            [do not use explicit linker scripts]),
155             [use_default_link=$withval],
156             [use_default_link=default])
158 dnl Additional build flags injection.
159 AC_ARG_WITH([nonshared-cflags],
160             AS_HELP_STRING([--with-nonshared-cflags=CFLAGS],
161                            [build nonshared libraries with additional CFLAGS]),
162             [extra_nonshared_cflags=$withval],
163             [extra_nonshared_cflags=])
164 AC_SUBST(extra_nonshared_cflags)
166 AC_ARG_ENABLE([sanity-checks],
167               AS_HELP_STRING([--disable-sanity-checks],
168                              [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
169               [enable_sanity=$enableval],
170               [enable_sanity=yes])
172 AC_ARG_ENABLE([shared],
173               AS_HELP_STRING([--enable-shared],
174                              [build shared library @<:@default=yes if GNU ld@:>@]),
175               [shared=$enableval],
176               [shared=yes])
177 AC_ARG_ENABLE([profile],
178               AS_HELP_STRING([--enable-profile],
179                              [build profiled library @<:@default=no@:>@]),
180               [profile=$enableval],
181               [profile=no])
182 AC_ARG_ENABLE([static-pie],
183               AS_HELP_STRING([--enable-static-pie],
184                              [enable static PIE support and use it in the testsuite @<:@default=no@:>@]),
185               [static_pie=$enableval],
186               [static_pie=no])
187 AC_ARG_ENABLE([timezone-tools],
188               AS_HELP_STRING([--disable-timezone-tools],
189                              [do not install timezone tools @<:@default=install@:>@]),
190               [enable_timezone_tools=$enableval],
191               [enable_timezone_tools=yes])
192 AC_SUBST(enable_timezone_tools)
194 AC_ARG_ENABLE([hardcoded-path-in-tests],
195               AS_HELP_STRING([--enable-hardcoded-path-in-tests],
196                              [hardcode newly built glibc path in tests @<:@default=no@:>@]),
197               [hardcoded_path_in_tests=$enableval],
198               [hardcoded_path_in_tests=no])
199 AC_SUBST(hardcoded_path_in_tests)
201 AC_ARG_ENABLE([hidden-plt],
202               AS_HELP_STRING([--disable-hidden-plt],
203                              [do not hide internal function calls to avoid PLT]),
204               [hidden=$enableval],
205               [hidden=yes])
206 if test "x$hidden" = xno; then
207   AC_DEFINE(NO_HIDDEN)
210 AC_ARG_ENABLE([bind-now],
211               AS_HELP_STRING([--enable-bind-now],
212                              [disable lazy relocations in DSOs]),
213               [bindnow=$enableval],
214               [bindnow=no])
215 AC_SUBST(bindnow)
216 if test "x$bindnow" = xyes; then
217   AC_DEFINE(BIND_NOW)
220 dnl Build glibc with -fstack-protector, -fstack-protector-all, or
221 dnl -fstack-protector-strong.
222 AC_ARG_ENABLE([stack-protector],
223               AS_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@],
224                              [Use -fstack-protector[-all|-strong] to detect glibc buffer overflows]),
225               [enable_stack_protector=$enableval],
226               [enable_stack_protector=no])
227 case "$enable_stack_protector" in
228 all|yes|no|strong) ;;
229 *) AC_MSG_ERROR([Not a valid argument for --enable-stack-protector: \"$enable_stack_protector\"]);;
230 esac
232 dnl On some platforms we cannot use dynamic loading.  We must provide
233 dnl static NSS modules.
234 AC_ARG_ENABLE([static-nss],
235               AS_HELP_STRING([--enable-static-nss],
236                              [build static NSS modules @<:@default=no@:>@]),
237               [static_nss=$enableval],
238               [static_nss=no])
239 dnl Enable static NSS also if we build no shared objects.
240 if test x"$static_nss" = xyes || test x"$shared" = xno; then
241   static_nss=yes
242   AC_DEFINE(DO_STATIC_NSS)
245 AC_ARG_ENABLE([force-install],
246               AS_HELP_STRING([--disable-force-install],
247                              [don't force installation of files from this package, even if they are older than the installed files]),
248               [force_install=$enableval],
249               [force_install=yes])
250 AC_SUBST(force_install)
252 AC_ARG_ENABLE([maintainer-mode],
253               AS_HELP_STRING([--enable-maintainer-mode],
254                              [enable make rules and dependencies not useful (and sometimes confusing) to the casual installer]),
255               [maintainer=$enableval],
256               [maintainer=no])
258 dnl On some platforms we allow dropping compatibility with all kernel
259 dnl versions.
260 AC_ARG_ENABLE([kernel],
261               AS_HELP_STRING([--enable-kernel=VERSION],
262                              [compile for compatibility with kernel not older than VERSION]),
263               [minimum_kernel=$enableval],
264               [])
265 dnl Prevent unreasonable values.
266 if test "$minimum_kernel" = yes || test "$minimum_kernel" = no; then
267   # Better nothing than this.
268   minimum_kernel=""
269 else
270   if test "$minimum_kernel" = current; then
271     minimum_kernel=`uname -r 2>/dev/null` || minimum_kernel=
272   fi
275 dnl For the development we sometimes want gcc to issue even more warnings.
276 dnl This is not the default since many of the extra warnings are not
277 dnl appropriate.
278 AC_ARG_ENABLE([all-warnings],
279               AS_HELP_STRING([--enable-all-warnings],
280                              [enable all useful warnings gcc can issue]),
281               [all_warnings=$enableval],
282               [])
283 AC_SUBST(all_warnings)
285 AC_ARG_ENABLE([werror],
286               AS_HELP_STRING([--disable-werror],
287                              [do not build with -Werror]),
288               [enable_werror=$enableval],
289               [enable_werror=yes])
290 AC_SUBST(enable_werror)
292 AC_ARG_ENABLE([multi-arch],
293               AS_HELP_STRING([--enable-multi-arch],
294                              [enable single DSO with optimizations for multiple architectures]),
295               [multi_arch=$enableval],
296               [multi_arch=default])
298 AC_ARG_ENABLE([experimental-malloc],
299               AS_HELP_STRING([--disable-experimental-malloc],
300                              [disable experimental malloc features]),
301               [experimental_malloc=$enableval],
302               [experimental_malloc=yes])
303 AC_SUBST(experimental_malloc)
305 AC_ARG_ENABLE([memory-tagging],
306               AS_HELP_STRING([--enable-memory-tagging],
307                              [enable memory tagging if supported by the architecture @<:@default=no@:>@]),
308               [memory_tagging=$enableval],
309               [memory_tagging=no])
310 if test "$memory_tagging" = yes; then
311   # Only enable this on architectures that support it.
312   case $host_cpu in
313     aarch64)
314       AC_DEFINE(USE_MTAG)
315       ;;
316   esac
318 AC_SUBST(memory_tagging)
320 AC_ARG_ENABLE([crypt],
321               AS_HELP_STRING([--disable-crypt],
322                              [do not build nor install the passphrase hashing library, libcrypt]),
323               [build_crypt=$enableval],
324               [build_crypt=yes])
325 AC_SUBST(build_crypt)
327 AC_ARG_ENABLE([nss-crypt],
328               AS_HELP_STRING([--enable-nss-crypt],
329                              [enable libcrypt to use nss]),
330               [nss_crypt=$enableval],
331               [nss_crypt=no])
332 if test x$build_libcrypt = xno && test x$nss_crypt = xyes; then
333   AC_MSG_WARN([--enable-nss-crypt has no effect when libcrypt is disabled])
334   nss_crypt=no
336 if test x$nss_crypt = xyes; then
337   nss_includes=-I$(nss-config --includedir 2>/dev/null)
338   if test $? -ne 0; then
339     AC_MSG_ERROR([cannot find include directory with nss-config])
340   fi
341   nspr_includes=-I$(nspr-config --includedir 2>/dev/null)
342   if test $? -ne 0; then
343     AC_MSG_ERROR([cannot find include directory with nspr-config])
344   fi
345   old_CFLAGS="$CFLAGS"
346   CFLAGS="$CFLAGS $nss_includes $nspr_includes"
347   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
348 #include <hasht.h>
349 #include <nsslowhash.h>
350 void f (void) { NSSLOW_Init (); }])],
351              libc_cv_nss_crypt=yes,
352              AC_MSG_ERROR([
353 cannot find NSS headers with lowlevel hash function interfaces]))
354   old_LIBS="$LIBS"
355   old_LDFLAGS="$LDFLAGS"
356   LIBS="$LIBS -lfreebl3"
357   AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
358 #include <hasht.h>
359 #include <nsslowhash.h>],
360                                   [NSSLOW_Init();])],
361                  libc_cv_nss_crypt=yes,
362                  AC_MSG_ERROR([
363 cannot link program using lowlevel NSS hash functions]))
364   # Check to see if there is a static NSS cryptographic library.
365   # If there isn't then we can't link anything with libcrypt.a,
366   # and that might mean disabling some static tests.
367   LDFLAGS="$LDFLAGS -static"
368   AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
369 #include <hasht.h>
370 #include <nsslowhash.h>],
371                                   [NSSLOW_Init();])],
372                  libc_cv_static_nss_crypt=yes,
373                  libc_cv_static_nss_crypt=no)
374   LDFLAGS="$old_LDFLAGS"
375   CFLAGS="$old_CFLAGS"
376   LIBS="$old_LIBS"
377 else
378   libc_cv_nss_crypt=no
379   libc_cv_static_nss_crypt=no
381 AC_SUBST(libc_cv_nss_crypt)
382 AC_SUBST(libc_cv_static_nss_crypt)
385 AC_ARG_ENABLE([systemtap],
386               [AS_HELP_STRING([--enable-systemtap],
387                [enable systemtap static probe points @<:@default=no@:>@])],
388               [systemtap=$enableval],
389               [systemtap=no])
390 if test "x$systemtap" != xno; then
391   AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
392   old_CFLAGS="$CFLAGS"
393   CFLAGS="-std=gnu11 $CFLAGS"
394   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
395 void foo (int i, void *p)
397   asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
398        :: STAP_PROBE_ASM_OPERANDS (2, i, p));
399 }]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])
400   CFLAGS="$old_CFLAGS"])
401   if test $libc_cv_sdt = yes; then
402     AC_DEFINE([USE_STAP_PROBE])
403   elif test "x$systemtap" != xauto; then
404     AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
405   fi
408 AC_ARG_ENABLE([build-nscd],
409               [AS_HELP_STRING([--disable-build-nscd],
410                [disable building and installing the nscd daemon])],
411               [build_nscd=$enableval],
412               [build_nscd=default])
413 AC_SUBST(build_nscd)
415 # Note the use of $use_nscd is near the bottom of the file.
416 AC_ARG_ENABLE([nscd],
417               [AS_HELP_STRING([--disable-nscd],
418                [library functions will not contact the nscd daemon])],
419               [use_nscd=$enableval],
420               [use_nscd=yes])
422 AC_ARG_ENABLE([pt_chown],
423               [AS_HELP_STRING([--enable-pt_chown],
424                [Enable building and installing pt_chown])],
425               [build_pt_chown=$enableval],
426               [build_pt_chown=no])
427 AC_SUBST(build_pt_chown)
428 if test "$build_pt_chown" = yes; then
429   AC_DEFINE(HAVE_PT_CHOWN)
432 AC_ARG_ENABLE([tunables],
433               [AS_HELP_STRING([--enable-tunables],
434                [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])],
435               [have_tunables=$enableval],
436               [have_tunables=yes])
437 AC_SUBST(have_tunables)
438 if test "$have_tunables" = yes; then
439   AC_DEFINE(HAVE_TUNABLES)
442 # The abi-tags file uses a fairly simplistic model for name recognition that
443 # can't distinguish i486-pc-linux-gnu fully from i486-pc-gnu.  So we mutate a
444 # $host_os of `gnu*' here to be `gnu-gnu*' just so that it can tell.
445 # This doesn't get used much beyond that, so it's fairly safe.
446 case "$host_os" in
447 linux*)
448   ;;
449 gnu*)
450   host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
451   ;;
452 esac
454 AC_ARG_ENABLE([mathvec],
455               [AS_HELP_STRING([--enable-mathvec],
456               [Enable building and installing mathvec @<:@default depends on architecture@:>@])],
457               [build_mathvec=$enableval],
458               [build_mathvec=notset])
460 AC_TRY_COMPILE([], [
461 #ifndef __CET__
462 # error no CET compiler support
463 #endif],
464                [libc_cv_compiler_default_cet=yes],
465                [libc_cv_compiler_default_cet=no])
467 AC_ARG_ENABLE([cet],
468               AS_HELP_STRING([--enable-cet],
469                              [enable Intel Control-flow Enforcement Technology (CET), x86 only]),
470               [enable_cet=$enableval],
471               [enable_cet=$libc_cv_compiler_default_cet])
473 # We keep the original values in `$config_*' and never modify them, so we
474 # can write them unchanged into config.make.  Everything else uses
475 # $machine, $vendor, and $os, and changes them whenever convenient.
476 config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
478 # Don't allow vendor == "unknown"
479 test "$config_vendor" = unknown && config_vendor=
480 config_os="`echo $config_os | sed 's/^unknown-//'`"
482 # Some configurations imply other options.
483 elf=yes
485 # The configure fragment of a port can modify these to supplement
486 # or override the table in the case statement below.  No fragment should
487 # ever change the config_* variables, however.
488 machine=$config_machine
489 vendor=$config_vendor
490 os=$config_os
491 base_os=''
493 submachine=
494 AC_ARG_WITH([cpu],
495             AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
496             [dnl
497   case "$withval" in
498   yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
499   no) ;;
500   *) submachine="$withval" ;;
501   esac
504 # An preconfigure script can set this when it wants to disable the sanity
505 # check below.
506 libc_config_ok=no
508 # A preconfigure script for a system that may or may not use fpu
509 # sysdeps directories sets this to a preprocessor conditional for
510 # whether to use such directories.
511 with_fp_cond=1
513 dnl Let sysdeps/*/preconfigure act here.
514 LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
518 ### By using the undocumented --enable-hacker-mode option for configure
519 ### one can skip this test to make the configuration not fail for unsupported
520 ### platforms.
522 if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
523   case "$machine-$host_os" in
524   *-linux* | *-gnu*)
525     ;;
526   *)
527     AC_MSG_ERROR([
528 *** The GNU C library is currently unavailable for this platform.
529 *** If you are interested in seeing glibc on this platform visit
530 *** the "How to submit a new port" in the wiki:
531 ***   https://sourceware.org/glibc/wiki/#Development
532 *** and join the community!])
533     ;;
534   esac
537 # Set base_machine if not set by a preconfigure fragment.
538 test -n "$base_machine" || base_machine=$machine
539 AC_SUBST(base_machine)
541 # Determine whether to use fpu or nofpu sysdeps directories.
542 AC_CACHE_CHECK([for use of fpu sysdeps directories],
543                libc_cv_with_fp, [dnl
544 cat > conftest.c <<EOF
545 #if $with_fp_cond
546 int dummy;
547 #else
548 # error "no hardware floating point"
549 #endif
551 libc_cv_with_fp=no
552 if ${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s \
553    1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
554   libc_cv_with_fp=yes
556 rm -f conftest*])
557 AC_SUBST(libc_cv_with_fp)
559 AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
560 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
561                    [libc_cv_ssp=yes],
562                    [libc_cv_ssp=no])
565 AC_CACHE_CHECK(for -fstack-protector-strong, libc_cv_ssp_strong, [dnl
566 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-strong],
567                    [libc_cv_ssp_strong=yes],
568                    [libc_cv_ssp_strong=no])
571 AC_CACHE_CHECK(for -fstack-protector-all, libc_cv_ssp_all, [dnl
572 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-all],
573                    [libc_cv_ssp_all=yes],
574                    [libc_cv_ssp_all=no])
577 stack_protector=
578 no_stack_protector=
579 if test "$libc_cv_ssp" = yes; then
580   no_stack_protector="-fno-stack-protector -DSTACK_PROTECTOR_LEVEL=0"
581   AC_DEFINE(HAVE_CC_NO_STACK_PROTECTOR)
584 if test "$enable_stack_protector" = yes && test "$libc_cv_ssp" = yes; then
585   stack_protector="-fstack-protector"
586   AC_DEFINE(STACK_PROTECTOR_LEVEL, 1)
587 elif test "$enable_stack_protector" = all && test "$libc_cv_ssp_all" = yes; then
588   stack_protector="-fstack-protector-all"
589   AC_DEFINE(STACK_PROTECTOR_LEVEL, 2)
590 elif test "$enable_stack_protector" = strong && test "$libc_cv_ssp_strong" = yes; then
591   stack_protector="-fstack-protector-strong"
592   AC_DEFINE(STACK_PROTECTOR_LEVEL, 3)
593 else
594   stack_protector="-fno-stack-protector"
595   AC_DEFINE(STACK_PROTECTOR_LEVEL, 0)
597 AC_SUBST(libc_cv_ssp)
598 AC_SUBST(stack_protector)
599 AC_SUBST(no_stack_protector)
601 if test -n "$stack_protector"; then
602   dnl Don't run configure tests with stack-protection on, to avoid problems with
603   dnl bootstrapping.
604   no_ssp=-fno-stack-protector
605 else
606   no_ssp=
608   if test "$enable_stack_protector" != no; then
609     AC_MSG_ERROR([--enable-stack-protector=$enable_stack_protector specified, but specified level of stack protection is not supported by the compiler.])
610   fi
613 # For the multi-arch option we need support in the assembler & linker.
614 AC_CACHE_CHECK([for assembler and linker STT_GNU_IFUNC support],
615                libc_cv_ld_gnu_indirect_function, [dnl
616 cat > conftest.S <<EOF
617 .type foo,%gnu_indirect_function
618 foo:
619 .globl _start
620 _start:
621 .globl __start
622 __start:
623 .data
624 #ifdef _LP64
625 .quad foo
626 #else
627 .long foo
628 #endif
630 libc_cv_ld_gnu_indirect_function=no
631 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
632             -nostartfiles -nostdlib $no_ssp \
633             -o conftest conftest.S 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
634   # Do a link to see if the backend supports IFUNC relocs.
635   $READELF -r conftest 1>&AS_MESSAGE_LOG_FD
636   LC_ALL=C $READELF -Wr conftest | grep -q 'IRELATIVE\|R_SPARC_JMP_IREL' && {
637     libc_cv_ld_gnu_indirect_function=yes
638   }
640 rm -f conftest*])
642 # Check if gcc supports attribute ifunc as it is used in libc_ifunc macro.
643 AC_CACHE_CHECK([for gcc attribute ifunc support],
644                libc_cv_gcc_indirect_function, [dnl
645 cat > conftest.c <<EOF
646 extern int func (int);
647 int used_func (int a)
649   return a;
651 static void *resolver ()
653   return &used_func;
655 extern __typeof (func) func __attribute__ ((ifunc ("resolver")));
657 libc_cv_gcc_indirect_function=no
658 if ${CC-cc} -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD \
659    2>&AS_MESSAGE_LOG_FD ; then
660   if $READELF -s conftest.o | grep IFUNC >/dev/null 2>&AS_MESSAGE_LOG_FD; then
661     libc_cv_gcc_indirect_function=yes
662   fi
664 rm -f conftest*])
666 # Check if linker supports textrel relocation with ifunc (used on elf/tests).
667 # Note that it relies on libc_cv_ld_gnu_indirect_function test above.
668 AC_CACHE_CHECK([whether the linker supports textrels along with ifunc],
669                libc_cv_textrel_ifunc, [dnl
670 cat > conftest.S <<EOF
671 .type foo,%gnu_indirect_function
672 foo:
673 .globl _start
674 _start:
675 .globl __start
676 __start:
677 .data
678 #ifdef _LP64
679 .quad foo
680 #else
681 .long foo
682 #endif
683 .text
684 .globl address
685 address:
686 #ifdef _LP64
687 .quad address
688 #else
689 .long address
690 #endif
692 libc_cv_textrel_ifunc=no
693 if test $libc_cv_ld_gnu_indirect_function = yes; then
694    if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostartfiles -nostdlib $no_ssp -pie -o conftest conftest.S); then
695      libc_cv_textrel_ifunc=yes
696    fi
698 rm -f conftest*])
699 AC_SUBST(libc_cv_textrel_ifunc)
701 # Check if CC supports attribute retain as it is used in attribute_used_retain macro.
702 AC_CACHE_CHECK([for GNU attribute retain support],
703                libc_cv_gnu_retain, [dnl
704 cat > conftest.c <<EOF
705 static int var  __attribute__ ((used, retain, section ("__libc_atexit")));
707 libc_cv_gnu_retain=no
708 if ${CC-cc} -Werror -c conftest.c -o /dev/null 1>&AS_MESSAGE_LOG_FD \
709    2>&AS_MESSAGE_LOG_FD ; then
710   libc_cv_gnu_retain=yes
712 rm -f conftest*])
713 if test $libc_cv_gnu_retain = yes; then
714   AC_DEFINE(HAVE_GNU_RETAIN)
716 LIBC_CONFIG_VAR([have-gnu-retain], [$libc_cv_gnu_retain])
718 # Check if gcc warns about alias for function with incompatible types.
719 AC_CACHE_CHECK([if compiler warns about alias for function with incompatible types],
720                libc_cv_gcc_incompatible_alias, [dnl
721 cat > conftest.c <<EOF
722 int __redirect_foo (const void *s, int c);
724 __typeof (__redirect_foo) *foo_impl (void) __asm__ ("foo");
725 __typeof (__redirect_foo) *foo_impl (void)
727   return 0;
730 extern __typeof (__redirect_foo) foo_alias __attribute__ ((alias ("foo")));
732 libc_cv_gcc_incompatible_alias=yes
733 if ${CC-cc} -Werror -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
734   libc_cv_gcc_incompatible_alias=no
736 rm -f conftest*])
738 if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
739   if test x"$multi_arch" = xyes; then
740     AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
741   else
742     multi_arch=no
743   fi
745 if test x"$libc_cv_gcc_indirect_function" != xyes; then
746   # GCC 8+ emits a warning for alias with incompatible types and it might
747   # fail to build ifunc resolvers aliases to either weak or internal
748   # symbols.  Disables multiarch build in this case.
749   if test x"$libc_cv_gcc_incompatible_alias" == xyes; then
750     AC_MSG_WARN([gcc emits a warning for alias between functions of incompatible types])
751     if test x"$multi_arch" = xyes; then
752       AC_MSG_ERROR([--enable-multi-arch support requires a gcc with gnu-indirect-function support])
753     fi
754     AC_MSG_WARN([Multi-arch is disabled.])
755     multi_arch=no
756   elif test x"$multi_arch" = xyes; then
757     AC_MSG_WARN([--enable-multi-arch support recommends a gcc with gnu-indirect-function support.
758 Please use a gcc which supports it by default or configure gcc with --enable-gnu-indirect-function])
759   fi
761 multi_arch_d=
762 if test x"$multi_arch" != xno; then
763   multi_arch_d=/multiarch
766 # Compute the list of sysdep directories for this configuration.
767 # This can take a while to compute.
768 sysdep_dir=$srcdir/sysdeps
769 AC_MSG_CHECKING(sysdep dirs)
770 dnl We need to use [ and ] for other purposes for a while now.
771 changequote(,)dnl
772 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
773 os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
775 test "x$base_os" != x || case "$os" in
776 gnu*)
777   base_os=mach/hurd ;;
778 linux*)
779   base_os=unix/sysv ;;
780 esac
782 # For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
783 tail=$os
784 ostry=$os
785 while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
786   ostry="$ostry /$o"
787   tail=$o
788 done
789 o=`echo $tail | sed 's/[0-9]*$//'`
790 if test $o != $tail; then
791   ostry="$ostry /$o"
793 # For linux-gnu, try linux-gnu, then linux.
794 o=`echo $tail | sed 's/-.*$//'`
795 if test $o != $tail; then
796   ostry="$ostry /$o"
799 # For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
800 base=
801 tail=$base_os
802 while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
803   set $b
804   base="$base /$1"
805   tail="$2"
806 done
808 # For sparc/sparc32, try sparc/sparc32 and then sparc.
809 mach=
810 tail=$machine${submachine:+/$submachine}
811 while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
812   set $m
813   # Prepend the machine's FPU directory unless the architecture specific
814   # preconfigure disables it.
815   if test "$libc_cv_with_fp" = yes; then
816     maybe_fpu=/fpu
817   else
818     maybe_fpu=/nofpu
819   fi
820   # For each machine term, try it with and then without /multiarch.
821   for try_fpu in $maybe_fpu ''; do
822     for try_multi in $multi_arch_d ''; do
823       mach="$mach /$1$try_fpu$try_multi"
824     done
825   done
826   tail="$2"
827 done
829 dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
830 changequote([,])dnl
832 # Find what sysdep directories exist.
833 sysnames=
834 for b in $base ''; do
835   for m0 in $mach ''; do
836     for v in /$vendor ''; do
837       test "$v" = / && continue
838       for o in /$ostry ''; do
839         test "$o" = / && continue
840         for m in $mach ''; do
841           try_suffix="$m0$b$v$o$m"
842           if test -n "$try_suffix"; then
843             try_srcdir="${srcdir}/"
844             try="sysdeps$try_suffix"
845             test -n "$enable_debug_configure" &&
846             echo "$0 [DEBUG]: try $try" >&2
847             if test -d "$try_srcdir$try"; then
848               sysnames="$sysnames $try"
849               { test -n "$o" || test -n "$b"; } && os_used=t
850               { test -n "$m" || test -n "$m0"; } && machine_used=t
851               case x${m0:-$m} in
852               x*/$submachine) submachine_used=t ;;
853               esac
854             fi
855           fi
856         done
857       done
858     done
859   done
860 done
862 # If the assembler supports gnu_indirect_function symbol type and the
863 # architecture supports multi-arch, we enable multi-arch by default.
864 case $sysnames in
865 *"$multi_arch_d"*)
866   ;;
868   test x"$multi_arch" = xdefault && multi_arch=no
869   ;;
870 esac
871 if test x"$multi_arch" != xno; then
872   AC_DEFINE(USE_MULTIARCH)
874 AC_SUBST(multi_arch)
876 if test -z "$os_used" && test "$os" != none; then
877   AC_MSG_ERROR(Operating system $os is not supported.)
879 if test -z "$machine_used" && test "$machine" != none; then
880   AC_MSG_ERROR(The $machine is not supported.)
882 if test -z "$submachine_used" && test -n "$submachine"; then
883   AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
885 AC_SUBST(submachine)
887 # We have now validated the configuration.
889 # Expand the list of system names into a full list of directories
890 # from each element's parent name and Implies file (if present).
891 set $sysnames
892 names=
893 while test $# -gt 0; do
894   name=$1
895   shift
897   case " $names " in *" $name "*)
898     # Already in the list.
899     continue
900   esac
902   # Report each name as we discover it, so there is no long pause in output.
903   echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
905   name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
907   case $name in
908     /*) xsrcdir= ;;
909     *)  xsrcdir=$srcdir/ ;;
910   esac
911   test -n "$enable_debug_configure" &&
912   echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
914   for implies_file in Implies Implies-before Implies-after; do
915     implies_type=`echo $implies_file | sed s/-/_/`
916     eval ${implies_type}=
917     if test -f $xsrcdir$name/$implies_file; then
918       # Collect more names from the `Implies' file (removing comments).
919       implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
920       for x in $implied_candidate; do
921         found=no
922         if test -d $xsrcdir$name_base/$x; then
923           eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
924           found=yes
925         fi
926         try="sysdeps/$x"
927         try_srcdir=$srcdir/
928         test -n "$enable_debug_configure" &&
929          echo "[DEBUG]: $name $implies_file $x try() {$try_srcdir}$try" >&2
930         if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
931         then
932           eval "${implies_type}=\"\$${implies_type} \$try\""
933           found=yes
934         fi
935         if test $found = no; then
936           AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
937         fi
938       done
939     fi
940   done
942   # Add NAME to the list of names.
943   names="$names $name"
945   # Find the parent of NAME, using the empty string if it has none.
946 changequote(,)dnl
947   parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
948 changequote([,])dnl
950   test -n "$enable_debug_configure" &&
951     echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
952 Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
954   # Add the names implied by NAME, and NAME's parent (if it has one), to
955   # the list of names to be processed (the argument list).  We prepend the
956   # implied names to the list and append the parent.  We want implied
957   # directories to come before further directories inferred from the
958   # configuration components; this ensures that for sysv4, unix/common
959   # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
960   # after sysv4).
961   sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
962   test -n "$sysnames" && set $sysnames
963 done
965 # Add the default directories.
966 default_sysnames="sysdeps/generic"
967 sysnames="$names $default_sysnames"
968 AC_SUBST(sysnames)
969 # The other names were emitted during the scan.
970 AC_MSG_RESULT($default_sysnames)
973 ### Locate tools.
975 AC_PROG_INSTALL
976 if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
977   # The makefiles need to use a different form to find it in $srcdir.
978   INSTALL='\$(..)./scripts/install-sh -c'
980 AC_PROG_LN_S
982 LIBC_PROG_BINUTILS
984 # Accept binutils 2.25 or newer.
985 AC_CHECK_PROG_VER(AS, $AS, --version,
986                   [GNU assembler.* \([0-9]*\.[0-9.]*\)],
987                   [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
988                   AS=: critic_missing="$critic_missing as")
990 if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
991   # Accept gold 1.14 or higher
992   AC_CHECK_PROG_VER(LD, $LD, --version,
993                     [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
994                     [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
995                     LD=: critic_missing="$critic_missing GNU gold")
996 else
997   AC_CHECK_PROG_VER(LD, $LD, --version,
998                     [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
999                     [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
1000                     LD=: critic_missing="$critic_missing GNU ld")
1003 # These programs are version sensitive.
1004 AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
1005   [GNU Make[^0-9]*\([0-9][0-9.]*\)],
1006   [[4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
1008 AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
1009   [GNU gettext.* \([0-9]*\.[0-9.]*\)],
1010   [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
1011   MSGFMT=: aux_missing="$aux_missing msgfmt")
1012 AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
1013   [GNU texinfo.* \([0-9][0-9.]*\)],
1014   [4.[7-9]*|4.[1-9][0-9]*|[5-9].*],
1015   MAKEINFO=: aux_missing="$aux_missing makeinfo")
1016 AC_CHECK_PROG_VER(SED, sed, --version,
1017   [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
1018   [3.0[2-9]*|3.[1-9]*|[4-9]*],
1019   SED=: aux_missing="$aux_missing sed")
1020 AC_CHECK_PROG_VER(AWK, gawk, --version,
1021   [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
1022   [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
1023 AC_CHECK_PROG_VER(BISON, bison, --version,
1024   [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
1025   [2.7*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing bison")
1027 AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
1028 AC_TRY_COMPILE([], [
1029 #if !defined __GNUC__ || __GNUC__ < 6 || (__GNUC__ == 6 && __GNUC_MINOR__ < 2)
1030 #error insufficient compiler
1031 #endif],
1032                [libc_cv_compiler_ok=yes],
1033                [libc_cv_compiler_ok=no])])
1034 AS_IF([test $libc_cv_compiler_ok != yes],
1035       [critic_missing="$critic_missing compiler"])
1037 AC_CHECK_TOOL(NM, nm, false)
1039 if test "x$maintainer" = "xyes"; then
1040   AC_CHECK_PROGS(AUTOCONF, autoconf, no)
1041   case "x$AUTOCONF" in
1042   xno|x|x:) AUTOCONF=no ;;
1043   *)
1044     AC_CACHE_CHECK(dnl
1045   whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
1046     if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then
1047       libc_cv_autoconf_works=yes
1048     else
1049       libc_cv_autoconf_works=no
1050     fi])
1051     test $libc_cv_autoconf_works = yes || AUTOCONF=no
1052     ;;
1053   esac
1054   if test "x$AUTOCONF" = xno; then
1055     aux_missing="$aux_missing autoconf"
1056   fi
1057 else
1058   AUTOCONF=no
1061 # Check for python3 if available, or else python.
1062 AC_CHECK_PROG_VER(PYTHON_PROG, python3 python, --version,
1063   [Python \([0-9][0-9.]*\)],
1064   [3.[4-9]*|3.[1-9][0-9]*|[4-9].*|[1-9][0-9]*],
1065   critic_missing="$critic_missing python")
1066 PYTHON="$PYTHON_PROG -B"
1067 AC_SUBST(PYTHON)
1069 test -n "$critic_missing" && AC_MSG_ERROR([
1070 *** These critical programs are missing or too old:$critic_missing
1071 *** Check the INSTALL file for required versions.])
1073 test -n "$aux_missing" && AC_MSG_WARN([
1074 *** These auxiliary programs are missing or incompatible versions:$aux_missing
1075 *** some features or tests will be disabled.
1076 *** Check the INSTALL file for required versions.])
1078 # if using special system headers, find out the compiler's sekrit
1079 # header directory and add that to the list.  NOTE: Only does the right
1080 # thing on a system that doesn't need fixincludes.  (Not presently a problem.)
1081 if test -n "$sysheaders"; then
1082   SYSINCLUDES=-nostdinc
1083   for d in include include-fixed; do
1084     i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
1085     SYSINCLUDES="$SYSINCLUDES -isystem $i"
1086   done
1087   SYSINCLUDES="$SYSINCLUDES \
1088 -isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
1089   if test -n "$CXX"; then
1090     CXX_SYSINCLUDES=
1091     for cxxheaders in `$CXX -v -S -x c++ /dev/null -o /dev/null 2>&1 \
1092     | sed -n -e '1,/#include/d' -e 's/^ \(\/.*\/[cg]++\)/\1/p'`; do
1093       test "x$cxxheaders" != x &&
1094       CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders"
1095     done
1096   fi
1098 AC_SUBST(SYSINCLUDES)
1099 AC_SUBST(CXX_SYSINCLUDES)
1101 # Obtain some C++ header file paths.  This is used to make a local
1102 # copy of those headers in Makerules.
1103 if test -n "$CXX"; then
1104   find_cxx_header () {
1105     echo "#include <$1>" | $CXX -M -MP -x c++ - 2>/dev/null \
1106          | sed -n "\,$1:,{s/:\$//;p}"
1107   }
1108   CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
1109   CXX_CMATH_HEADER="$(find_cxx_header cmath)"
1110   CXX_BITS_STD_ABS_H="$(find_cxx_header bits/std_abs.h)"
1112 AC_SUBST(CXX_CSTDLIB_HEADER)
1113 AC_SUBST(CXX_CMATH_HEADER)
1114 AC_SUBST(CXX_BITS_STD_ABS_H)
1116 # Test if LD_LIBRARY_PATH contains the notation for the current directory
1117 # since this would lead to problems installing/building glibc.
1118 # LD_LIBRARY_PATH contains the current directory if one of the following
1119 # is true:
1120 # - one of the terminals (":" and ";") is the first or last sign
1121 # - two terminals occur directly after each other
1122 # - the path contains an element with a dot in it
1123 AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
1124 changequote(,)dnl
1125 case ${LD_LIBRARY_PATH} in
1126   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
1127     ld_library_path_setting="contains current directory"
1128     ;;
1129   *)
1130     ld_library_path_setting="ok"
1131     ;;
1132 esac
1133 changequote([,])dnl
1134 AC_MSG_RESULT($ld_library_path_setting)
1135 if test "$ld_library_path_setting" != "ok"; then
1136 AC_MSG_ERROR([
1137 *** LD_LIBRARY_PATH shouldn't contain the current directory when
1138 *** building glibc. Please change the environment variable
1139 *** and run configure again.])
1142 AC_PATH_PROG(BASH_SHELL, bash, no)
1144 AC_PATH_PROG(PERL, perl, no)
1145 if test "$PERL" != no &&
1146    (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1147   PERL=no
1149 AC_PATH_PROG(INSTALL_INFO, install-info, no,
1150              $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
1152 AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
1153 cat > conftest.s <<EOF
1154 .text
1155 foo:
1156 .set glibc_conftest_frobozz,foo
1157 .globl glibc_conftest_frobozz
1159 # The alpha-dec-osf1 assembler gives only a warning for `.set'
1160 # (but it doesn't work), so we must do a linking check to be sure.
1161 cat > conftest1.c <<\EOF
1162 extern int glibc_conftest_frobozz;
1163 void _start() { glibc_conftest_frobozz = 1; }
1165 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
1166             -nostartfiles -nostdlib $no_ssp \
1167             -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1168   libc_cv_asm_set_directive=yes
1169 else
1170   libc_cv_asm_set_directive=no
1172 rm -f conftest*])
1173 if test $libc_cv_asm_set_directive = yes; then
1174   AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1177 AC_CACHE_CHECK(linker support for protected data symbol,
1178                libc_cv_protected_data,
1179                [cat > conftest.c <<EOF
1180                 int bar __attribute__ ((visibility ("protected"))) = 1;
1182                 libc_cv_protected_data=no
1183                 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -o conftest.so); then
1184                   cat > conftest.c <<EOF
1185                   extern int bar;
1186                   int main (void) { return bar; }
1188                   if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp conftest.c -o conftest conftest.so); then
1189                     libc_cv_protected_data=yes
1190                   fi
1191                 fi
1192                 rm -f conftest.*
1193                ])
1194 AC_SUBST(libc_cv_protected_data)
1196 AC_CACHE_CHECK(linker support for INSERT in linker script,
1197                libc_cv_insert,
1198                [cat > conftest.c <<EOF
1199                 const int __attribute__ ((section(".bar"))) bar = 0x12345678;
1200                 int test (void) { return bar; }
1202                 cat > conftest.t <<EOF
1203                 SECTIONS
1204                 {
1205                   .bar : { *(.bar) }
1206                 }
1207                 INSERT AFTER .rela.dyn;
1209                 libc_cv_insert=no
1210                 if AC_TRY_COMMAND([${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -Wl,-T,conftest.t -o conftest.so]); then
1211                   libc_cv_insert=yes
1212                 fi
1213                 rm -f conftest.*
1214                ])
1215 AC_SUBST(libc_cv_insert)
1217 AC_CACHE_CHECK(for broken __attribute__((alias())),
1218                libc_cv_broken_alias_attribute,
1219                [cat > conftest.c <<EOF
1220                extern int foo (int x) __asm ("xyzzy");
1221                int bar (int x) { return x; }
1222                extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1223                extern int dfoo;
1224                extern __typeof (dfoo) dfoo __asm ("abccb");
1225                int dfoo = 1;
1227                libc_cv_broken_alias_attribute=yes
1228                if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1229                  if grep 'xyzzy' conftest.s >/dev/null &&
1230                     grep 'abccb' conftest.s >/dev/null; then
1231                    libc_cv_broken_alias_attribute=no
1232                  fi
1233                fi
1234                rm -f conftest.c conftest.s
1235                ])
1236 if test $libc_cv_broken_alias_attribute = yes; then
1237   AC_MSG_ERROR(working alias attribute support required)
1240 AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1241                libc_cv_have_sdata_section,
1242                [echo "int i;" > conftest.c
1243                 libc_cv_have_sdata_section=no
1244                 if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1245                    | grep '\.sdata' >/dev/null; then
1246                   libc_cv_have_sdata_section=yes
1247                 fi
1248                 rm -f conftest.c conftest.so
1249                ])
1250 if test $libc_cv_have_sdata_section = yes; then
1251   AC_DEFINE(HAVE_SDATA_SECTION)
1254 AC_CACHE_CHECK(for libunwind-support in compiler,
1255                libc_cv_cc_with_libunwind, [
1256   cat > conftest.c <<EOF
1257 int main (void) { return 0; }
1259   if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
1260      conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
1261     libc_cv_cc_with_libunwind=yes
1262   else
1263     libc_cv_cc_with_libunwind=no
1264   fi
1265   rm -f conftest*])
1266 AC_SUBST(libc_cv_cc_with_libunwind)
1267 if test $libc_cv_cc_with_libunwind = yes; then
1268   AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1271 ASFLAGS_config=
1272 AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1273                libc_cv_as_noexecstack, [dnl
1274 cat > conftest.c <<EOF
1275 void foo (void) { }
1277 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1278                    -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
1279    && grep .note.GNU-stack conftest.s >/dev/null \
1280    && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1281                       -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1282 then
1283   libc_cv_as_noexecstack=yes
1284 else
1285   libc_cv_as_noexecstack=no
1287 rm -f conftest*])
1288 if test $libc_cv_as_noexecstack = yes; then
1289   ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1291 AC_SUBST(ASFLAGS_config)
1293 AC_CACHE_CHECK(for -z combreloc,
1294                libc_cv_z_combreloc, [dnl
1295 cat > conftest.c <<EOF
1296 extern int bar (int);
1297 extern int mumble;
1298 int foo (void) { return bar (mumble); }
1300 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1301                         -fPIC -shared $no_ssp -o conftest.so conftest.c
1302                         -nostdlib -nostartfiles
1303                         -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
1304 then
1305 dnl The following test is a bit weak.  We must use a tool which can test
1306 dnl cross-platform since the gcc used can be a cross compiler.  Without
1307 dnl introducing new options this is not easily doable.  Instead use a tool
1308 dnl which always is cross-platform: readelf.  To detect whether -z combreloc
1309 dnl look for a section named .rel.dyn or .rela.dyn.
1310   if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then
1311     libc_cv_z_combreloc=yes
1312   else
1313     libc_cv_z_combreloc=no
1314   fi
1315 else
1316   libc_cv_z_combreloc=no
1318 rm -f conftest*])
1319 if test "$libc_cv_z_combreloc" = yes; then
1320   AC_DEFINE(HAVE_Z_COMBRELOC)
1322 AC_SUBST(libc_cv_z_combreloc)
1324 LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
1325                     [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
1326 AC_SUBST(libc_cv_z_execstack)
1328 LIBC_LINKER_FEATURE([-z start-stop-gc], [-Wl,-z,start-stop-gc],
1329                     [libc_cv_z_start_stop_gc=yes], [libc_cv_z_start_stop_gc=no])
1330 LIBC_CONFIG_VAR([have-z-start-stop-gc], [$libc_cv_z_start_stop_gc])
1332 LIBC_LINKER_FEATURE([--no-dynamic-linker],
1333                     [-Wl,--no-dynamic-linker],
1334                     [libc_cv_no_dynamic_linker=yes],
1335                     [libc_cv_no_dynamic_linker=no])
1336 LIBC_CONFIG_VAR([have-no-dynamic-linker], [$libc_cv_no_dynamic_linker])
1338 AC_CACHE_CHECK(for -static-pie, libc_cv_static_pie, [dnl
1339 LIBC_TRY_CC_OPTION([-static-pie],
1340                    [libc_cv_static_pie=yes],
1341                    [libc_cv_static_pie=no])
1343 LIBC_CONFIG_VAR([have-static-pie], [$libc_cv_static_pie])
1345 AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
1346 LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1349 AC_SUBST(libc_cv_fpie)
1351 AC_CACHE_CHECK(for --hash-style option,
1352                libc_cv_hashstyle, [dnl
1353 cat > conftest.c <<EOF
1354 int _start (void) { return 42; }
1356 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
1357                             -fPIC -shared -o conftest.so conftest.c
1358                             -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1359 then
1360   libc_cv_hashstyle=yes
1361 else
1362   libc_cv_hashstyle=no
1364 rm -f conftest*])
1365 AC_SUBST(libc_cv_hashstyle)
1367 # The linker's default -shared behavior is good enough if it
1368 # does these things that our custom linker scripts ensure that
1369 # all allocated NOTE sections come first.
1370 if test "$use_default_link" = default; then
1371   AC_CACHE_CHECK([for sufficient default -shared layout],
1372                   libc_cv_use_default_link, [dnl
1373   libc_cv_use_default_link=no
1374   cat > conftest.s <<\EOF
1375           .section .note.a,"a",%note
1376           .balign 4
1377           .long 4,4,9
1378           .string "GNU"
1379           .string "foo"
1380           .section .note.b,"a",%note
1381           .balign 4
1382           .long 4,4,9
1383           .string "GNU"
1384           .string "bar"
1386   if AC_TRY_COMMAND([dnl
1387   ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1388        ac_try=`$READELF -S conftest.so | sed -n \
1389          ['${x;p;}
1390           s/^ *\[ *[1-9][0-9]*\]  *\([^ ][^ ]*\)  *\([^ ][^ ]*\) .*$/\2 \1/
1391           t a
1392           b
1393           : a
1394           H']`
1395   then
1396     libc_seen_a=no libc_seen_b=no
1397     set -- $ac_try
1398     while test $# -ge 2 -a "$1" = NOTE; do
1399       case "$2" in
1400       .note.a) libc_seen_a=yes ;;
1401       .note.b) libc_seen_b=yes ;;
1402       esac
1403       shift 2
1404     done
1405     case "$libc_seen_a$libc_seen_b" in
1406     yesyes)
1407       libc_cv_use_default_link=yes
1408       ;;
1409     *)
1410       echo >&AS_MESSAGE_LOG_FD "\
1411 $libc_seen_a$libc_seen_b from:
1412 $ac_try"
1413       ;;
1414     esac
1415   fi
1416   rm -f conftest*])
1417   use_default_link=$libc_cv_use_default_link
1420 AC_CACHE_CHECK(for GLOB_DAT reloc,
1421                libc_cv_has_glob_dat, [dnl
1422 cat > conftest.c <<EOF
1423 extern int mumble;
1424 int foo (void) { return mumble; }
1426 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1427                         -fPIC -shared -o conftest.so conftest.c
1428                         -nostdlib -nostartfiles $no_ssp
1429                         1>&AS_MESSAGE_LOG_FD])
1430 then
1431 dnl look for GLOB_DAT relocation.
1432   if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then
1433     libc_cv_has_glob_dat=yes
1434   else
1435     libc_cv_has_glob_dat=no
1436   fi
1437 else
1438   libc_cv_has_glob_dat=no
1440 rm -f conftest*])
1441 AC_SUBST(libc_cv_has_glob_dat)
1443 AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
1444 cat > conftest.c <<EOF
1445 int foo;
1447 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
1448                             conftest.c 1>&AS_MESSAGE_LOG_FD])
1449 then
1450   libc_cv_fno_toplevel_reorder=yes
1451 else
1452   libc_cv_fno_toplevel_reorder=no
1454 rm -f conftest*])
1455 if test $libc_cv_fno_toplevel_reorder = yes; then
1456   fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
1457 else
1458   fno_unit_at_a_time=-fno-unit-at-a-time
1460 AC_SUBST(fno_unit_at_a_time)
1462 AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
1463 [dnl
1464 cat > conftest.c <<EOF
1465 __thread int i;
1466 void foo (void)
1468   i = 10;
1471 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
1472                    conftest.c 1>&AS_MESSAGE_LOG_FD])
1473 then
1474   libc_cv_mtls_dialect_gnu2=yes
1475 else
1476   libc_cv_mtls_dialect_gnu2=no
1478 rm -f conftest*])
1479 AC_SUBST(libc_cv_mtls_dialect_gnu2)
1480 LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
1482 AC_CACHE_CHECK(whether cc puts quotes around section names,
1483                libc_cv_have_section_quotes,
1484                [cat > conftest.c <<EOF
1485                 static const int foo
1486                 __attribute__ ((section ("bar"))) = 1;
1488                 if ${CC-cc} -S conftest.c -o conftest.s; then
1489                   if grep '\.section.*"bar"' conftest.s >/dev/null; then
1490                     libc_cv_have_section_quotes=yes
1491                   else
1492                     libc_cv_have_section_quotes=no
1493                   fi
1494                 else
1495                   libc_cv_have_section_quotes=unknown
1496                 fi
1497                 rm -f conftest.{c,s}
1498                 ])
1499 if test $libc_cv_have_section_quotes = yes; then
1500   AC_DEFINE(HAVE_SECTION_QUOTES)
1503 AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1504 cat > conftest.c <<\EOF
1505 void zero (void *x)
1507   __builtin_memset (x, 0, 1000);
1511 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "memset" > /dev/null]);
1512 then
1513   libc_cv_gcc_builtin_memset=no
1514 else
1515   libc_cv_gcc_builtin_memset=yes
1517 rm -f conftest* ])
1518 if test "$libc_cv_gcc_builtin_memset" = yes ; then
1519   AC_DEFINE(HAVE_BUILTIN_MEMSET)
1522 AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1523 cat > conftest.c <<\EOF
1524 extern char *strstr (const char *, const char *) __asm ("my_strstr");
1525 char *foo (const char *a, const char *b)
1527   return __builtin_strstr (a, b);
1531 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "my_strstr" > /dev/null]);
1532 then
1533   libc_cv_gcc_builtin_redirection=yes
1534 else
1535   libc_cv_gcc_builtin_redirection=no
1537 rm -f conftest* ])
1538 if test "$libc_cv_gcc_builtin_redirection" = no; then
1539   AC_MSG_ERROR([support for the symbol redirection needed])
1542 dnl Determine how to disable generation of FMA instructions.
1543 AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1544                libc_cv_cc_nofma, [dnl
1545 libc_cv_cc_nofma=
1546 for opt in -ffp-contract=off -mno-fused-madd; do
1547   LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1548 done])
1549 AC_SUBST(libc_cv_cc_nofma)
1551 if test -n "$submachine"; then
1552   AC_CACHE_CHECK([for compiler option for CPU variant],
1553                  libc_cv_cc_submachine, [dnl
1554   libc_cv_cc_submachine=no
1555   for opt in "-march=$submachine" "-mcpu=$submachine"; do
1556     LIBC_TRY_CC_OPTION([$opt], [
1557       libc_cv_cc_submachine="$opt"
1558       break], [])
1559   done])
1560   if test "x$libc_cv_cc_submachine" = xno; then
1561     AC_MSG_ERROR([${CC-cc} does not support $submachine])
1562   fi
1564 AC_SUBST(libc_cv_cc_submachine)
1566 AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
1567 __attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
1568 cat > conftest.c <<EOF
1569 void
1570 __attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1571 foo (void) {}
1573 libc_cv_cc_loop_to_function=no
1574 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1575 then
1576   libc_cv_cc_loop_to_function=yes
1578 rm -f conftest*])
1579 if test $libc_cv_cc_loop_to_function = yes; then
1580   AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1582 AC_SUBST(libc_cv_cc_loop_to_function)
1584 dnl Check whether we have the gd library available.
1585 AC_MSG_CHECKING(for libgd)
1586 if test "$with_gd" != "no"; then
1587   old_CFLAGS="$CFLAGS"
1588   CFLAGS="$CFLAGS $libgd_include"
1589   old_LDFLAGS="$LDFLAGS"
1590   LDFLAGS="$LDFLAGS $libgd_ldflags"
1591   old_LIBS="$LIBS"
1592   LIBS="$LIBS -lgd -lpng -lz -lm"
1593   AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <gd.h>]], [[gdImagePng (0, 0)]])],
1594                  [LIBGD=yes], [LIBGD=no])
1595   CFLAGS="$old_CFLAGS"
1596   LDFLAGS="$old_LDFLAGS"
1597   LIBS="$old_LIBS"
1598 else
1599   LIBGD=no
1601 AC_MSG_RESULT($LIBGD)
1602 AC_SUBST(LIBGD)
1604 # SELinux detection
1605 if test x$with_selinux = xno ; then
1606   have_selinux=no;
1607 else
1608   # See if we have the SELinux library
1609   AC_CHECK_LIB(selinux, is_selinux_enabled,
1610                have_selinux=yes, have_selinux=no)
1611   if test x$with_selinux = xyes ; then
1612     if test x$have_selinux = xno ; then
1613       AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found])
1614     fi
1615   fi
1617 # Check if we're building with SELinux support.
1618 if test "x$have_selinux" = xyes; then
1619   AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
1621   # See if we have the libaudit library
1622   AC_CHECK_LIB(audit, audit_log_user_avc_message,
1623                have_libaudit=yes, have_libaudit=no)
1624   if test "x$have_libaudit" = xyes; then
1625     AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
1626   fi
1627   AC_SUBST(have_libaudit)
1629   # See if we have the libcap library
1630   AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
1631   if test "x$have_libcap" = xyes; then
1632     AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
1633   fi
1634   AC_SUBST(have_libcap)
1636 AC_SUBST(have_selinux)
1638 CPPUNDEFS=
1639 dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
1640 dnl Since we are building the implementations of the fortified functions here,
1641 dnl having the macro defined interacts very badly.
1642 AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
1643 [AC_TRY_COMPILE([], [
1644 #ifdef _FORTIFY_SOURCE
1645 # error bogon
1646 #endif],
1647                 [libc_cv_predef_fortify_source=no],
1648                 [libc_cv_predef_fortify_source=yes])])
1649 if test $libc_cv_predef_fortify_source = yes; then
1650   CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
1652 AC_SUBST(CPPUNDEFS)
1654 # Some linkers on some architectures support __ehdr_start but with
1655 # bugs.  Make sure usage of it does not create relocations in the
1656 # output (as the linker should resolve them all for us).
1657 AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
1658                libc_cv_ehdr_start, [
1659 old_CFLAGS="$CFLAGS"
1660 old_LDFLAGS="$LDFLAGS"
1661 old_LIBS="$LIBS"
1662 CFLAGS="$CFLAGS -fPIC"
1663 LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp"
1664 LIBS=
1665 AC_LINK_IFELSE([AC_LANG_SOURCE([
1666 typedef struct {
1667   char foo;
1668   long val;
1669 } Ehdr;
1670 extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
1671 long ehdr (void) { return __ehdr_start.val; }
1672 ])],
1673                [if $READELF -r conftest | grep -F __ehdr_start >/dev/null; then
1674                   libc_cv_ehdr_start=broken
1675                 else
1676                   libc_cv_ehdr_start=yes
1677                 fi], [libc_cv_ehdr_start=no])
1678 CFLAGS="$old_CFLAGS"
1679 LDFLAGS="$old_LDFLAGS"
1680 LIBS="$old_LIBS"
1682 if test "$libc_cv_ehdr_start" = yes; then
1683   AC_DEFINE([HAVE_EHDR_START])
1684 elif test "$libc_cv_ehdr_start" = broken; then
1685   AC_MSG_WARN([linker is broken -- you should upgrade])
1688 dnl Starting with binutils 2.35, GAS can attach multiple symbol versions
1689 dnl to one symbol (PR 23840).
1690 AC_CACHE_CHECK(whether the assembler requires one version per symbol,
1691                libc_cv_symver_needs_alias, [dnl
1692   cat > conftest.s <<EOF
1693         .text
1694 testfunc:
1695         .globl testfunc
1696         .symver testfunc, testfunc1@VERSION1
1697         .symver testfunc, testfunc1@VERSION2
1699   libc_cv_symver_needs_alias=no
1700   if ${CC-cc} $ASFLAGS -c conftest.s 2>&AS_MESSAGE_LOG_FD; then
1701     libc_cv_symver_needs_alias=no
1702   else
1703     libc_cv_symver_needs_alias=yes
1704   fi
1705   rm conftest.*
1707 if test "$libc_cv_symver_needs_alias" = yes; then
1708   AC_DEFINE(SYMVER_NEEDS_ALIAS)
1711 AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
1712                libc_cv_builtin_trap, [dnl
1713 libc_cv_builtin_trap=no
1714 AC_TRY_COMPILE([], [__builtin_trap ()], [
1715 libc_undefs=`$NM -u conftest.o |
1716   LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1717     2>&AS_MESSAGE_LOG_FD` || {
1718   AC_MSG_ERROR([confusing output from $NM -u])
1720 echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1721 if test -z "$libc_undefs"; then
1722   libc_cv_builtin_trap=yes
1723 fi])])
1724 if test $libc_cv_builtin_trap = yes; then
1725   AC_DEFINE([HAVE_BUILTIN_TRAP])
1728 dnl C++ feature tests.
1729 AC_LANG_PUSH([C++])
1731 AC_CACHE_CHECK([whether the C++ compiler supports thread_local],
1732                libc_cv_cxx_thread_local, [
1733 old_CXXFLAGS="$CXXFLAGS"
1734 CXXFLAGS="$CXXFLAGS -std=gnu++11"
1735 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1736 #include <thread>
1738 // Compiler support.
1739 struct S
1741   S ();
1742   ~S ();
1744 thread_local S s;
1745 S * get () { return &s; }
1747 // libstdc++ support.
1748 #ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1749 #error __cxa_thread_atexit_impl not supported
1750 #endif
1751 ])],
1752                [libc_cv_cxx_thread_local=yes],
1753                [libc_cv_cxx_thread_local=no])
1754 CXXFLAGS="$old_CXXFLAGS"
1756 AC_SUBST(libc_cv_cxx_thread_local)
1758 AC_LANG_POP([C++])
1759 dnl End of C++ feature tests.
1761 ### End of automated tests.
1762 ### Now run sysdeps configure fragments.
1764 # They also can set these variables.
1765 use_ldconfig=no
1766 ldd_rewrite_script=no
1767 libc_cv_sysconfdir=$sysconfdir
1768 libc_cv_localstatedir=$localstatedir
1769 libc_cv_gcc_unwind_find_fde=no
1770 libc_cv_idn=no
1771 pthread_in_libc=yes
1773 # Iterate over all the sysdep directories we will use, running their
1774 # configure fragments.
1775 for dir in $sysnames; do
1776   case $dir in
1777     /*) dest=$dir ;;
1778     *)  dest=$srcdir/$dir ;;
1779   esac
1780   if test -r $dest/configure; then
1781     AC_MSG_RESULT(running configure fragment for $dir)
1782     . $dest/configure
1783   fi
1784 done
1786 if test x"$build_mathvec" = xnotset; then
1787   build_mathvec=no
1789 LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1791 AC_SUBST(libc_extra_cflags)
1792 AC_SUBST(libc_extra_cppflags)
1794 if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1795   AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1797 AC_SUBST(libc_cv_gcc_unwind_find_fde)
1799 # A sysdeps configure fragment can reset this if IFUNC is not actually
1800 # usable even though the assembler knows how to generate the symbol type.
1801 if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
1802   AC_DEFINE(HAVE_IFUNC)
1804 LIBC_CONFIG_VAR([have-ifunc], [$libc_cv_ld_gnu_indirect_function])
1806 if test x"$libc_cv_gcc_indirect_function" = xyes; then
1807   AC_DEFINE(HAVE_GCC_IFUNC)
1809 LIBC_CONFIG_VAR([have-gcc-ifunc], [$libc_cv_gcc_indirect_function])
1811 # This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1812 # configure fragment can override the value to prevent this AC_DEFINE.
1813 AC_SUBST(use_nscd)
1814 if test "x$use_nscd" != xno; then
1815   AC_DEFINE([USE_NSCD])
1817 if test "x$build_nscd" = xdefault; then
1818   build_nscd=$use_nscd
1821 AC_SUBST(libc_cv_slibdir)
1822 AC_SUBST(libc_cv_rtlddir)
1823 AC_SUBST(libc_cv_complocaledir)
1824 AC_SUBST(libc_cv_sysconfdir)
1825 AC_SUBST(libc_cv_localstatedir)
1826 AC_SUBST(libc_cv_rootsbindir)
1828 if test x$use_ldconfig = xyes; then
1829   AC_DEFINE(USE_LDCONFIG)
1831 AC_SUBST(use_ldconfig)
1832 AC_SUBST(ldd_rewrite_script)
1834 AC_SUBST(static)
1835 AC_SUBST(shared)
1837 AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1838 [libc_cv_pic_default=yes
1839 cat > conftest.c <<EOF
1840 #if defined __PIC__ || defined __pic__ || defined PIC || defined pic
1841 # error PIC is default.
1842 #endif
1844 if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1845   libc_cv_pic_default=no
1847 rm -f conftest.*])
1848 AC_SUBST(libc_cv_pic_default)
1850 AC_CACHE_CHECK([whether -fPIE is default], libc_cv_cc_pie_default,
1851 [libc_cv_cc_pie_default=yes
1852 cat > conftest.c <<EOF
1853 #if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1854 # error PIE is default.
1855 #endif
1857 if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1858   libc_cv_cc_pie_default=no
1860 rm -f conftest.*])
1861 libc_cv_pie_default=$libc_cv_cc_pie_default
1862 AC_SUBST(libc_cv_cc_pie_default)
1863 AC_SUBST(libc_cv_pie_default)
1865 # Set the `multidir' variable by grabbing the variable from the compiler.
1866 # We do it once and save the result in a generated makefile.
1867 libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory`
1868 AC_SUBST(libc_cv_multidir)
1870 if test "$static_pie" = yes; then
1871   # Check target support for static PIE
1872   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef SUPPORT_STATIC_PIE
1873 # error static PIE is not supported
1874 #endif]])], , AC_MSG_ERROR([the architecture does not support static PIE]))
1875   # The linker must support --no-dynamic-linker.
1876   if test "$libc_cv_no_dynamic_linker" != yes; then
1877     AC_MSG_ERROR([linker support for --no-dynamic-linker needed])
1878   fi
1879   # Default to PIE.
1880   libc_cv_pie_default=yes
1881   AC_DEFINE(ENABLE_STATIC_PIE)
1883 LIBC_CONFIG_VAR([enable-static-pie], [$static_pie])
1885 AC_SUBST(profile)
1886 AC_SUBST(static_nss)
1888 AC_SUBST(DEFINES)
1890 dnl See sysdeps/mach/configure.ac for this variable.
1891 AC_SUBST(mach_interface_list)
1893 VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1894 RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
1895 AC_SUBST(VERSION)
1896 AC_SUBST(RELEASE)
1898 if test "$pthread_in_libc" = yes; then
1899   AC_DEFINE(PTHREAD_IN_LIBC)
1901 AC_SUBST(pthread_in_libc)
1903 AC_CONFIG_FILES([config.make Makefile])
1904 AC_CONFIG_COMMANDS([default],[[
1905 case $CONFIG_FILES in *config.make*)
1906 echo "$config_vars" >> config.make;;
1907 esac
1908 test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1909 AC_OUTPUT