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