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/], [glibc])
4 AC_CONFIG_SRCDIR([include/features.h])
5 AC_CONFIG_HEADERS([config.h])
6 AC_CONFIG_AUX_DIR([scripts])
8 ACX_PKGVERSION([GNU libc])
9 ACX_BUGURL([http://www.gnu.org/software/libc/bugs.html])
10 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"],
11 [Package description])
12 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"],
13 [Bug reporting address])
15 # Glibc should not depend on any header files
16 AC_DEFUN([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
17 [m4_divert_text([DEFAULTS],
18 [ac_includes_default='/* none */'])])
20 # We require GCC, and by default use its preprocessor. Override AC_PROG_CPP
21 # here to work around the Autoconf issue discussed in
22 # <https://sourceware.org/ml/libc-alpha/2013-01/msg00721.html>.
23 AC_DEFUN([AC_PROG_CPP],
24 [AC_REQUIRE([AC_PROG_CC])dnl
25 AC_ARG_VAR([CPP], [C preprocessor])dnl
26 _AC_ARG_VAR_CPPFLAGS()dnl
27 # On Suns, sometimes $CPP names a directory.
28 if test -n "$CPP" && test -d "$CPP"; then
31 if test -z "$CPP"; then
37 # We require GCC. Override _AC_PROG_CC_C89 here to work around the Autoconf
39 # <https://sourceware.org/ml/libc-alpha/2013-01/msg00757.html>.
40 AC_DEFUN([_AC_PROG_CC_C89], [[$1]])
42 dnl This is here so we can set $subdirs directly based on configure fragments.
48 if test $host != $build; then
49 AC_CHECK_PROGS(BUILD_CC, gcc cc)
51 AC_SUBST(cross_compiling)
53 AC_CHECK_TOOL(READELF, readelf, false)
55 # We need the C++ compiler only for testing.
57 # It's useless to us if it can't link programs (e.g. missing -lstdc++).
58 AC_CACHE_CHECK([whether $CXX can link programs], libc_cv_cxx_link_ok, [dnl
60 # Default, dynamic case.
61 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
62 [libc_cv_cxx_link_ok=yes],
63 [libc_cv_cxx_link_ok=no])
65 old_LDFLAGS="$LDFLAGS"
66 LDFLAGS="$LDFLAGS -static"
67 AC_LINK_IFELSE([AC_LANG_SOURCE([
73 std::cout << "Hello, world!";
78 [libc_cv_cxx_link_ok=no])
79 LDFLAGS="$old_LDFLAGS"
81 AS_IF([test $libc_cv_cxx_link_ok != yes], [CXX=])
83 if test "`cd $srcdir; pwd -P`" = "`pwd -P`"; then
84 AC_MSG_ERROR([you must configure in a separate build directory])
87 # This will get text that should go into config.make.
90 # Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
92 AC_HELP_STRING([--with-gd=DIR],
93 [find libgd include dir and library with prefix DIR]),
97 *) libgd_include="-I$withval/include"
98 libgd_ldflags="-L$withval/lib" ;;
101 AC_ARG_WITH([gd-include],
102 AC_HELP_STRING([--with-gd-include=DIR],
103 [find libgd include files in DIR]),
105 case "$with_gd_include" in
107 *) libgd_include="-I$withval" ;;
110 AC_ARG_WITH([gd-lib],
111 AC_HELP_STRING([--with-gd-lib=DIR],
112 [find libgd library files in DIR]),
114 case "$with_gd_lib" in
116 *) libgd_ldflags="-L$withval" ;;
120 if test -n "$libgd_include"; then
121 config_vars="$config_vars
122 CFLAGS-memusagestat.c = $libgd_include"
124 if test -n "$libgd_ldflags"; then
125 config_vars="$config_vars
126 libgd-LDFLAGS = $libgd_ldflags"
129 dnl Arguments to specify presence of other packages/features.
130 AC_ARG_WITH([binutils],
131 AC_HELP_STRING([--with-binutils=PATH],
132 [specify location of binutils (as and ld)]),
133 [path_binutils=$withval],
135 AC_ARG_WITH([selinux],
136 AC_HELP_STRING([--with-selinux],
137 [if building with SELinux support]),
138 [with_selinux=$withval],
141 AC_ARG_WITH([headers],
142 AC_HELP_STRING([--with-headers=PATH],
143 [location of system headers to use
144 (for example /usr/src/linux/include)
145 @<:@default=compiler default@:>@]),
146 [sysheaders=$withval],
150 AC_SUBST(use_default_link)
151 AC_ARG_WITH([default-link],
152 AC_HELP_STRING([--with-default-link],
153 [do not use explicit linker scripts]),
154 [use_default_link=$withval],
155 [use_default_link=default])
157 AC_ARG_ENABLE([sanity-checks],
158 AC_HELP_STRING([--disable-sanity-checks],
159 [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
160 [enable_sanity=$enableval],
163 AC_ARG_ENABLE([shared],
164 AC_HELP_STRING([--enable-shared],
165 [build shared library @<:@default=yes if GNU ld@:>@]),
168 AC_ARG_ENABLE([profile],
169 AC_HELP_STRING([--enable-profile],
170 [build profiled library @<:@default=no@:>@]),
171 [profile=$enableval],
173 AC_ARG_ENABLE([static-pie],
174 AC_HELP_STRING([--enable-static-pie],
175 [enable static PIE support and use it in the testsuite @<:@default=no@:>@]),
176 [static_pie=$enableval],
178 AC_ARG_ENABLE([timezone-tools],
179 AC_HELP_STRING([--disable-timezone-tools],
180 [do not install timezone tools @<:@default=install@:>@]),
181 [enable_timezone_tools=$enableval],
182 [enable_timezone_tools=yes])
183 AC_SUBST(enable_timezone_tools)
185 AC_ARG_ENABLE([hardcoded-path-in-tests],
186 AC_HELP_STRING([--enable-hardcoded-path-in-tests],
187 [hardcode newly built glibc path in tests @<:@default=no@:>@]),
188 [hardcoded_path_in_tests=$enableval],
189 [hardcoded_path_in_tests=no])
190 AC_SUBST(hardcoded_path_in_tests)
192 AC_ARG_ENABLE([stackguard-randomization],
193 AC_HELP_STRING([--enable-stackguard-randomization],
194 [initialize __stack_chk_guard canary with a random number at program start]),
195 [enable_stackguard_randomize=$enableval],
196 [enable_stackguard_randomize=no])
197 if test "$enable_stackguard_randomize" = yes; then
198 AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
201 AC_ARG_ENABLE([hidden-plt],
202 AC_HELP_STRING([--disable-hidden-plt],
203 [do not hide internal function calls to avoid PLT]),
206 if test "x$hidden" = xno; then
210 AC_ARG_ENABLE([bind-now],
211 AC_HELP_STRING([--enable-bind-now],
212 [disable lazy relocations in DSOs]),
213 [bindnow=$enableval],
216 if test "x$bindnow" = xyes; then
220 dnl Build glibc with -fstack-protector, -fstack-protector-all, or
221 dnl -fstack-protector-strong.
222 AC_ARG_ENABLE([stack-protector],
223 AC_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\"]);;
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 AC_HELP_STRING([--enable-static-nss],
236 [build static NSS modules @<:@default=no@:>@]),
237 [static_nss=$enableval],
239 dnl Enable static NSS also if we build no shared objects.
240 if test x"$static_nss" = xyes || test x"$shared" = xno; then
242 AC_DEFINE(DO_STATIC_NSS)
245 AC_ARG_ENABLE([force-install],
246 AC_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],
250 AC_SUBST(force_install)
252 AC_ARG_ENABLE([maintainer-mode],
253 AC_HELP_STRING([--enable-maintainer-mode],
254 [enable make rules and dependencies not useful (and sometimes confusing) to the casual installer]),
255 [maintainer=$enableval],
258 dnl On some platforms we allow dropping compatibility with all kernel
260 AC_ARG_ENABLE([kernel],
261 AC_HELP_STRING([--enable-kernel=VERSION],
262 [compile for compatibility with kernel not older than VERSION]),
263 [minimum_kernel=$enableval],
265 dnl Prevent unreasonable values.
266 if test "$minimum_kernel" = yes || test "$minimum_kernel" = no; then
267 # Better nothing than this.
270 if test "$minimum_kernel" = current; then
271 minimum_kernel=`uname -r 2>/dev/null` || minimum_kernel=
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
278 AC_ARG_ENABLE([all-warnings],
279 AC_HELP_STRING([--enable-all-warnings],
280 [enable all useful warnings gcc can issue]),
281 [all_warnings=$enableval],
283 AC_SUBST(all_warnings)
285 AC_ARG_ENABLE([werror],
286 AC_HELP_STRING([--disable-werror],
287 [do not build with -Werror]),
288 [enable_werror=$enableval],
290 AC_SUBST(enable_werror)
292 AC_ARG_ENABLE([multi-arch],
293 AC_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 AC_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([crypt],
306 AC_HELP_STRING([--disable-crypt],
307 [do not build nor install the passphrase hashing library, libcrypt]),
308 [build_crypt=$enableval],
310 AC_SUBST(build_crypt)
312 AC_ARG_ENABLE([nss-crypt],
313 AC_HELP_STRING([--enable-nss-crypt],
314 [enable libcrypt to use nss]),
315 [nss_crypt=$enableval],
317 if test x$build_libcrypt = xno && test x$nss_crypt = xyes; then
318 AC_MSG_WARN([--enable-nss-crypt has no effect when libcrypt is disabled])
321 if test x$nss_crypt = xyes; then
322 nss_includes=-I$(nss-config --includedir 2>/dev/null)
323 if test $? -ne 0; then
324 AC_MSG_ERROR([cannot find include directory with nss-config])
326 nspr_includes=-I$(nspr-config --includedir 2>/dev/null)
327 if test $? -ne 0; then
328 AC_MSG_ERROR([cannot find include directory with nspr-config])
331 CFLAGS="$CFLAGS $nss_includes $nspr_includes"
332 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
334 #include <nsslowhash.h>
335 void f (void) { NSSLOW_Init (); }])],
336 libc_cv_nss_crypt=yes,
338 cannot find NSS headers with lowlevel hash function interfaces]))
340 old_LDFLAGS="$LDFLAGS"
341 LIBS="$LIBS -lfreebl3"
342 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
344 #include <nsslowhash.h>],
346 libc_cv_nss_crypt=yes,
348 cannot link program using lowlevel NSS hash functions]))
349 # Check to see if there is a static NSS cryptographic library.
350 # If there isn't then we can't link anything with libcrypt.a,
351 # and that might mean disabling some static tests.
352 LDFLAGS="$LDFLAGS -static"
353 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
355 #include <nsslowhash.h>],
357 libc_cv_static_nss_crypt=yes,
358 libc_cv_static_nss_crypt=no)
359 LDFLAGS="$old_LDFLAGS"
364 libc_cv_static_nss_crypt=no
366 AC_SUBST(libc_cv_nss_crypt)
367 AC_SUBST(libc_cv_static_nss_crypt)
370 AC_ARG_ENABLE([obsolete-rpc],
371 AC_HELP_STRING([--enable-obsolete-rpc],
372 [build and install the obsolete RPC code for link-time usage]),
373 [link_obsolete_rpc=$enableval],
374 [link_obsolete_rpc=no])
375 AC_SUBST(link_obsolete_rpc)
377 if test "$link_obsolete_rpc" = yes; then
378 AC_DEFINE(LINK_OBSOLETE_RPC)
381 AC_ARG_ENABLE([obsolete-nsl],
382 AC_HELP_STRING([--enable-obsolete-nsl],
383 [build and install the obsolete libnsl library and depending NSS modules]),
384 [build_obsolete_nsl=$enableval],
385 [build_obsolete_nsl=no])
386 AC_SUBST(build_obsolete_nsl)
388 if test "$build_obsolete_nsl" = yes; then
389 AC_DEFINE(LINK_OBSOLETE_NSL)
392 AC_ARG_ENABLE([systemtap],
393 [AS_HELP_STRING([--enable-systemtap],
394 [enable systemtap static probe points @<:@default=no@:>@])],
395 [systemtap=$enableval],
397 if test "x$systemtap" != xno; then
398 AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
400 CFLAGS="-std=gnu11 $CFLAGS"
401 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
402 void foo (int i, void *p)
404 asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
405 :: STAP_PROBE_ASM_OPERANDS (2, i, p));
406 }]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])
407 CFLAGS="$old_CFLAGS"])
408 if test $libc_cv_sdt = yes; then
409 AC_DEFINE([USE_STAP_PROBE])
410 elif test "x$systemtap" != xauto; then
411 AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
415 AC_ARG_ENABLE([build-nscd],
416 [AS_HELP_STRING([--disable-build-nscd],
417 [disable building and installing the nscd daemon])],
418 [build_nscd=$enableval],
419 [build_nscd=default])
422 # Note the use of $use_nscd is near the bottom of the file.
423 AC_ARG_ENABLE([nscd],
424 [AS_HELP_STRING([--disable-nscd],
425 [library functions will not contact the nscd daemon])],
426 [use_nscd=$enableval],
429 AC_ARG_ENABLE([pt_chown],
430 [AS_HELP_STRING([--enable-pt_chown],
431 [Enable building and installing pt_chown])],
432 [build_pt_chown=$enableval],
434 AC_SUBST(build_pt_chown)
435 if test "$build_pt_chown" = yes; then
436 AC_DEFINE(HAVE_PT_CHOWN)
439 AC_ARG_ENABLE([tunables],
440 [AS_HELP_STRING([--enable-tunables],
441 [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])],
442 [have_tunables=$enableval],
444 AC_SUBST(have_tunables)
445 if test "$have_tunables" = yes; then
446 AC_DEFINE(HAVE_TUNABLES)
449 # The abi-tags file uses a fairly simplistic model for name recognition that
450 # can't distinguish i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a
451 # $host_os of `gnu*' here to be `gnu-gnu*' just so that it can tell.
452 # This doesn't get used much beyond that, so it's fairly safe.
457 host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
461 AC_ARG_ENABLE([mathvec],
462 [AS_HELP_STRING([--enable-mathvec],
463 [Enable building and installing mathvec @<:@default depends on architecture@:>@])],
464 [build_mathvec=$enableval],
465 [build_mathvec=notset])
469 # error no CET compiler support
471 [libc_cv_compiler_default_cet=yes],
472 [libc_cv_compiler_default_cet=no])
475 AC_HELP_STRING([--enable-cet],
476 [enable Intel Control-flow Enforcement Technology (CET), x86 only]),
477 [enable_cet=$enableval],
478 [enable_cet=$libc_cv_compiler_default_cet])
480 # We keep the original values in `$config_*' and never modify them, so we
481 # can write them unchanged into config.make. Everything else uses
482 # $machine, $vendor, and $os, and changes them whenever convenient.
483 config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
485 # Don't allow vendor == "unknown"
486 test "$config_vendor" = unknown && config_vendor=
487 config_os="`echo $config_os | sed 's/^unknown-//'`"
489 # Some configurations imply other options.
492 # The configure fragment of a port can modify these to supplement
493 # or override the table in the case statement below. No fragment should
494 # ever change the config_* variables, however.
495 machine=$config_machine
496 vendor=$config_vendor
502 AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
505 yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
507 *) submachine="$withval" ;;
511 # An preconfigure script can set this when it wants to disable the sanity
515 # A preconfigure script for a system that may or may not use fpu
516 # sysdeps directories sets this to a preprocessor conditional for
517 # whether to use such directories.
520 dnl Let sysdeps/*/preconfigure act here.
521 LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
525 ### By using the undocumented --enable-hacker-mode option for configure
526 ### one can skip this test to make the configuration not fail for unsupported
529 if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
530 case "$machine-$host_os" in
535 *** The GNU C library is currently unavailable for this platform.
536 *** If you are interested in seeing glibc on this platform visit
537 *** the "How to submit a new port" in the wiki:
538 *** https://sourceware.org/glibc/wiki/#Development
539 *** and join the community!])
544 # Set base_machine if not set by a preconfigure fragment.
545 test -n "$base_machine" || base_machine=$machine
546 AC_SUBST(base_machine)
548 # Determine whether to use fpu or nofpu sysdeps directories.
549 AC_CACHE_CHECK([for use of fpu sysdeps directories],
550 libc_cv_with_fp, [dnl
551 cat > conftest.c <<EOF
555 # error "no hardware floating point"
559 if ${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s \
560 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
564 AC_SUBST(libc_cv_with_fp)
566 AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
567 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
572 AC_CACHE_CHECK(for -fstack-protector-strong, libc_cv_ssp_strong, [dnl
573 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-strong],
574 [libc_cv_ssp_strong=yes],
575 [libc_cv_ssp_strong=no])
578 AC_CACHE_CHECK(for -fstack-protector-all, libc_cv_ssp_all, [dnl
579 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-all],
580 [libc_cv_ssp_all=yes],
581 [libc_cv_ssp_all=no])
586 if test "$libc_cv_ssp" = yes; then
587 no_stack_protector="-fno-stack-protector -DSTACK_PROTECTOR_LEVEL=0"
588 AC_DEFINE(HAVE_CC_NO_STACK_PROTECTOR)
591 if test "$enable_stack_protector" = yes && test "$libc_cv_ssp" = yes; then
592 stack_protector="-fstack-protector"
593 AC_DEFINE(STACK_PROTECTOR_LEVEL, 1)
594 elif test "$enable_stack_protector" = all && test "$libc_cv_ssp_all" = yes; then
595 stack_protector="-fstack-protector-all"
596 AC_DEFINE(STACK_PROTECTOR_LEVEL, 2)
597 elif test "$enable_stack_protector" = strong && test "$libc_cv_ssp_strong" = yes; then
598 stack_protector="-fstack-protector-strong"
599 AC_DEFINE(STACK_PROTECTOR_LEVEL, 3)
601 stack_protector="-fno-stack-protector"
602 AC_DEFINE(STACK_PROTECTOR_LEVEL, 0)
604 AC_SUBST(libc_cv_ssp)
605 AC_SUBST(stack_protector)
606 AC_SUBST(no_stack_protector)
608 if test -n "$stack_protector"; then
609 dnl Don't run configure tests with stack-protection on, to avoid problems with
611 no_ssp=-fno-stack-protector
615 if test "$enable_stack_protector" != no; then
616 AC_MSG_ERROR([--enable-stack-protector=$enable_stack_protector specified, but specified level of stack protection is not supported by the compiler.])
620 # For the multi-arch option we need support in the assembler & linker.
621 AC_CACHE_CHECK([for assembler and linker STT_GNU_IFUNC support],
622 libc_cv_ld_gnu_indirect_function, [dnl
623 cat > conftest.S <<EOF
624 .type foo,%gnu_indirect_function
637 libc_cv_ld_gnu_indirect_function=no
638 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
639 -nostartfiles -nostdlib $no_ssp \
640 -o conftest conftest.S 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
641 # Do a link to see if the backend supports IFUNC relocs.
642 $READELF -r conftest 1>&AS_MESSAGE_LOG_FD
643 LC_ALL=C $READELF -r conftest | grep 'no relocations' >/dev/null || {
644 libc_cv_ld_gnu_indirect_function=yes
649 # Check if gcc supports attribute ifunc as it is used in libc_ifunc macro.
650 AC_CACHE_CHECK([for gcc attribute ifunc support],
651 libc_cv_gcc_indirect_function, [dnl
652 cat > conftest.c <<EOF
653 extern int func (int);
654 int used_func (int a)
658 static void *resolver ()
662 extern __typeof (func) func __attribute__ ((ifunc ("resolver")));
664 libc_cv_gcc_indirect_function=no
665 if ${CC-cc} -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD \
666 2>&AS_MESSAGE_LOG_FD ; then
667 if $READELF -s conftest.o | grep IFUNC >/dev/null 2>&AS_MESSAGE_LOG_FD; then
668 libc_cv_gcc_indirect_function=yes
673 # Check if gcc warns about alias for function with incompatible types.
674 AC_CACHE_CHECK([if compiler warns about alias for function with incompatible types],
675 libc_cv_gcc_incompatible_alias, [dnl
676 cat > conftest.c <<EOF
677 int __redirect_foo (const void *s, int c);
679 __typeof (__redirect_foo) *foo_impl (void) __asm__ ("foo");
680 __typeof (__redirect_foo) *foo_impl (void)
685 extern __typeof (__redirect_foo) foo_alias __attribute__ ((alias ("foo")));
687 libc_cv_gcc_incompatible_alias=yes
688 if ${CC-cc} -Werror -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
689 libc_cv_gcc_incompatible_alias=no
693 if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
694 if test x"$multi_arch" = xyes; then
695 AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
700 if test x"$libc_cv_gcc_indirect_function" != xyes; then
701 # GCC 8+ emits a warning for alias with incompatible types and it might
702 # fail to build ifunc resolvers aliases to either weak or internal
703 # symbols. Disables multiarch build in this case.
704 if test x"$libc_cv_gcc_incompatible_alias" == xyes; then
705 AC_MSG_WARN([gcc emits a warning for alias between functions of incompatible types])
706 if test x"$multi_arch" = xyes; then
707 AC_MSG_ERROR([--enable-multi-arch support requires a gcc with gnu-indirect-function support])
709 AC_MSG_WARN([Multi-arch is disabled.])
711 elif test x"$multi_arch" = xyes; then
712 AC_MSG_WARN([--enable-multi-arch support recommends a gcc with gnu-indirect-function support.
713 Please use a gcc which supports it by default or configure gcc with --enable-gnu-indirect-function])
717 if test x"$multi_arch" != xno; then
718 multi_arch_d=/multiarch
721 # Compute the list of sysdep directories for this configuration.
722 # This can take a while to compute.
723 sysdep_dir=$srcdir/sysdeps
724 AC_MSG_CHECKING(sysdep dirs)
725 dnl We need to use [ and ] for other purposes for a while now.
727 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
728 os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
730 test "x$base_os" != x || case "$os" in
737 # For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
740 while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
744 o=`echo $tail | sed 's/[0-9]*$//'`
745 if test $o != $tail; then
748 # For linux-gnu, try linux-gnu, then linux.
749 o=`echo $tail | sed 's/-.*$//'`
750 if test $o != $tail; then
754 # For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
757 while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
763 # For sparc/sparc32, try sparc/sparc32 and then sparc.
765 tail=$machine${submachine:+/$submachine}
766 while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
768 # Prepend the machine's FPU directory unless --without-fp.
769 if test "$libc_cv_with_fp" = yes; then
774 # For each machine term, try it with and then without /multiarch.
775 for try_fpu in $maybe_fpu ''; do
776 for try_multi in $multi_arch_d ''; do
777 mach="$mach /$1$try_fpu$try_multi"
783 dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
786 # Find what sysdep directories exist.
788 for b in $base ''; do
789 for m0 in $mach ''; do
790 for v in /$vendor ''; do
791 test "$v" = / && continue
792 for o in /$ostry ''; do
793 test "$o" = / && continue
794 for m in $mach ''; do
795 try_suffix="$m0$b$v$o$m"
796 if test -n "$try_suffix"; then
797 try_srcdir="${srcdir}/"
798 try="sysdeps$try_suffix"
799 test -n "$enable_debug_configure" &&
800 echo "$0 [DEBUG]: try $try" >&2
801 if test -d "$try_srcdir$try"; then
802 sysnames="$sysnames $try"
803 { test -n "$o" || test -n "$b"; } && os_used=t
804 { test -n "$m" || test -n "$m0"; } && machine_used=t
806 x*/$submachine) submachine_used=t ;;
816 # If the assembler supports gnu_indirect_function symbol type and the
817 # architecture supports multi-arch, we enable multi-arch by default.
822 test x"$multi_arch" = xdefault && multi_arch=no
825 if test x"$multi_arch" != xno; then
826 AC_DEFINE(USE_MULTIARCH)
830 if test -z "$os_used" && test "$os" != none; then
831 AC_MSG_ERROR(Operating system $os is not supported.)
833 if test -z "$machine_used" && test "$machine" != none; then
834 AC_MSG_ERROR(The $machine is not supported.)
836 if test -z "$submachine_used" && test -n "$submachine"; then
837 AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
841 # We have now validated the configuration.
843 # Expand the list of system names into a full list of directories
844 # from each element's parent name and Implies file (if present).
847 while test $# -gt 0; do
851 case " $names " in *" $name "*)
852 # Already in the list.
856 # Report each name as we discover it, so there is no long pause in output.
857 echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
859 name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
863 *) xsrcdir=$srcdir/ ;;
865 test -n "$enable_debug_configure" &&
866 echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
868 for implies_file in Implies Implies-before Implies-after; do
869 implies_type=`echo $implies_file | sed s/-/_/`
870 eval ${implies_type}=
871 if test -f $xsrcdir$name/$implies_file; then
872 # Collect more names from the `Implies' file (removing comments).
873 implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
874 for x in $implied_candidate; do
876 if test -d $xsrcdir$name_base/$x; then
877 eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
882 test -n "$enable_debug_configure" &&
883 echo "[DEBUG]: $name $implies_file $x try() {$try_srcdir}$try" >&2
884 if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
886 eval "${implies_type}=\"\$${implies_type} \$try\""
889 if test $found = no; then
890 AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
896 # Add NAME to the list of names.
899 # Find the parent of NAME, using the empty string if it has none.
901 parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
904 test -n "$enable_debug_configure" &&
905 echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
906 Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
908 # Add the names implied by NAME, and NAME's parent (if it has one), to
909 # the list of names to be processed (the argument list). We prepend the
910 # implied names to the list and append the parent. We want implied
911 # directories to come before further directories inferred from the
912 # configuration components; this ensures that for sysv4, unix/common
913 # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
915 sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
916 test -n "$sysnames" && set $sysnames
919 # Add the default directories.
920 default_sysnames="sysdeps/generic"
921 sysnames="$names $default_sysnames"
923 # The other names were emitted during the scan.
924 AC_MSG_RESULT($default_sysnames)
930 if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
931 # The makefiles need to use a different form to find it in $srcdir.
932 INSTALL='\$(..)./scripts/install-sh -c'
938 # Accept binutils 2.25 or newer.
939 AC_CHECK_PROG_VER(AS, $AS, --version,
940 [GNU assembler.* \([0-9]*\.[0-9.]*\)],
941 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
942 AS=: critic_missing="$critic_missing as")
944 if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
945 # Accept gold 1.14 or higher
946 AC_CHECK_PROG_VER(LD, $LD, --version,
947 [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
948 [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
949 LD=: critic_missing="$critic_missing GNU gold")
951 AC_CHECK_PROG_VER(LD, $LD, --version,
952 [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
953 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
954 LD=: critic_missing="$critic_missing GNU ld")
957 # These programs are version sensitive.
959 AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
960 [GNU Make[^0-9]*\([0-9][0-9.]*\)],
961 [[4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
963 AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
964 [GNU gettext.* \([0-9]*\.[0-9.]*\)],
965 [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
966 MSGFMT=: aux_missing="$aux_missing msgfmt")
967 AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
968 [GNU texinfo.* \([0-9][0-9.]*\)],
969 [4.[7-9]*|4.[1-9][0-9]*|[5-9].*],
970 MAKEINFO=: aux_missing="$aux_missing makeinfo")
971 AC_CHECK_PROG_VER(SED, sed, --version,
972 [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
973 [3.0[2-9]*|3.[1-9]*|[4-9]*],
974 SED=: aux_missing="$aux_missing sed")
975 AC_CHECK_PROG_VER(AWK, gawk, --version,
976 [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
977 [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
978 AC_CHECK_PROG_VER(BISON, bison, --version,
979 [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
980 [2.7*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing bison")
982 AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
984 #if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9)
985 #error insufficient compiler
987 [libc_cv_compiler_ok=yes],
988 [libc_cv_compiler_ok=no])])
989 AS_IF([test $libc_cv_compiler_ok != yes],
990 [critic_missing="$critic_missing compiler"])
992 AC_CHECK_TOOL(NM, nm, false)
994 if test "x$maintainer" = "xyes"; then
995 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
997 xno|x|x:) AUTOCONF=no ;;
1000 whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
1001 if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then
1002 libc_cv_autoconf_works=yes
1004 libc_cv_autoconf_works=no
1006 test $libc_cv_autoconf_works = yes || AUTOCONF=no
1009 if test "x$AUTOCONF" = xno; then
1010 aux_missing="$aux_missing autoconf"
1016 # Check for python3 if available, or else python.
1017 AC_CHECK_PROGS(PYTHON_PROG, python3 python,no)
1018 case "x$PYTHON_PROG" in
1019 xno|x|x:) PYTHON_PROG=no ;;
1023 if test "x$PYTHON_PROG" = xno; then
1024 aux_missing="$aux_missing python"
1026 PYTHON="$PYTHON_PROG -B"
1030 test -n "$critic_missing" && AC_MSG_ERROR([
1031 *** These critical programs are missing or too old:$critic_missing
1032 *** Check the INSTALL file for required versions.])
1034 test -n "$aux_missing" && AC_MSG_WARN([
1035 *** These auxiliary programs are missing or incompatible versions:$aux_missing
1036 *** some features or tests will be disabled.
1037 *** Check the INSTALL file for required versions.])
1039 # if using special system headers, find out the compiler's sekrit
1040 # header directory and add that to the list. NOTE: Only does the right
1041 # thing on a system that doesn't need fixincludes. (Not presently a problem.)
1042 if test -n "$sysheaders"; then
1043 SYSINCLUDES=-nostdinc
1044 for d in include include-fixed; do
1045 i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
1046 SYSINCLUDES="$SYSINCLUDES -isystem $i"
1048 SYSINCLUDES="$SYSINCLUDES \
1049 -isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
1050 if test -n "$CXX"; then
1052 for cxxheaders in `$CXX -v -S -x c++ /dev/null -o /dev/null 2>&1 \
1053 | sed -n -e '1,/#include/d' -e 's/^ \(\/.*\/[cg]++\)/\1/p'`; do
1054 test "x$cxxheaders" != x &&
1055 CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders"
1059 AC_SUBST(SYSINCLUDES)
1060 AC_SUBST(CXX_SYSINCLUDES)
1062 # Obtain some C++ header file paths. This is used to make a local
1063 # copy of those headers in Makerules.
1064 if test -n "$CXX"; then
1065 find_cxx_header () {
1066 echo "#include <$1>" | $CXX -M -MP -x c++ - 2>/dev/null \
1067 | sed -n "\,$1:,{s/:\$//;p}"
1069 CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
1070 CXX_CMATH_HEADER="$(find_cxx_header cmath)"
1071 CXX_BITS_STD_ABS_H="$(find_cxx_header bits/std_abs.h)"
1073 AC_SUBST(CXX_CSTDLIB_HEADER)
1074 AC_SUBST(CXX_CMATH_HEADER)
1075 AC_SUBST(CXX_BITS_STD_ABS_H)
1077 # Test if LD_LIBRARY_PATH contains the notation for the current directory
1078 # since this would lead to problems installing/building glibc.
1079 # LD_LIBRARY_PATH contains the current directory if one of the following
1081 # - one of the terminals (":" and ";") is the first or last sign
1082 # - two terminals occur directly after each other
1083 # - the path contains an element with a dot in it
1084 AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
1086 case ${LD_LIBRARY_PATH} in
1087 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
1088 ld_library_path_setting="contains current directory"
1091 ld_library_path_setting="ok"
1095 AC_MSG_RESULT($ld_library_path_setting)
1096 if test "$ld_library_path_setting" != "ok"; then
1098 *** LD_LIBRARY_PATH shouldn't contain the current directory when
1099 *** building glibc. Please change the environment variable
1100 *** and run configure again.])
1103 AC_PATH_PROG(BASH_SHELL, bash, no)
1105 AC_PATH_PROG(PERL, perl, no)
1106 if test "$PERL" != no &&
1107 (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1110 AC_PATH_PROG(INSTALL_INFO, install-info, no,
1111 $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
1113 AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
1114 cat > conftest.s <<EOF
1117 .set glibc_conftest_frobozz,foo
1118 .globl glibc_conftest_frobozz
1120 # The alpha-dec-osf1 assembler gives only a warning for `.set'
1121 # (but it doesn't work), so we must do a linking check to be sure.
1122 cat > conftest1.c <<\EOF
1123 extern int glibc_conftest_frobozz;
1124 void _start() { glibc_conftest_frobozz = 1; }
1126 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
1127 -nostartfiles -nostdlib $no_ssp \
1128 -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1129 libc_cv_asm_set_directive=yes
1131 libc_cv_asm_set_directive=no
1134 if test $libc_cv_asm_set_directive = yes; then
1135 AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1138 AC_CACHE_CHECK(linker support for protected data symbol,
1139 libc_cv_protected_data,
1140 [cat > conftest.c <<EOF
1141 int bar __attribute__ ((visibility ("protected"))) = 1;
1143 libc_cv_protected_data=no
1144 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -o conftest.so); then
1145 cat > conftest.c <<EOF
1147 int main (void) { return bar; }
1149 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp conftest.c -o conftest conftest.so); then
1150 libc_cv_protected_data=yes
1155 AC_SUBST(libc_cv_protected_data)
1157 AC_CACHE_CHECK(linker support for INSERT in linker script,
1159 [cat > conftest.c <<EOF
1160 const int __attribute__ ((section(".bar"))) bar = 0x12345678;
1161 int test (void) { return bar; }
1163 cat > conftest.t <<EOF
1168 INSERT AFTER .rela.dyn;
1171 if AC_TRY_COMMAND([${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -Wl,-T,conftest.t -o conftest.so]); then
1176 AC_SUBST(libc_cv_insert)
1178 AC_CACHE_CHECK(for broken __attribute__((alias())),
1179 libc_cv_broken_alias_attribute,
1180 [cat > conftest.c <<EOF
1181 extern int foo (int x) __asm ("xyzzy");
1182 int bar (int x) { return x; }
1183 extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1185 extern __typeof (dfoo) dfoo __asm ("abccb");
1188 libc_cv_broken_alias_attribute=yes
1189 if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1190 if grep 'xyzzy' conftest.s >/dev/null &&
1191 grep 'abccb' conftest.s >/dev/null; then
1192 libc_cv_broken_alias_attribute=no
1195 rm -f conftest.c conftest.s
1197 if test $libc_cv_broken_alias_attribute = yes; then
1198 AC_MSG_ERROR(working alias attribute support required)
1201 AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1202 libc_cv_have_sdata_section,
1203 [echo "int i;" > conftest.c
1204 libc_cv_have_sdata_section=no
1205 if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1206 | grep '\.sdata' >/dev/null; then
1207 libc_cv_have_sdata_section=yes
1209 rm -f conftest.c conftest.so
1211 if test $libc_cv_have_sdata_section = yes; then
1212 AC_DEFINE(HAVE_SDATA_SECTION)
1215 AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
1216 libc_cv_ctors_header, [dnl
1217 libc_cv_ctors_header=yes
1218 LIBC_TRY_LINK_STATIC([
1219 __attribute__ ((constructor)) void ctor (void) { asm (""); }
1220 __attribute__ ((destructor)) void dtor (void) { asm (""); }
1223 AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
1224 { gsub(/\@<:@ */, "@<:@") }
1225 $2 == ".ctors" || $2 == ".dtors" {
1226 size = strtonum("0x" $6)
1227 align = strtonum("0x" $NF)
1229 stub@<:@$2@:>@ = size == align * 2
1232 ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1233 dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1234 exit ((ctors_ok && dtors_ok) ? 0 : 1)
1236 '], [libc_cv_ctors_header=no])
1238 AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1241 if test $libc_cv_ctors_header = no; then
1242 AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1245 AC_CACHE_CHECK(for libunwind-support in compiler,
1246 libc_cv_cc_with_libunwind, [
1247 cat > conftest.c <<EOF
1248 int main (void) { return 0; }
1250 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
1251 conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
1252 libc_cv_cc_with_libunwind=yes
1254 libc_cv_cc_with_libunwind=no
1257 AC_SUBST(libc_cv_cc_with_libunwind)
1258 if test $libc_cv_cc_with_libunwind = yes; then
1259 AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1263 AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1264 libc_cv_as_noexecstack, [dnl
1265 cat > conftest.c <<EOF
1268 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1269 -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
1270 && grep .note.GNU-stack conftest.s >/dev/null \
1271 && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1272 -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1274 libc_cv_as_noexecstack=yes
1276 libc_cv_as_noexecstack=no
1279 if test $libc_cv_as_noexecstack = yes; then
1280 ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1282 AC_SUBST(ASFLAGS_config)
1284 AC_CACHE_CHECK(for -z combreloc,
1285 libc_cv_z_combreloc, [dnl
1286 cat > conftest.c <<EOF
1287 extern int bar (int);
1289 int foo (void) { return bar (mumble); }
1291 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1292 -fPIC -shared $no_ssp -o conftest.so conftest.c
1293 -nostdlib -nostartfiles
1294 -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
1296 dnl The following test is a bit weak. We must use a tool which can test
1297 dnl cross-platform since the gcc used can be a cross compiler. Without
1298 dnl introducing new options this is not easily doable. Instead use a tool
1299 dnl which always is cross-platform: readelf. To detect whether -z combreloc
1300 dnl look for a section named .rel.dyn or .rela.dyn.
1301 if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then
1302 libc_cv_z_combreloc=yes
1304 libc_cv_z_combreloc=no
1307 libc_cv_z_combreloc=no
1310 if test "$libc_cv_z_combreloc" = yes; then
1311 AC_DEFINE(HAVE_Z_COMBRELOC)
1313 AC_SUBST(libc_cv_z_combreloc)
1315 LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
1316 [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
1317 AC_SUBST(libc_cv_z_execstack)
1319 LIBC_LINKER_FEATURE([--no-dynamic-linker],
1320 [-Wl,--no-dynamic-linker],
1321 [libc_cv_no_dynamic_linker=yes],
1322 [libc_cv_no_dynamic_linker=no])
1323 LIBC_CONFIG_VAR([have-no-dynamic-linker], [$libc_cv_no_dynamic_linker])
1325 AC_CACHE_CHECK(for -static-pie, libc_cv_static_pie, [dnl
1326 LIBC_TRY_CC_OPTION([-static-pie],
1327 [libc_cv_static_pie=yes],
1328 [libc_cv_static_pie=no])
1330 LIBC_CONFIG_VAR([have-static-pie], [$libc_cv_static_pie])
1332 AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
1333 LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1336 AC_SUBST(libc_cv_fpie)
1338 AC_CACHE_CHECK(for --hash-style option,
1339 libc_cv_hashstyle, [dnl
1340 cat > conftest.c <<EOF
1341 int _start (void) { return 42; }
1343 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
1344 -fPIC -shared -o conftest.so conftest.c
1345 -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1347 libc_cv_hashstyle=yes
1349 libc_cv_hashstyle=no
1352 AC_SUBST(libc_cv_hashstyle)
1354 # The linker's default -shared behavior is good enough if it
1355 # does these things that our custom linker scripts ensure that
1356 # all allocated NOTE sections come first.
1357 if test "$use_default_link" = default; then
1358 AC_CACHE_CHECK([for sufficient default -shared layout],
1359 libc_cv_use_default_link, [dnl
1360 libc_cv_use_default_link=no
1361 cat > conftest.s <<\EOF
1362 .section .note.a,"a",%note
1367 .section .note.b,"a",%note
1373 if AC_TRY_COMMAND([dnl
1374 ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1375 ac_try=`$READELF -S conftest.so | sed -n \
1377 s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/
1383 libc_seen_a=no libc_seen_b=no
1385 while test $# -ge 2 -a "$1" = NOTE; do
1387 .note.a) libc_seen_a=yes ;;
1388 .note.b) libc_seen_b=yes ;;
1392 case "$libc_seen_a$libc_seen_b" in
1394 libc_cv_use_default_link=yes
1397 echo >&AS_MESSAGE_LOG_FD "\
1398 $libc_seen_a$libc_seen_b from:
1404 use_default_link=$libc_cv_use_default_link
1407 AC_CACHE_CHECK(for GLOB_DAT reloc,
1408 libc_cv_has_glob_dat, [dnl
1409 cat > conftest.c <<EOF
1411 int foo (void) { return mumble; }
1413 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1414 -fPIC -shared -o conftest.so conftest.c
1415 -nostdlib -nostartfiles $no_ssp
1416 1>&AS_MESSAGE_LOG_FD])
1418 dnl look for GLOB_DAT relocation.
1419 if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then
1420 libc_cv_has_glob_dat=yes
1422 libc_cv_has_glob_dat=no
1425 libc_cv_has_glob_dat=no
1428 AC_SUBST(libc_cv_has_glob_dat)
1430 AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
1431 if libc_cv_output_format=`
1432 ${CC-cc} -nostartfiles -nostdlib $no_ssp -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
1436 libc_cv_output_format=
1438 test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1439 AC_SUBST(libc_cv_output_format)
1441 AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
1442 cat > conftest.c <<EOF
1445 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
1446 conftest.c 1>&AS_MESSAGE_LOG_FD])
1448 libc_cv_fno_toplevel_reorder=yes
1450 libc_cv_fno_toplevel_reorder=no
1453 if test $libc_cv_fno_toplevel_reorder = yes; then
1454 fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
1456 fno_unit_at_a_time=-fno-unit-at-a-time
1458 AC_SUBST(fno_unit_at_a_time)
1460 AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
1462 cat > conftest.c <<EOF
1469 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
1470 conftest.c 1>&AS_MESSAGE_LOG_FD])
1472 libc_cv_mtls_dialect_gnu2=yes
1474 libc_cv_mtls_dialect_gnu2=no
1477 AC_SUBST(libc_cv_mtls_dialect_gnu2)
1478 LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
1480 AC_CACHE_CHECK(whether cc puts quotes around section names,
1481 libc_cv_have_section_quotes,
1482 [cat > conftest.c <<EOF
1483 static const int foo
1484 __attribute__ ((section ("bar"))) = 1;
1486 if ${CC-cc} -S conftest.c -o conftest.s; then
1487 if grep '\.section.*"bar"' conftest.s >/dev/null; then
1488 libc_cv_have_section_quotes=yes
1490 libc_cv_have_section_quotes=no
1493 libc_cv_have_section_quotes=unknown
1495 rm -f conftest.{c,s}
1497 if test $libc_cv_have_section_quotes = yes; then
1498 AC_DEFINE(HAVE_SECTION_QUOTES)
1501 AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1502 cat > conftest.c <<\EOF
1505 __builtin_memset (x, 0, 1000);
1509 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "memset" > /dev/null]);
1511 libc_cv_gcc_builtin_memset=no
1513 libc_cv_gcc_builtin_memset=yes
1516 if test "$libc_cv_gcc_builtin_memset" = yes ; then
1517 AC_DEFINE(HAVE_BUILTIN_MEMSET)
1520 AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1521 cat > conftest.c <<\EOF
1522 extern char *strstr (const char *, const char *) __asm ("my_strstr");
1523 char *foo (const char *a, const char *b)
1525 return __builtin_strstr (a, b);
1529 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "my_strstr" > /dev/null]);
1531 libc_cv_gcc_builtin_redirection=yes
1533 libc_cv_gcc_builtin_redirection=no
1536 if test "$libc_cv_gcc_builtin_redirection" = no; then
1537 AC_MSG_ERROR([support for the symbol redirection needed])
1540 dnl Determine how to disable generation of FMA instructions.
1541 AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1542 libc_cv_cc_nofma, [dnl
1544 for opt in -ffp-contract=off -mno-fused-madd; do
1545 LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1547 AC_SUBST(libc_cv_cc_nofma)
1549 if test -n "$submachine"; then
1550 AC_CACHE_CHECK([for compiler option for CPU variant],
1551 libc_cv_cc_submachine, [dnl
1552 libc_cv_cc_submachine=no
1553 for opt in "-march=$submachine" "-mcpu=$submachine"; do
1554 LIBC_TRY_CC_OPTION([$opt], [
1555 libc_cv_cc_submachine="$opt"
1558 if test "x$libc_cv_cc_submachine" = xno; then
1559 AC_MSG_ERROR([${CC-cc} does not support $submachine])
1562 AC_SUBST(libc_cv_cc_submachine)
1564 AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
1565 __attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
1566 cat > conftest.c <<EOF
1568 __attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1571 libc_cv_cc_loop_to_function=no
1572 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1574 libc_cv_cc_loop_to_function=yes
1577 if test $libc_cv_cc_loop_to_function = yes; then
1578 AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1580 AC_SUBST(libc_cv_cc_loop_to_function)
1582 dnl Check whether we have the gd library available.
1583 AC_MSG_CHECKING(for libgd)
1584 if test "$with_gd" != "no"; then
1585 old_CFLAGS="$CFLAGS"
1586 CFLAGS="$CFLAGS $libgd_include"
1587 old_LDFLAGS="$LDFLAGS"
1588 LDFLAGS="$LDFLAGS $libgd_ldflags"
1590 LIBS="$LIBS -lgd -lpng -lz -lm"
1591 AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
1592 CFLAGS="$old_CFLAGS"
1593 LDFLAGS="$old_LDFLAGS"
1598 AC_MSG_RESULT($LIBGD)
1602 if test x$with_selinux = xno ; then
1605 # See if we have the SELinux library
1606 AC_CHECK_LIB(selinux, is_selinux_enabled,
1607 have_selinux=yes, have_selinux=no)
1608 if test x$with_selinux = xyes ; then
1609 if test x$have_selinux = xno ; then
1610 AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found])
1614 # Check if we're building with SELinux support.
1615 if test "x$have_selinux" = xyes; then
1616 AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
1618 # See if we have the libaudit library
1619 AC_CHECK_LIB(audit, audit_log_user_avc_message,
1620 have_libaudit=yes, have_libaudit=no)
1621 if test "x$have_libaudit" = xyes; then
1622 AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
1624 AC_SUBST(have_libaudit)
1626 # See if we have the libcap library
1627 AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
1628 if test "x$have_libcap" = xyes; then
1629 AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
1631 AC_SUBST(have_libcap)
1633 AC_SUBST(have_selinux)
1636 dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
1637 dnl Since we are building the implementations of the fortified functions here,
1638 dnl having the macro defined interacts very badly.
1639 AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
1640 [AC_TRY_COMPILE([], [
1641 #ifdef _FORTIFY_SOURCE
1644 [libc_cv_predef_fortify_source=no],
1645 [libc_cv_predef_fortify_source=yes])])
1646 if test $libc_cv_predef_fortify_source = yes; then
1647 CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
1651 # Some linkers on some architectures support __ehdr_start but with
1652 # bugs. Make sure usage of it does not create relocations in the
1653 # output (as the linker should resolve them all for us).
1654 AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
1655 libc_cv_ehdr_start, [
1656 old_CFLAGS="$CFLAGS"
1657 old_LDFLAGS="$LDFLAGS"
1659 CFLAGS="$CFLAGS -fPIC"
1660 LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp"
1662 AC_LINK_IFELSE([AC_LANG_SOURCE([
1667 extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
1668 long ehdr (void) { return __ehdr_start.val; }
1670 [if $READELF -r conftest | grep -F __ehdr_start >/dev/null; then
1671 libc_cv_ehdr_start=broken
1673 libc_cv_ehdr_start=yes
1674 fi], [libc_cv_ehdr_start=no])
1675 CFLAGS="$old_CFLAGS"
1676 LDFLAGS="$old_LDFLAGS"
1679 if test "$libc_cv_ehdr_start" = yes; then
1680 AC_DEFINE([HAVE_EHDR_START])
1681 elif test "$libc_cv_ehdr_start" = broken; then
1682 AC_MSG_WARN([linker is broken -- you should upgrade])
1685 AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
1686 libc_cv_builtin_trap, [dnl
1687 libc_cv_builtin_trap=no
1688 AC_TRY_COMPILE([], [__builtin_trap ()], [
1689 libc_undefs=`$NM -u conftest.o |
1690 LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1691 2>&AS_MESSAGE_LOG_FD` || {
1692 AC_MSG_ERROR([confusing output from $NM -u])
1694 echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1695 if test -z "$libc_undefs"; then
1696 libc_cv_builtin_trap=yes
1698 if test $libc_cv_builtin_trap = yes; then
1699 AC_DEFINE([HAVE_BUILTIN_TRAP])
1702 dnl C++ feature tests.
1705 AC_CACHE_CHECK([whether the C++ compiler supports thread_local],
1706 libc_cv_cxx_thread_local, [
1707 old_CXXFLAGS="$CXXFLAGS"
1708 CXXFLAGS="$CXXFLAGS -std=gnu++11"
1709 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1712 // Compiler support.
1719 S * get () { return &s; }
1721 // libstdc++ support.
1722 #ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1723 #error __cxa_thread_atexit_impl not supported
1726 [libc_cv_cxx_thread_local=yes],
1727 [libc_cv_cxx_thread_local=no])
1728 CXXFLAGS="$old_CXXFLAGS"
1730 AC_SUBST(libc_cv_cxx_thread_local)
1733 dnl End of C++ feature tests.
1735 ### End of automated tests.
1736 ### Now run sysdeps configure fragments.
1738 # They also can set these variables.
1740 ldd_rewrite_script=no
1741 libc_cv_sysconfdir=$sysconfdir
1742 libc_cv_localstatedir=$localstatedir
1743 libc_cv_gcc_unwind_find_fde=no
1746 # Iterate over all the sysdep directories we will use, running their
1747 # configure fragments.
1748 for dir in $sysnames; do
1751 *) dest=$srcdir/$dir ;;
1753 if test -r $dest/configure; then
1754 AC_MSG_RESULT(running configure fragment for $dir)
1759 if test x"$build_mathvec" = xnotset; then
1762 LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1764 AC_SUBST(libc_extra_cflags)
1765 AC_SUBST(libc_extra_cppflags)
1767 if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1768 AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1770 AC_SUBST(libc_cv_gcc_unwind_find_fde)
1772 # A sysdeps configure fragment can reset this if IFUNC is not actually
1773 # usable even though the assembler knows how to generate the symbol type.
1774 if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
1775 AC_DEFINE(HAVE_IFUNC)
1778 if test x"$libc_cv_gcc_indirect_function" = xyes; then
1779 AC_DEFINE(HAVE_GCC_IFUNC)
1782 # This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1783 # configure fragment can override the value to prevent this AC_DEFINE.
1785 if test "x$use_nscd" != xno; then
1786 AC_DEFINE([USE_NSCD])
1788 if test "x$build_nscd" = xdefault; then
1789 build_nscd=$use_nscd
1792 AC_SUBST(libc_cv_slibdir)
1793 AC_SUBST(libc_cv_rtlddir)
1794 AC_SUBST(libc_cv_complocaledir)
1795 AC_SUBST(libc_cv_sysconfdir)
1796 AC_SUBST(libc_cv_localstatedir)
1797 AC_SUBST(libc_cv_rootsbindir)
1799 if test x$use_ldconfig = xyes; then
1800 AC_DEFINE(USE_LDCONFIG)
1802 AC_SUBST(use_ldconfig)
1803 AC_SUBST(ldd_rewrite_script)
1808 AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1809 [libc_cv_pic_default=yes
1810 cat > conftest.c <<EOF
1811 #if defined __PIC__ || defined __pic__ || defined PIC || defined pic
1812 # error PIC is default.
1815 if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1816 libc_cv_pic_default=no
1819 AC_SUBST(libc_cv_pic_default)
1821 AC_CACHE_CHECK([whether -fPIE is default], libc_cv_cc_pie_default,
1822 [libc_cv_cc_pie_default=yes
1823 cat > conftest.c <<EOF
1824 #if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1825 # error PIE is default.
1828 if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1829 libc_cv_cc_pie_default=no
1832 libc_cv_pie_default=$libc_cv_cc_pie_default
1833 AC_SUBST(libc_cv_cc_pie_default)
1834 AC_SUBST(libc_cv_pie_default)
1836 # Set the `multidir' variable by grabbing the variable from the compiler.
1837 # We do it once and save the result in a generated makefile.
1838 libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory`
1839 AC_SUBST(libc_cv_multidir)
1841 if test "$static_pie" = yes; then
1842 # The linker must support --no-dynamic-linker.
1843 if test "$libc_cv_no_dynamic_linker" != yes; then
1844 AC_MSG_ERROR([linker support for --no-dynamic-linker needed])
1847 libc_cv_pie_default=yes
1848 AC_DEFINE(ENABLE_STATIC_PIE)
1850 LIBC_CONFIG_VAR([enable-static-pie], [$static_pie])
1853 AC_SUBST(static_nss)
1857 dnl See sysdeps/mach/configure.ac for this variable.
1858 AC_SUBST(mach_interface_list)
1860 VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1861 RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
1865 AC_CONFIG_FILES([config.make Makefile])
1866 AC_CONFIG_COMMANDS([default],[[
1867 case $CONFIG_FILES in *config.make*)
1868 echo "$config_vars" >> config.make;;
1870 test -d bits || mkdir bits]],[[config_vars='$config_vars']])