]> git.ipfire.org Git - thirdparty/glibc.git/blob - configure.ac
riscv: Do not use __has_include__
[thirdparty/glibc.git] / configure.ac
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])
7
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])
14
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 */'])])
19
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
29 CPP=
30 fi
31 if test -z "$CPP"; then
32 CPP="$CC -E"
33 fi
34 AC_SUBST(CPP)dnl
35 ])# AC_PROG_CPP
36
37 # We require GCC. Override _AC_PROG_CC_C89 here to work around the Autoconf
38 # issue discussed in
39 # <https://sourceware.org/ml/libc-alpha/2013-01/msg00757.html>.
40 AC_DEFUN([_AC_PROG_CC_C89], [[$1]])
41
42 dnl This is here so we can set $subdirs directly based on configure fragments.
43 AC_CONFIG_SUBDIRS()
44
45 AC_CANONICAL_HOST
46
47 AC_PROG_CC
48 if test $host != $build; then
49 AC_CHECK_PROGS(BUILD_CC, gcc cc)
50 fi
51 AC_SUBST(cross_compiling)
52 AC_PROG_CPP
53 AC_CHECK_TOOL(READELF, readelf, false)
54
55 # We need the C++ compiler only for testing.
56 AC_PROG_CXX
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
59 AC_LANG_PUSH([C++])
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])
64 # Static case.
65 old_LDFLAGS="$LDFLAGS"
66 LDFLAGS="$LDFLAGS -static"
67 AC_LINK_IFELSE([AC_LANG_SOURCE([
68 #include <iostream>
69
70 int
71 main()
72 {
73 std::cout << "Hello, world!";
74 return 0;
75 }
76 ])],
77 [],
78 [libc_cv_cxx_link_ok=no])
79 LDFLAGS="$old_LDFLAGS"
80 AC_LANG_POP([C++])])
81 AS_IF([test $libc_cv_cxx_link_ok != yes], [CXX=])
82
83 if test "`cd $srcdir; pwd -P`" = "`pwd -P`"; then
84 AC_MSG_ERROR([you must configure in a separate build directory])
85 fi
86
87 # This will get text that should go into config.make.
88 config_vars=
89
90 # Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
91 AC_ARG_WITH([gd],
92 AC_HELP_STRING([--with-gd=DIR],
93 [find libgd include dir and library with prefix DIR]),
94 [dnl
95 case "$with_gd" in
96 yes|''|no) ;;
97 *) libgd_include="-I$withval/include"
98 libgd_ldflags="-L$withval/lib" ;;
99 esac
100 ])
101 AC_ARG_WITH([gd-include],
102 AC_HELP_STRING([--with-gd-include=DIR],
103 [find libgd include files in DIR]),
104 [dnl
105 case "$with_gd_include" in
106 ''|no) ;;
107 *) libgd_include="-I$withval" ;;
108 esac
109 ])
110 AC_ARG_WITH([gd-lib],
111 AC_HELP_STRING([--with-gd-lib=DIR],
112 [find libgd library files in DIR]),
113 [dnl
114 case "$with_gd_lib" in
115 ''|no) ;;
116 *) libgd_ldflags="-L$withval" ;;
117 esac
118 ])
119
120 if test -n "$libgd_include"; then
121 config_vars="$config_vars
122 CFLAGS-memusagestat.c = $libgd_include"
123 fi
124 if test -n "$libgd_ldflags"; then
125 config_vars="$config_vars
126 libgd-LDFLAGS = $libgd_ldflags"
127 fi
128
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],
134 [path_binutils=''])
135 AC_ARG_WITH([selinux],
136 AC_HELP_STRING([--with-selinux],
137 [if building with SELinux support]),
138 [with_selinux=$withval],
139 [with_selinux=auto])
140
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],
147 [sysheaders=''])
148 AC_SUBST(sysheaders)
149
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])
156
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],
161 [enable_sanity=yes])
162
163 AC_ARG_ENABLE([shared],
164 AC_HELP_STRING([--enable-shared],
165 [build shared library @<:@default=yes if GNU ld@:>@]),
166 [shared=$enableval],
167 [shared=yes])
168 AC_ARG_ENABLE([profile],
169 AC_HELP_STRING([--enable-profile],
170 [build profiled library @<:@default=no@:>@]),
171 [profile=$enableval],
172 [profile=no])
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],
177 [static_pie=no])
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)
184
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)
191
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)
199 fi
200
201 AC_ARG_ENABLE([hidden-plt],
202 AC_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)
208 fi
209
210 AC_ARG_ENABLE([bind-now],
211 AC_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)
218 fi
219
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\"]);;
230 esac
231
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],
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)
243 fi
244
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],
249 [force_install=yes])
250 AC_SUBST(force_install)
251
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],
256 [maintainer=no])
257
258 dnl On some platforms we allow dropping compatibility with all kernel
259 dnl versions.
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],
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
273 fi
274
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 AC_HELP_STRING([--enable-all-warnings],
280 [enable all useful warnings gcc can issue]),
281 [all_warnings=$enableval],
282 [])
283 AC_SUBST(all_warnings)
284
285 AC_ARG_ENABLE([werror],
286 AC_HELP_STRING([--disable-werror],
287 [do not build with -Werror]),
288 [enable_werror=$enableval],
289 [enable_werror=yes])
290 AC_SUBST(enable_werror)
291
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])
297
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)
304
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],
309 [build_crypt=yes])
310 AC_SUBST(build_crypt)
311
312 AC_ARG_ENABLE([nss-crypt],
313 AC_HELP_STRING([--enable-nss-crypt],
314 [enable libcrypt to use nss]),
315 [nss_crypt=$enableval],
316 [nss_crypt=no])
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])
319 nss_crypt=no
320 fi
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])
325 fi
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])
329 fi
330 old_CFLAGS="$CFLAGS"
331 CFLAGS="$CFLAGS $nss_includes $nspr_includes"
332 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
333 #include <hasht.h>
334 #include <nsslowhash.h>
335 void f (void) { NSSLOW_Init (); }])],
336 libc_cv_nss_crypt=yes,
337 AC_MSG_ERROR([
338 cannot find NSS headers with lowlevel hash function interfaces]))
339 old_LIBS="$LIBS"
340 old_LDFLAGS="$LDFLAGS"
341 LIBS="$LIBS -lfreebl3"
342 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
343 #include <hasht.h>
344 #include <nsslowhash.h>],
345 [NSSLOW_Init();])],
346 libc_cv_nss_crypt=yes,
347 AC_MSG_ERROR([
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;
354 #include <hasht.h>
355 #include <nsslowhash.h>],
356 [NSSLOW_Init();])],
357 libc_cv_static_nss_crypt=yes,
358 libc_cv_static_nss_crypt=no)
359 LDFLAGS="$old_LDFLAGS"
360 CFLAGS="$old_CFLAGS"
361 LIBS="$old_LIBS"
362 else
363 libc_cv_nss_crypt=no
364 libc_cv_static_nss_crypt=no
365 fi
366 AC_SUBST(libc_cv_nss_crypt)
367 AC_SUBST(libc_cv_static_nss_crypt)
368
369
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)
376
377 if test "$link_obsolete_rpc" = yes; then
378 AC_DEFINE(LINK_OBSOLETE_RPC)
379 fi
380
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)
387
388 if test "$build_obsolete_nsl" = yes; then
389 AC_DEFINE(LINK_OBSOLETE_NSL)
390 fi
391
392 AC_ARG_ENABLE([systemtap],
393 [AS_HELP_STRING([--enable-systemtap],
394 [enable systemtap static probe points @<:@default=no@:>@])],
395 [systemtap=$enableval],
396 [systemtap=no])
397 if test "x$systemtap" != xno; then
398 AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
399 old_CFLAGS="$CFLAGS"
400 CFLAGS="-std=gnu11 $CFLAGS"
401 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
402 void foo (int i, void *p)
403 {
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])
412 fi
413 fi
414
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])
420 AC_SUBST(build_nscd)
421
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],
427 [use_nscd=yes])
428
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],
433 [build_pt_chown=no])
434 AC_SUBST(build_pt_chown)
435 if test "$build_pt_chown" = yes; then
436 AC_DEFINE(HAVE_PT_CHOWN)
437 fi
438
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],
443 [have_tunables=yes])
444 AC_SUBST(have_tunables)
445 if test "$have_tunables" = yes; then
446 AC_DEFINE(HAVE_TUNABLES)
447 fi
448
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.
453 case "$host_os" in
454 linux*)
455 ;;
456 gnu*)
457 host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
458 ;;
459 esac
460
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])
466
467 AC_TRY_COMPILE([], [
468 #ifndef __CET__
469 # error no CET compiler support
470 #endif],
471 [libc_cv_compiler_default_cet=yes],
472 [libc_cv_compiler_default_cet=no])
473
474 AC_ARG_ENABLE([cet],
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])
479
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
484
485 # Don't allow vendor == "unknown"
486 test "$config_vendor" = unknown && config_vendor=
487 config_os="`echo $config_os | sed 's/^unknown-//'`"
488
489 # Some configurations imply other options.
490 elf=yes
491
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
497 os=$config_os
498 base_os=''
499
500 submachine=
501 AC_ARG_WITH([cpu],
502 AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
503 [dnl
504 case "$withval" in
505 yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
506 no) ;;
507 *) submachine="$withval" ;;
508 esac
509 ])
510
511 # An preconfigure script can set this when it wants to disable the sanity
512 # check below.
513 libc_config_ok=no
514
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.
518 with_fp_cond=1
519
520 dnl Let sysdeps/*/preconfigure act here.
521 LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
522
523
524 ###
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
527 ### platforms.
528 ###
529 if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
530 case "$machine-$host_os" in
531 *-linux* | *-gnu*)
532 ;;
533 *)
534 AC_MSG_ERROR([
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!])
540 ;;
541 esac
542 fi
543
544 # Set base_machine if not set by a preconfigure fragment.
545 test -n "$base_machine" || base_machine=$machine
546 AC_SUBST(base_machine)
547
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
552 #if $with_fp_cond
553 int dummy;
554 #else
555 # error "no hardware floating point"
556 #endif
557 EOF
558 libc_cv_with_fp=no
559 if ${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s \
560 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
561 libc_cv_with_fp=yes
562 fi
563 rm -f conftest*])
564 AC_SUBST(libc_cv_with_fp)
565
566 AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
567 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
568 [libc_cv_ssp=yes],
569 [libc_cv_ssp=no])
570 ])
571
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])
576 ])
577
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])
582 ])
583
584 stack_protector=
585 no_stack_protector=
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)
589 fi
590
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)
600 else
601 stack_protector="-fno-stack-protector"
602 AC_DEFINE(STACK_PROTECTOR_LEVEL, 0)
603 fi
604 AC_SUBST(libc_cv_ssp)
605 AC_SUBST(stack_protector)
606 AC_SUBST(no_stack_protector)
607
608 if test -n "$stack_protector"; then
609 dnl Don't run configure tests with stack-protection on, to avoid problems with
610 dnl bootstrapping.
611 no_ssp=-fno-stack-protector
612 else
613 no_ssp=
614
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.])
617 fi
618 fi
619
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
625 foo:
626 .globl _start
627 _start:
628 .globl __start
629 __start:
630 .data
631 #ifdef _LP64
632 .quad foo
633 #else
634 .long foo
635 #endif
636 EOF
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
645 }
646 fi
647 rm -f conftest*])
648
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)
655 {
656 return a;
657 }
658 static void *resolver ()
659 {
660 return &used_func;
661 }
662 extern __typeof (func) func __attribute__ ((ifunc ("resolver")));
663 EOF
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
669 fi
670 fi
671 rm -f conftest*])
672
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);
678
679 __typeof (__redirect_foo) *foo_impl (void) __asm__ ("foo");
680 __typeof (__redirect_foo) *foo_impl (void)
681 {
682 return 0;
683 }
684
685 extern __typeof (__redirect_foo) foo_alias __attribute__ ((alias ("foo")));
686 EOF
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
690 fi
691 rm -f conftest*])
692
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])
696 else
697 multi_arch=no
698 fi
699 fi
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])
708 fi
709 AC_MSG_WARN([Multi-arch is disabled.])
710 multi_arch=no
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])
714 fi
715 fi
716 multi_arch_d=
717 if test x"$multi_arch" != xno; then
718 multi_arch_d=/multiarch
719 fi
720
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.
726 changequote(,)dnl
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'`"
729
730 test "x$base_os" != x || case "$os" in
731 gnu*)
732 base_os=mach/hurd ;;
733 linux*)
734 base_os=unix/sysv ;;
735 esac
736
737 # For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
738 tail=$os
739 ostry=$os
740 while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
741 ostry="$ostry /$o"
742 tail=$o
743 done
744 o=`echo $tail | sed 's/[0-9]*$//'`
745 if test $o != $tail; then
746 ostry="$ostry /$o"
747 fi
748 # For linux-gnu, try linux-gnu, then linux.
749 o=`echo $tail | sed 's/-.*$//'`
750 if test $o != $tail; then
751 ostry="$ostry /$o"
752 fi
753
754 # For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
755 base=
756 tail=$base_os
757 while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
758 set $b
759 base="$base /$1"
760 tail="$2"
761 done
762
763 # For sparc/sparc32, try sparc/sparc32 and then sparc.
764 mach=
765 tail=$machine${submachine:+/$submachine}
766 while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
767 set $m
768 # Prepend the machine's FPU directory unless --without-fp.
769 if test "$libc_cv_with_fp" = yes; then
770 maybe_fpu=/fpu
771 else
772 maybe_fpu=/nofpu
773 fi
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"
778 done
779 done
780 tail="$2"
781 done
782
783 dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
784 changequote([,])dnl
785
786 # Find what sysdep directories exist.
787 sysnames=
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
805 case x${m0:-$m} in
806 x*/$submachine) submachine_used=t ;;
807 esac
808 fi
809 fi
810 done
811 done
812 done
813 done
814 done
815
816 # If the assembler supports gnu_indirect_function symbol type and the
817 # architecture supports multi-arch, we enable multi-arch by default.
818 case $sysnames in
819 *"$multi_arch_d"*)
820 ;;
821 *)
822 test x"$multi_arch" = xdefault && multi_arch=no
823 ;;
824 esac
825 if test x"$multi_arch" != xno; then
826 AC_DEFINE(USE_MULTIARCH)
827 fi
828 AC_SUBST(multi_arch)
829
830 if test -z "$os_used" && test "$os" != none; then
831 AC_MSG_ERROR(Operating system $os is not supported.)
832 fi
833 if test -z "$machine_used" && test "$machine" != none; then
834 AC_MSG_ERROR(The $machine is not supported.)
835 fi
836 if test -z "$submachine_used" && test -n "$submachine"; then
837 AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
838 fi
839 AC_SUBST(submachine)
840
841 # We have now validated the configuration.
842
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).
845 set $sysnames
846 names=
847 while test $# -gt 0; do
848 name=$1
849 shift
850
851 case " $names " in *" $name "*)
852 # Already in the list.
853 continue
854 esac
855
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
858
859 name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
860
861 case $name in
862 /*) xsrcdir= ;;
863 *) xsrcdir=$srcdir/ ;;
864 esac
865 test -n "$enable_debug_configure" &&
866 echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
867
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
875 found=no
876 if test -d $xsrcdir$name_base/$x; then
877 eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
878 found=yes
879 fi
880 try="sysdeps/$x"
881 try_srcdir=$srcdir/
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;
885 then
886 eval "${implies_type}=\"\$${implies_type} \$try\""
887 found=yes
888 fi
889 if test $found = no; then
890 AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
891 fi
892 done
893 fi
894 done
895
896 # Add NAME to the list of names.
897 names="$names $name"
898
899 # Find the parent of NAME, using the empty string if it has none.
900 changequote(,)dnl
901 parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
902 changequote([,])dnl
903
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
907
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 $*)
914 # after sysv4).
915 sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
916 test -n "$sysnames" && set $sysnames
917 done
918
919 # Add the default directories.
920 default_sysnames="sysdeps/generic"
921 sysnames="$names $default_sysnames"
922 AC_SUBST(sysnames)
923 # The other names were emitted during the scan.
924 AC_MSG_RESULT($default_sysnames)
925
926
927 ### Locate tools.
928
929 AC_PROG_INSTALL
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'
933 fi
934 AC_PROG_LN_S
935
936 LIBC_PROG_BINUTILS
937
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")
943
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")
950 else
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")
955 fi
956
957 # These programs are version sensitive.
958 AC_CHECK_TOOL_PREFIX
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")
962
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")
981
982 AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
983 AC_TRY_COMPILE([], [
984 #if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9)
985 #error insufficient compiler
986 #endif],
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"])
991
992 AC_CHECK_TOOL(NM, nm, false)
993
994 if test "x$maintainer" = "xyes"; then
995 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
996 case "x$AUTOCONF" in
997 xno|x|x:) AUTOCONF=no ;;
998 *)
999 AC_CACHE_CHECK(dnl
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
1003 else
1004 libc_cv_autoconf_works=no
1005 fi])
1006 test $libc_cv_autoconf_works = yes || AUTOCONF=no
1007 ;;
1008 esac
1009 if test "x$AUTOCONF" = xno; then
1010 aux_missing="$aux_missing autoconf"
1011 fi
1012 else
1013 AUTOCONF=no
1014 fi
1015
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 ;;
1020 *) ;;
1021 esac
1022
1023 if test "x$PYTHON_PROG" = xno; then
1024 aux_missing="$aux_missing python"
1025 else
1026 PYTHON="$PYTHON_PROG -B"
1027 AC_SUBST(PYTHON)
1028 fi
1029
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.])
1033
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.])
1038
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"
1047 done
1048 SYSINCLUDES="$SYSINCLUDES \
1049 -isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
1050 if test -n "$CXX"; then
1051 CXX_SYSINCLUDES=
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"
1056 done
1057 fi
1058 fi
1059 AC_SUBST(SYSINCLUDES)
1060 AC_SUBST(CXX_SYSINCLUDES)
1061
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}"
1068 }
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)"
1072 fi
1073 AC_SUBST(CXX_CSTDLIB_HEADER)
1074 AC_SUBST(CXX_CMATH_HEADER)
1075 AC_SUBST(CXX_BITS_STD_ABS_H)
1076
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
1080 # is true:
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)
1085 changequote(,)dnl
1086 case ${LD_LIBRARY_PATH} in
1087 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
1088 ld_library_path_setting="contains current directory"
1089 ;;
1090 *)
1091 ld_library_path_setting="ok"
1092 ;;
1093 esac
1094 changequote([,])dnl
1095 AC_MSG_RESULT($ld_library_path_setting)
1096 if test "$ld_library_path_setting" != "ok"; then
1097 AC_MSG_ERROR([
1098 *** LD_LIBRARY_PATH shouldn't contain the current directory when
1099 *** building glibc. Please change the environment variable
1100 *** and run configure again.])
1101 fi
1102
1103 AC_PATH_PROG(BASH_SHELL, bash, no)
1104
1105 AC_PATH_PROG(PERL, perl, no)
1106 if test "$PERL" != no &&
1107 (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1108 PERL=no
1109 fi
1110 AC_PATH_PROG(INSTALL_INFO, install-info, no,
1111 $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
1112
1113 AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
1114 cat > conftest.s <<EOF
1115 .text
1116 foo:
1117 .set glibc_conftest_frobozz,foo
1118 .globl glibc_conftest_frobozz
1119 EOF
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; }
1125 EOF
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
1130 else
1131 libc_cv_asm_set_directive=no
1132 fi
1133 rm -f conftest*])
1134 if test $libc_cv_asm_set_directive = yes; then
1135 AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1136 fi
1137
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;
1142 EOF
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
1146 extern int bar;
1147 int main (void) { return bar; }
1148 EOF
1149 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp conftest.c -o conftest conftest.so); then
1150 libc_cv_protected_data=yes
1151 fi
1152 fi
1153 rm -f conftest.*
1154 ])
1155 AC_SUBST(libc_cv_protected_data)
1156
1157 AC_CACHE_CHECK(linker support for INSERT in linker script,
1158 libc_cv_insert,
1159 [cat > conftest.c <<EOF
1160 const int __attribute__ ((section(".bar"))) bar = 0x12345678;
1161 int test (void) { return bar; }
1162 EOF
1163 cat > conftest.t <<EOF
1164 SECTIONS
1165 {
1166 .bar : { *(.bar) }
1167 }
1168 INSERT AFTER .rela.dyn;
1169 EOF
1170 libc_cv_insert=no
1171 if AC_TRY_COMMAND([${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -Wl,-T,conftest.t -o conftest.so]); then
1172 libc_cv_insert=yes
1173 fi
1174 rm -f conftest.*
1175 ])
1176 AC_SUBST(libc_cv_insert)
1177
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")));
1184 extern int dfoo;
1185 extern __typeof (dfoo) dfoo __asm ("abccb");
1186 int dfoo = 1;
1187 EOF
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
1193 fi
1194 fi
1195 rm -f conftest.c conftest.s
1196 ])
1197 if test $libc_cv_broken_alias_attribute = yes; then
1198 AC_MSG_ERROR(working alias attribute support required)
1199 fi
1200
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
1208 fi
1209 rm -f conftest.c conftest.so
1210 ])
1211 if test $libc_cv_have_sdata_section = yes; then
1212 AC_DEFINE(HAVE_SDATA_SECTION)
1213 fi
1214
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 (""); }
1221 ],
1222 [dnl
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)
1228 seen@<:@$2@:>@ = 1
1229 stub@<:@$2@:>@ = size == align * 2
1230 }
1231 END {
1232 ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1233 dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1234 exit ((ctors_ok && dtors_ok) ? 0 : 1)
1235 }
1236 '], [libc_cv_ctors_header=no])
1237 ], [dnl
1238 AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1239 ])
1240 ])
1241 if test $libc_cv_ctors_header = no; then
1242 AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1243 fi
1244
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; }
1249 EOF
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
1253 else
1254 libc_cv_cc_with_libunwind=no
1255 fi
1256 rm -f conftest*])
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)
1260 fi
1261
1262 ASFLAGS_config=
1263 AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1264 libc_cv_as_noexecstack, [dnl
1265 cat > conftest.c <<EOF
1266 void foo (void) { }
1267 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])
1273 then
1274 libc_cv_as_noexecstack=yes
1275 else
1276 libc_cv_as_noexecstack=no
1277 fi
1278 rm -f conftest*])
1279 if test $libc_cv_as_noexecstack = yes; then
1280 ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1281 fi
1282 AC_SUBST(ASFLAGS_config)
1283
1284 AC_CACHE_CHECK(for -z combreloc,
1285 libc_cv_z_combreloc, [dnl
1286 cat > conftest.c <<EOF
1287 extern int bar (int);
1288 extern int mumble;
1289 int foo (void) { return bar (mumble); }
1290 EOF
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])
1295 then
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
1303 else
1304 libc_cv_z_combreloc=no
1305 fi
1306 else
1307 libc_cv_z_combreloc=no
1308 fi
1309 rm -f conftest*])
1310 if test "$libc_cv_z_combreloc" = yes; then
1311 AC_DEFINE(HAVE_Z_COMBRELOC)
1312 fi
1313 AC_SUBST(libc_cv_z_combreloc)
1314
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)
1318
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])
1324
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])
1329 ])
1330 LIBC_CONFIG_VAR([have-static-pie], [$libc_cv_static_pie])
1331
1332 AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
1333 LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1334 ])
1335
1336 AC_SUBST(libc_cv_fpie)
1337
1338 AC_CACHE_CHECK(for --hash-style option,
1339 libc_cv_hashstyle, [dnl
1340 cat > conftest.c <<EOF
1341 int _start (void) { return 42; }
1342 EOF
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])
1346 then
1347 libc_cv_hashstyle=yes
1348 else
1349 libc_cv_hashstyle=no
1350 fi
1351 rm -f conftest*])
1352 AC_SUBST(libc_cv_hashstyle)
1353
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
1363 .balign 4
1364 .long 4,4,9
1365 .string "GNU"
1366 .string "foo"
1367 .section .note.b,"a",%note
1368 .balign 4
1369 .long 4,4,9
1370 .string "GNU"
1371 .string "bar"
1372 EOF
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 \
1376 ['${x;p;}
1377 s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/
1378 t a
1379 b
1380 : a
1381 H']`
1382 then
1383 libc_seen_a=no libc_seen_b=no
1384 set -- $ac_try
1385 while test $# -ge 2 -a "$1" = NOTE; do
1386 case "$2" in
1387 .note.a) libc_seen_a=yes ;;
1388 .note.b) libc_seen_b=yes ;;
1389 esac
1390 shift 2
1391 done
1392 case "$libc_seen_a$libc_seen_b" in
1393 yesyes)
1394 libc_cv_use_default_link=yes
1395 ;;
1396 *)
1397 echo >&AS_MESSAGE_LOG_FD "\
1398 $libc_seen_a$libc_seen_b from:
1399 $ac_try"
1400 ;;
1401 esac
1402 fi
1403 rm -f conftest*])
1404 use_default_link=$libc_cv_use_default_link
1405 fi
1406
1407 AC_CACHE_CHECK(for GLOB_DAT reloc,
1408 libc_cv_has_glob_dat, [dnl
1409 cat > conftest.c <<EOF
1410 extern int mumble;
1411 int foo (void) { return mumble; }
1412 EOF
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])
1417 then
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
1421 else
1422 libc_cv_has_glob_dat=no
1423 fi
1424 else
1425 libc_cv_has_glob_dat=no
1426 fi
1427 rm -f conftest*])
1428 AC_SUBST(libc_cv_has_glob_dat)
1429
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`
1433 then
1434 :
1435 else
1436 libc_cv_output_format=
1437 fi
1438 test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1439 AC_SUBST(libc_cv_output_format)
1440
1441 AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
1442 cat > conftest.c <<EOF
1443 int foo;
1444 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])
1447 then
1448 libc_cv_fno_toplevel_reorder=yes
1449 else
1450 libc_cv_fno_toplevel_reorder=no
1451 fi
1452 rm -f conftest*])
1453 if test $libc_cv_fno_toplevel_reorder = yes; then
1454 fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
1455 else
1456 fno_unit_at_a_time=-fno-unit-at-a-time
1457 fi
1458 AC_SUBST(fno_unit_at_a_time)
1459
1460 AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
1461 [dnl
1462 cat > conftest.c <<EOF
1463 __thread int i;
1464 void foo (void)
1465 {
1466 i = 10;
1467 }
1468 EOF
1469 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
1470 conftest.c 1>&AS_MESSAGE_LOG_FD])
1471 then
1472 libc_cv_mtls_dialect_gnu2=yes
1473 else
1474 libc_cv_mtls_dialect_gnu2=no
1475 fi
1476 rm -f conftest*])
1477 AC_SUBST(libc_cv_mtls_dialect_gnu2)
1478 LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
1479
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;
1485 EOF
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
1489 else
1490 libc_cv_have_section_quotes=no
1491 fi
1492 else
1493 libc_cv_have_section_quotes=unknown
1494 fi
1495 rm -f conftest.{c,s}
1496 ])
1497 if test $libc_cv_have_section_quotes = yes; then
1498 AC_DEFINE(HAVE_SECTION_QUOTES)
1499 fi
1500
1501 AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1502 cat > conftest.c <<\EOF
1503 void zero (void *x)
1504 {
1505 __builtin_memset (x, 0, 1000);
1506 }
1507 EOF
1508 dnl
1509 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "memset" > /dev/null]);
1510 then
1511 libc_cv_gcc_builtin_memset=no
1512 else
1513 libc_cv_gcc_builtin_memset=yes
1514 fi
1515 rm -f conftest* ])
1516 if test "$libc_cv_gcc_builtin_memset" = yes ; then
1517 AC_DEFINE(HAVE_BUILTIN_MEMSET)
1518 fi
1519
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)
1524 {
1525 return __builtin_strstr (a, b);
1526 }
1527 EOF
1528 dnl
1529 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "my_strstr" > /dev/null]);
1530 then
1531 libc_cv_gcc_builtin_redirection=yes
1532 else
1533 libc_cv_gcc_builtin_redirection=no
1534 fi
1535 rm -f conftest* ])
1536 if test "$libc_cv_gcc_builtin_redirection" = no; then
1537 AC_MSG_ERROR([support for the symbol redirection needed])
1538 fi
1539
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
1543 libc_cv_cc_nofma=
1544 for opt in -ffp-contract=off -mno-fused-madd; do
1545 LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1546 done])
1547 AC_SUBST(libc_cv_cc_nofma)
1548
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"
1556 break], [])
1557 done])
1558 if test "x$libc_cv_cc_submachine" = xno; then
1559 AC_MSG_ERROR([${CC-cc} does not support $submachine])
1560 fi
1561 fi
1562 AC_SUBST(libc_cv_cc_submachine)
1563
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
1567 void
1568 __attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1569 foo (void) {}
1570 EOF
1571 libc_cv_cc_loop_to_function=no
1572 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1573 then
1574 libc_cv_cc_loop_to_function=yes
1575 fi
1576 rm -f conftest*])
1577 if test $libc_cv_cc_loop_to_function = yes; then
1578 AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1579 fi
1580 AC_SUBST(libc_cv_cc_loop_to_function)
1581
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"
1589 old_LIBS="$LIBS"
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"
1594 LIBS="$old_LIBS"
1595 else
1596 LIBGD=no
1597 fi
1598 AC_MSG_RESULT($LIBGD)
1599 AC_SUBST(LIBGD)
1600
1601 # SELinux detection
1602 if test x$with_selinux = xno ; then
1603 have_selinux=no;
1604 else
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])
1611 fi
1612 fi
1613 fi
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])
1617
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])
1623 fi
1624 AC_SUBST(have_libaudit)
1625
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])
1630 fi
1631 AC_SUBST(have_libcap)
1632 fi
1633 AC_SUBST(have_selinux)
1634
1635 CPPUNDEFS=
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
1642 # error bogon
1643 #endif],
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"
1648 fi
1649 AC_SUBST(CPPUNDEFS)
1650
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"
1658 old_LIBS="$LIBS"
1659 CFLAGS="$CFLAGS -fPIC"
1660 LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp"
1661 LIBS=
1662 AC_LINK_IFELSE([AC_LANG_SOURCE([
1663 typedef struct {
1664 char foo;
1665 long val;
1666 } Ehdr;
1667 extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
1668 long ehdr (void) { return __ehdr_start.val; }
1669 ])],
1670 [if $READELF -r conftest | grep -F __ehdr_start >/dev/null; then
1671 libc_cv_ehdr_start=broken
1672 else
1673 libc_cv_ehdr_start=yes
1674 fi], [libc_cv_ehdr_start=no])
1675 CFLAGS="$old_CFLAGS"
1676 LDFLAGS="$old_LDFLAGS"
1677 LIBS="$old_LIBS"
1678 ])
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])
1683 fi
1684
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])
1693 }
1694 echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1695 if test -z "$libc_undefs"; then
1696 libc_cv_builtin_trap=yes
1697 fi])])
1698 if test $libc_cv_builtin_trap = yes; then
1699 AC_DEFINE([HAVE_BUILTIN_TRAP])
1700 fi
1701
1702 dnl C++ feature tests.
1703 AC_LANG_PUSH([C++])
1704
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([
1710 #include <thread>
1711
1712 // Compiler support.
1713 struct S
1714 {
1715 S ();
1716 ~S ();
1717 };
1718 thread_local S s;
1719 S * get () { return &s; }
1720
1721 // libstdc++ support.
1722 #ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1723 #error __cxa_thread_atexit_impl not supported
1724 #endif
1725 ])],
1726 [libc_cv_cxx_thread_local=yes],
1727 [libc_cv_cxx_thread_local=no])
1728 CXXFLAGS="$old_CXXFLAGS"
1729 ])
1730 AC_SUBST(libc_cv_cxx_thread_local)
1731
1732 AC_LANG_POP([C++])
1733 dnl End of C++ feature tests.
1734
1735 ### End of automated tests.
1736 ### Now run sysdeps configure fragments.
1737
1738 # They also can set these variables.
1739 use_ldconfig=no
1740 ldd_rewrite_script=no
1741 libc_cv_sysconfdir=$sysconfdir
1742 libc_cv_localstatedir=$localstatedir
1743 libc_cv_gcc_unwind_find_fde=no
1744 libc_cv_idn=no
1745
1746 # Iterate over all the sysdep directories we will use, running their
1747 # configure fragments.
1748 for dir in $sysnames; do
1749 case $dir in
1750 /*) dest=$dir ;;
1751 *) dest=$srcdir/$dir ;;
1752 esac
1753 if test -r $dest/configure; then
1754 AC_MSG_RESULT(running configure fragment for $dir)
1755 . $dest/configure
1756 fi
1757 done
1758
1759 if test x"$build_mathvec" = xnotset; then
1760 build_mathvec=no
1761 fi
1762 LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1763
1764 AC_SUBST(libc_extra_cflags)
1765 AC_SUBST(libc_extra_cppflags)
1766
1767 if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1768 AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1769 fi
1770 AC_SUBST(libc_cv_gcc_unwind_find_fde)
1771
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)
1776 fi
1777
1778 if test x"$libc_cv_gcc_indirect_function" = xyes; then
1779 AC_DEFINE(HAVE_GCC_IFUNC)
1780 fi
1781
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.
1784 AC_SUBST(use_nscd)
1785 if test "x$use_nscd" != xno; then
1786 AC_DEFINE([USE_NSCD])
1787 fi
1788 if test "x$build_nscd" = xdefault; then
1789 build_nscd=$use_nscd
1790 fi
1791
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)
1798
1799 if test x$use_ldconfig = xyes; then
1800 AC_DEFINE(USE_LDCONFIG)
1801 fi
1802 AC_SUBST(use_ldconfig)
1803 AC_SUBST(ldd_rewrite_script)
1804
1805 AC_SUBST(static)
1806 AC_SUBST(shared)
1807
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.
1813 #endif
1814 EOF
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
1817 fi
1818 rm -f conftest.*])
1819 AC_SUBST(libc_cv_pic_default)
1820
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.
1826 #endif
1827 EOF
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
1830 fi
1831 rm -f conftest.*])
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)
1835
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)
1840
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])
1845 fi
1846 # Default to PIE.
1847 libc_cv_pie_default=yes
1848 AC_DEFINE(ENABLE_STATIC_PIE)
1849 fi
1850 LIBC_CONFIG_VAR([enable-static-pie], [$static_pie])
1851
1852 AC_SUBST(profile)
1853 AC_SUBST(static_nss)
1854
1855 AC_SUBST(DEFINES)
1856
1857 dnl See sysdeps/mach/configure.ac for this variable.
1858 AC_SUBST(mach_interface_list)
1859
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`
1862 AC_SUBST(VERSION)
1863 AC_SUBST(RELEASE)
1864
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;;
1869 esac
1870 test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1871 AC_OUTPUT