]> git.ipfire.org Git - thirdparty/glibc.git/blame - configure.ac
malloc: ensure set_max_fast never stores zero [BZ #25733]
[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],
77e8bddf
AS
93 AC_HELP_STRING([--with-gd=DIR],
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],
77e8bddf
AS
103 AC_HELP_STRING([--with-gd-include=DIR],
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],
77e8bddf
AS
112 AC_HELP_STRING([--with-gd-lib=DIR],
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],
77e8bddf
AS
132 AC_HELP_STRING([--with-binutils=PATH],
133 [specify location of binutils (as and ld)]),
6b7f6183
RM
134 [path_binutils=$withval],
135 [path_binutils=''])
2fff3d93 136AC_ARG_WITH([selinux],
77e8bddf
AS
137 AC_HELP_STRING([--with-selinux],
138 [if building with SELinux support]),
2fff3d93
UD
139 [with_selinux=$withval],
140 [with_selinux=auto])
28f540f4 141
6b7f6183 142AC_ARG_WITH([headers],
77e8bddf
AS
143 AC_HELP_STRING([--with-headers=PATH],
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],
153 AC_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],
160 AC_HELP_STRING([--with-nonshared-cflags=CFLAGS],
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],
77e8bddf
AS
167 AC_HELP_STRING([--disable-sanity-checks],
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],
77e8bddf 173 AC_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],
77e8bddf
AS
178 AC_HELP_STRING([--enable-profile],
179 [build profiled library @<:@default=no@:>@]),
6b7f6183 180 [profile=$enableval],
11bf311e 181 [profile=no])
9d7a3741
L
182AC_ARG_ENABLE([static-pie],
183 AC_HELP_STRING([--enable-static-pie],
184 [enable static PIE support and use it in the testsuite @<:@default=no@:>@]),
185 [static_pie=$enableval],
186 [static_pie=no])
1cba4036
MF
187AC_ARG_ENABLE([timezone-tools],
188 AC_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
L
194AC_ARG_ENABLE([hardcoded-path-in-tests],
195 AC_HELP_STRING([--enable-hardcoded-path-in-tests],
196 [hardcode newly built glibc path in tests @<:@default=no@:>@]),
197 [hardcoded_path_in_tests=$enableval],
198 [hardcoded_path_in_tests=no])
199AC_SUBST(hardcoded_path_in_tests)
200
35f1e827
UD
201AC_ARG_ENABLE([stackguard-randomization],
202 AC_HELP_STRING([--enable-stackguard-randomization],
203 [initialize __stack_chk_guard canary with a random number at program start]),
204 [enable_stackguard_randomize=$enableval],
205 [enable_stackguard_randomize=no])
206if test "$enable_stackguard_randomize" = yes; then
207 AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
208fi
209
6b7f6183 210AC_ARG_ENABLE([hidden-plt],
77e8bddf
AS
211 AC_HELP_STRING([--disable-hidden-plt],
212 [do not hide internal function calls to avoid PLT]),
6b7f6183
RM
213 [hidden=$enableval],
214 [hidden=yes])
749a9a4f
RM
215if test "x$hidden" = xno; then
216 AC_DEFINE(NO_HIDDEN)
217fi
218
4df8c11d
UD
219AC_ARG_ENABLE([bind-now],
220 AC_HELP_STRING([--enable-bind-now],
221 [disable lazy relocations in DSOs]),
222 [bindnow=$enableval],
223 [bindnow=no])
224AC_SUBST(bindnow)
6901def6
L
225if test "x$bindnow" = xyes; then
226 AC_DEFINE(BIND_NOW)
227fi
4df8c11d 228
03baef1c
NA
229dnl Build glibc with -fstack-protector, -fstack-protector-all, or
230dnl -fstack-protector-strong.
231AC_ARG_ENABLE([stack-protector],
232 AC_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@],
233 [Use -fstack-protector[-all|-strong] to detect glibc buffer overflows]),
234 [enable_stack_protector=$enableval],
235 [enable_stack_protector=no])
236case "$enable_stack_protector" in
237all|yes|no|strong) ;;
238*) AC_MSG_ERROR([Not a valid argument for --enable-stack-protector: \"$enable_stack_protector\"]);;
239esac
240
5107cf1d
UD
241dnl On some platforms we cannot use dynamic loading. We must provide
242dnl static NSS modules.
6b7f6183 243AC_ARG_ENABLE([static-nss],
77e8bddf
AS
244 AC_HELP_STRING([--enable-static-nss],
245 [build static NSS modules @<:@default=no@:>@]),
6b7f6183
RM
246 [static_nss=$enableval],
247 [static_nss=no])
834cef7c
UD
248dnl Enable static NSS also if we build no shared objects.
249if test x"$static_nss" = xyes || test x"$shared" = xno; then
3172f58f 250 static_nss=yes
5107cf1d
UD
251 AC_DEFINE(DO_STATIC_NSS)
252fi
253
6b7f6183 254AC_ARG_ENABLE([force-install],
77e8bddf
AS
255 AC_HELP_STRING([--disable-force-install],
256 [don't force installation of files from this package, even if they are older than the installed files]),
6b7f6183
RM
257 [force_install=$enableval],
258 [force_install=yes])
73237de3
UD
259AC_SUBST(force_install)
260
8894bad3
AM
261AC_ARG_ENABLE([maintainer-mode],
262 AC_HELP_STRING([--enable-maintainer-mode],
263 [enable make rules and dependencies not useful (and sometimes confusing) to the casual installer]),
264 [maintainer=$enableval],
265 [maintainer=no])
266
958f238f
UD
267dnl On some platforms we allow dropping compatibility with all kernel
268dnl versions.
6b7f6183 269AC_ARG_ENABLE([kernel],
77e8bddf
AS
270 AC_HELP_STRING([--enable-kernel=VERSION],
271 [compile for compatibility with kernel not older than VERSION]),
6b7f6183
RM
272 [minimum_kernel=$enableval],
273 [])
86cfe82d
UD
274dnl Prevent unreasonable values.
275if test "$minimum_kernel" = yes || test "$minimum_kernel" = no; then
276 # Better nothing than this.
277 minimum_kernel=""
269e369f
UD
278else
279 if test "$minimum_kernel" = current; then
280 minimum_kernel=`uname -r 2>/dev/null` || minimum_kernel=
281 fi
86cfe82d 282fi
958f238f 283
6cc7d725
UD
284dnl For the development we sometimes want gcc to issue even more warnings.
285dnl This is not the default since many of the extra warnings are not
286dnl appropriate.
6b7f6183
RM
287AC_ARG_ENABLE([all-warnings],
288 AC_HELP_STRING([--enable-all-warnings],
77e8bddf 289 [enable all useful warnings gcc can issue]),
6b7f6183
RM
290 [all_warnings=$enableval],
291 [])
6cc7d725
UD
292AC_SUBST(all_warnings)
293
a4ecc9eb
JM
294AC_ARG_ENABLE([werror],
295 AC_HELP_STRING([--disable-werror],
296 [do not build with -Werror]),
297 [enable_werror=$enableval],
298 [enable_werror=yes])
299AC_SUBST(enable_werror)
300
425ce2ed
UD
301AC_ARG_ENABLE([multi-arch],
302 AC_HELP_STRING([--enable-multi-arch],
303 [enable single DSO with optimizations for multiple architectures]),
304 [multi_arch=$enableval],
6f89d2f3 305 [multi_arch=default])
425ce2ed 306
d5c3fafc
DD
307AC_ARG_ENABLE([experimental-malloc],
308 AC_HELP_STRING([--disable-experimental-malloc],
309 [disable experimental malloc features]),
310 [experimental_malloc=$enableval],
311 [experimental_malloc=yes])
312AC_SUBST(experimental_malloc)
313
e69d994a
ZW
314AC_ARG_ENABLE([crypt],
315 AC_HELP_STRING([--disable-crypt],
316 [do not build nor install the passphrase hashing library, libcrypt]),
317 [build_crypt=$enableval],
318 [build_crypt=yes])
319AC_SUBST(build_crypt)
320
ff886b82
UD
321AC_ARG_ENABLE([nss-crypt],
322 AC_HELP_STRING([--enable-nss-crypt],
323 [enable libcrypt to use nss]),
324 [nss_crypt=$enableval],
325 [nss_crypt=no])
e69d994a
ZW
326if test x$build_libcrypt = xno && test x$nss_crypt = xyes; then
327 AC_MSG_WARN([--enable-nss-crypt has no effect when libcrypt is disabled])
328 nss_crypt=no
329fi
ff886b82
UD
330if test x$nss_crypt = xyes; then
331 nss_includes=-I$(nss-config --includedir 2>/dev/null)
332 if test $? -ne 0; then
333 AC_MSG_ERROR([cannot find include directory with nss-config])
334 fi
57b4af19
GT
335 nspr_includes=-I$(nspr-config --includedir 2>/dev/null)
336 if test $? -ne 0; then
337 AC_MSG_ERROR([cannot find include directory with nspr-config])
338 fi
ff886b82 339 old_CFLAGS="$CFLAGS"
57b4af19 340 CFLAGS="$CFLAGS $nss_includes $nspr_includes"
b68e08db 341 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
ff886b82
UD
342#include <hasht.h>
343#include <nsslowhash.h>
b68e08db 344void f (void) { NSSLOW_Init (); }])],
ff886b82
UD
345 libc_cv_nss_crypt=yes,
346 AC_MSG_ERROR([
347cannot find NSS headers with lowlevel hash function interfaces]))
348 old_LIBS="$LIBS"
84aa7516 349 old_LDFLAGS="$LDFLAGS"
ff886b82
UD
350 LIBS="$LIBS -lfreebl3"
351 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
352#include <hasht.h>
353#include <nsslowhash.h>],
354 [NSSLOW_Init();])],
355 libc_cv_nss_crypt=yes,
356 AC_MSG_ERROR([
357cannot link program using lowlevel NSS hash functions]))
84aa7516
CD
358 # Check to see if there is a static NSS cryptographic library.
359 # If there isn't then we can't link anything with libcrypt.a,
360 # and that might mean disabling some static tests.
361 LDFLAGS="$LDFLAGS -static"
362 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
363#include <hasht.h>
364#include <nsslowhash.h>],
365 [NSSLOW_Init();])],
366 libc_cv_static_nss_crypt=yes,
367 libc_cv_static_nss_crypt=no)
368 LDFLAGS="$old_LDFLAGS"
ff886b82
UD
369 CFLAGS="$old_CFLAGS"
370 LIBS="$old_LIBS"
371else
372 libc_cv_nss_crypt=no
84aa7516 373 libc_cv_static_nss_crypt=no
ff886b82
UD
374fi
375AC_SUBST(libc_cv_nss_crypt)
84aa7516 376AC_SUBST(libc_cv_static_nss_crypt)
ff886b82 377
3a097cc7 378
021db4be
AJ
379AC_ARG_ENABLE([obsolete-rpc],
380 AC_HELP_STRING([--enable-obsolete-rpc],
381 [build and install the obsolete RPC code for link-time usage]),
382 [link_obsolete_rpc=$enableval],
383 [link_obsolete_rpc=no])
384AC_SUBST(link_obsolete_rpc)
385
386if test "$link_obsolete_rpc" = yes; then
387 AC_DEFINE(LINK_OBSOLETE_RPC)
388fi
389
1e4d83f6
TK
390AC_ARG_ENABLE([obsolete-nsl],
391 AC_HELP_STRING([--enable-obsolete-nsl],
392 [build and install the obsolete libnsl library and depending NSS modules]),
393 [build_obsolete_nsl=$enableval],
394 [build_obsolete_nsl=no])
395AC_SUBST(build_obsolete_nsl)
396
397if test "$build_obsolete_nsl" = yes; then
398 AC_DEFINE(LINK_OBSOLETE_NSL)
399fi
400
3a097cc7
RM
401AC_ARG_ENABLE([systemtap],
402 [AS_HELP_STRING([--enable-systemtap],
403 [enable systemtap static probe points @<:@default=no@:>@])],
404 [systemtap=$enableval],
405 [systemtap=no])
406if test "x$systemtap" != xno; then
407 AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
408 old_CFLAGS="$CFLAGS"
783dd2d3 409 CFLAGS="-std=gnu11 $CFLAGS"
0e3933b9 410 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
3a097cc7
RM
411void foo (int i, void *p)
412{
413 asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
414 :: STAP_PROBE_ASM_OPERANDS (2, i, p));
0e3933b9 415}]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])
3a097cc7
RM
416 CFLAGS="$old_CFLAGS"])
417 if test $libc_cv_sdt = yes; then
418 AC_DEFINE([USE_STAP_PROBE])
419 elif test "x$systemtap" != xauto; then
420 AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
421 fi
422fi
423
c53d909c
RM
424AC_ARG_ENABLE([build-nscd],
425 [AS_HELP_STRING([--disable-build-nscd],
426 [disable building and installing the nscd daemon])],
427 [build_nscd=$enableval],
428 [build_nscd=default])
429AC_SUBST(build_nscd)
430
3cc3ef96
RM
431# Note the use of $use_nscd is near the bottom of the file.
432AC_ARG_ENABLE([nscd],
433 [AS_HELP_STRING([--disable-nscd],
434 [library functions will not contact the nscd daemon])],
435 [use_nscd=$enableval],
436 [use_nscd=yes])
437
e4608715
CD
438AC_ARG_ENABLE([pt_chown],
439 [AS_HELP_STRING([--enable-pt_chown],
440 [Enable building and installing pt_chown])],
441 [build_pt_chown=$enableval],
442 [build_pt_chown=no])
443AC_SUBST(build_pt_chown)
8c12f01d 444if test "$build_pt_chown" = yes; then
e4608715
CD
445 AC_DEFINE(HAVE_PT_CHOWN)
446fi
447
67e58f39
SP
448AC_ARG_ENABLE([tunables],
449 [AS_HELP_STRING([--enable-tunables],
6765d5d3 450 [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])],
67e58f39 451 [have_tunables=$enableval],
2c0b90ab 452 [have_tunables=yes])
67e58f39
SP
453AC_SUBST(have_tunables)
454if test "$have_tunables" = yes; then
455 AC_DEFINE(HAVE_TUNABLES)
456fi
457
ebf27d12
ST
458# The abi-tags file uses a fairly simplistic model for name recognition that
459# can't distinguish i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a
460# $host_os of `gnu*' here to be `gnu-gnu*' just so that it can tell.
461# This doesn't get used much beyond that, so it's fairly safe.
462case "$host_os" in
463linux*)
464 ;;
465gnu*)
466 host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
467 ;;
468esac
469
5695d46f
AS
470AC_ARG_ENABLE([mathvec],
471 [AS_HELP_STRING([--enable-mathvec],
472 [Enable building and installing mathvec @<:@default depends on architecture@:>@])],
473 [build_mathvec=$enableval],
474 [build_mathvec=notset])
475
9fb81390
FW
476AC_TRY_COMPILE([], [
477#ifndef __CET__
478# error no CET compiler support
479#endif],
480 [libc_cv_compiler_default_cet=yes],
481 [libc_cv_compiler_default_cet=no])
482
f753fa7d
L
483AC_ARG_ENABLE([cet],
484 AC_HELP_STRING([--enable-cet],
485 [enable Intel Control-flow Enforcement Technology (CET), x86 only]),
486 [enable_cet=$enableval],
9fb81390 487 [enable_cet=$libc_cv_compiler_default_cet])
f753fa7d 488
28f540f4
RM
489# We keep the original values in `$config_*' and never modify them, so we
490# can write them unchanged into config.make. Everything else uses
491# $machine, $vendor, and $os, and changes them whenever convenient.
492config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
493
2f64b655
UD
494# Don't allow vendor == "unknown"
495test "$config_vendor" = unknown && config_vendor=
496config_os="`echo $config_os | sed 's/^unknown-//'`"
497
a2fe9c76 498# Some configurations imply other options.
0269750c 499elf=yes
a2fe9c76 500
644d3857 501# The configure fragment of a port can modify these to supplement
8f73811b
RM
502# or override the table in the case statement below. No fragment should
503# ever change the config_* variables, however.
28f540f4
RM
504machine=$config_machine
505vendor=$config_vendor
506os=$config_os
b22d21b3 507base_os=''
28f540f4 508
2ceaa76a
RM
509submachine=
510AC_ARG_WITH([cpu],
511 AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
512 [dnl
513 case "$withval" in
514 yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
515 no) ;;
516 *) submachine="$withval" ;;
517 esac
518])
519
05439291
RM
520# An preconfigure script can set this when it wants to disable the sanity
521# check below.
522libc_config_ok=no
523
8df5d347
JM
524# A preconfigure script for a system that may or may not use fpu
525# sysdeps directories sets this to a preprocessor conditional for
526# whether to use such directories.
527with_fp_cond=1
528
644d3857 529dnl Let sysdeps/*/preconfigure act here.
10a803e0
RM
530LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
531
8f73811b 532
bdc8eb03
UD
533###
534### By using the undocumented --enable-hacker-mode option for configure
535### one can skip this test to make the configuration not fail for unsupported
536### platforms.
537###
8f73811b 538if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
bdc8eb03 539 case "$machine-$host_os" in
2ce4f015 540 *-linux* | *-gnu*)
bdc8eb03
UD
541 ;;
542 *)
4e58b648
MF
543 AC_MSG_ERROR([
544*** The GNU C library is currently unavailable for this platform.
545*** If you are interested in seeing glibc on this platform visit
546*** the "How to submit a new port" in the wiki:
547*** https://sourceware.org/glibc/wiki/#Development
548*** and join the community!])
bdc8eb03
UD
549 ;;
550 esac
551fi
552
3e239be6
JM
553# Set base_machine if not set by a preconfigure fragment.
554test -n "$base_machine" || base_machine=$machine
f0523145 555AC_SUBST(base_machine)
28f540f4 556
8df5d347
JM
557# Determine whether to use fpu or nofpu sysdeps directories.
558AC_CACHE_CHECK([for use of fpu sysdeps directories],
559 libc_cv_with_fp, [dnl
560cat > conftest.c <<EOF
561#if $with_fp_cond
562int dummy;
563#else
564# error "no hardware floating point"
565#endif
566EOF
567libc_cv_with_fp=no
568if ${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s \
569 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
570 libc_cv_with_fp=yes
571fi
572rm -f conftest*])
573AC_SUBST(libc_cv_with_fp)
574
03baef1c
NA
575AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
576LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
577 [libc_cv_ssp=yes],
578 [libc_cv_ssp=no])
579])
580
581AC_CACHE_CHECK(for -fstack-protector-strong, libc_cv_ssp_strong, [dnl
582LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-strong],
583 [libc_cv_ssp_strong=yes],
584 [libc_cv_ssp_strong=no])
585])
586
587AC_CACHE_CHECK(for -fstack-protector-all, libc_cv_ssp_all, [dnl
588LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-all],
589 [libc_cv_ssp_all=yes],
590 [libc_cv_ssp_all=no])
591])
592
593stack_protector=
594no_stack_protector=
595if test "$libc_cv_ssp" = yes; then
596 no_stack_protector="-fno-stack-protector -DSTACK_PROTECTOR_LEVEL=0"
de659123 597 AC_DEFINE(HAVE_CC_NO_STACK_PROTECTOR)
03baef1c
NA
598fi
599
600if test "$enable_stack_protector" = yes && test "$libc_cv_ssp" = yes; then
601 stack_protector="-fstack-protector"
602 AC_DEFINE(STACK_PROTECTOR_LEVEL, 1)
603elif test "$enable_stack_protector" = all && test "$libc_cv_ssp_all" = yes; then
604 stack_protector="-fstack-protector-all"
605 AC_DEFINE(STACK_PROTECTOR_LEVEL, 2)
606elif test "$enable_stack_protector" = strong && test "$libc_cv_ssp_strong" = yes; then
607 stack_protector="-fstack-protector-strong"
608 AC_DEFINE(STACK_PROTECTOR_LEVEL, 3)
66a704c4
NA
609else
610 stack_protector="-fno-stack-protector"
611 AC_DEFINE(STACK_PROTECTOR_LEVEL, 0)
03baef1c
NA
612fi
613AC_SUBST(libc_cv_ssp)
614AC_SUBST(stack_protector)
615AC_SUBST(no_stack_protector)
616
66a704c4
NA
617if test -n "$stack_protector"; then
618 dnl Don't run configure tests with stack-protection on, to avoid problems with
619 dnl bootstrapping.
620 no_ssp=-fno-stack-protector
621else
622 no_ssp=
623
624 if test "$enable_stack_protector" != no; then
625 AC_MSG_ERROR([--enable-stack-protector=$enable_stack_protector specified, but specified level of stack protection is not supported by the compiler.])
626 fi
627fi
628
0cae3f4b
MF
629# For the multi-arch option we need support in the assembler & linker.
630AC_CACHE_CHECK([for assembler and linker STT_GNU_IFUNC support],
631 libc_cv_ld_gnu_indirect_function, [dnl
786b0b67 632cat > conftest.S <<EOF
84b9230c 633.type foo,%gnu_indirect_function
0cae3f4b
MF
634foo:
635.globl _start
636_start:
637.globl __start
638__start:
639.data
786b0b67
AS
640#ifdef _LP64
641.quad foo
642#else
0cae3f4b 643.long foo
786b0b67 644#endif
84b9230c 645EOF
0cae3f4b
MF
646libc_cv_ld_gnu_indirect_function=no
647if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
66a704c4 648 -nostartfiles -nostdlib $no_ssp \
786b0b67 649 -o conftest conftest.S 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
0cae3f4b
MF
650 # Do a link to see if the backend supports IFUNC relocs.
651 $READELF -r conftest 1>&AS_MESSAGE_LOG_FD
87a698a2 652 LC_ALL=C $READELF -Wr conftest | grep -q 'IRELATIVE\|R_SPARC_JMP_IREL' && {
0cae3f4b
MF
653 libc_cv_ld_gnu_indirect_function=yes
654 }
84b9230c
MF
655fi
656rm -f conftest*])
657
022dfdce
SL
658# Check if gcc supports attribute ifunc as it is used in libc_ifunc macro.
659AC_CACHE_CHECK([for gcc attribute ifunc support],
660 libc_cv_gcc_indirect_function, [dnl
661cat > conftest.c <<EOF
662extern int func (int);
663int used_func (int a)
664{
665 return a;
666}
667static void *resolver ()
668{
669 return &used_func;
670}
671extern __typeof (func) func __attribute__ ((ifunc ("resolver")));
672EOF
673libc_cv_gcc_indirect_function=no
674if ${CC-cc} -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD \
675 2>&AS_MESSAGE_LOG_FD ; then
676 if $READELF -s conftest.o | grep IFUNC >/dev/null 2>&AS_MESSAGE_LOG_FD; then
677 libc_cv_gcc_indirect_function=yes
678 fi
679fi
680rm -f conftest*])
681
b5c45e83
AZ
682# Check if linker supports textrel relocation with ifunc (used on elf/tests).
683# Note that it relies on libc_cv_ld_gnu_indirect_function test above.
684AC_CACHE_CHECK([whether the linker supports textrels along with ifunc],
685 libc_cv_textrel_ifunc, [dnl
686cat > conftest.S <<EOF
687.type foo,%gnu_indirect_function
688foo:
689.globl _start
690_start:
691.globl __start
692__start:
693.data
694#ifdef _LP64
695.quad foo
696#else
697.long foo
698#endif
699.text
700.globl address
701address:
702#ifdef _LP64
703.quad address
704#else
705.long address
706#endif
707EOF
708libc_cv_textrel_ifunc=no
709if test $libc_cv_ld_gnu_indirect_function = yes; then
710 if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostartfiles -nostdlib $no_ssp -pie -o conftest conftest.S); then
711 libc_cv_textrel_ifunc=yes
712 fi
713fi
714rm -f conftest*])
715AC_SUBST(libc_cv_textrel_ifunc)
716
8f6f5362
AZ
717# Check if gcc warns about alias for function with incompatible types.
718AC_CACHE_CHECK([if compiler warns about alias for function with incompatible types],
719 libc_cv_gcc_incompatible_alias, [dnl
720cat > conftest.c <<EOF
721int __redirect_foo (const void *s, int c);
722
723__typeof (__redirect_foo) *foo_impl (void) __asm__ ("foo");
724__typeof (__redirect_foo) *foo_impl (void)
725{
726 return 0;
727}
728
729extern __typeof (__redirect_foo) foo_alias __attribute__ ((alias ("foo")));
730EOF
731libc_cv_gcc_incompatible_alias=yes
732if ${CC-cc} -Werror -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
733 libc_cv_gcc_incompatible_alias=no
734fi
735rm -f conftest*])
736
0cae3f4b 737if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
84b9230c
MF
738 if test x"$multi_arch" = xyes; then
739 AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
740 else
741 multi_arch=no
742 fi
743fi
8f6f5362
AZ
744if test x"$libc_cv_gcc_indirect_function" != xyes; then
745 # GCC 8+ emits a warning for alias with incompatible types and it might
746 # fail to build ifunc resolvers aliases to either weak or internal
747 # symbols. Disables multiarch build in this case.
748 if test x"$libc_cv_gcc_incompatible_alias" == xyes; then
749 AC_MSG_WARN([gcc emits a warning for alias between functions of incompatible types])
750 if test x"$multi_arch" = xyes; then
751 AC_MSG_ERROR([--enable-multi-arch support requires a gcc with gnu-indirect-function support])
752 fi
753 AC_MSG_WARN([Multi-arch is disabled.])
754 multi_arch=no
755 elif test x"$multi_arch" = xyes; then
756 AC_MSG_WARN([--enable-multi-arch support recommends a gcc with gnu-indirect-function support.
022dfdce 757Please use a gcc which supports it by default or configure gcc with --enable-gnu-indirect-function])
8f6f5362 758 fi
022dfdce 759fi
6270516e 760multi_arch_d=
84b9230c
MF
761if test x"$multi_arch" != xno; then
762 multi_arch_d=/multiarch
763fi
764
f0523145 765# Compute the list of sysdep directories for this configuration.
f332db02 766# This can take a while to compute.
f0523145 767sysdep_dir=$srcdir/sysdeps
f332db02 768AC_MSG_CHECKING(sysdep dirs)
f0523145
RM
769dnl We need to use [ and ] for other purposes for a while now.
770changequote(,)dnl
28f540f4
RM
771# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
772os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
773
b22d21b3 774test "x$base_os" != x || case "$os" in
28f540f4
RM
775gnu*)
776 base_os=mach/hurd ;;
2ce4f015 777linux*)
28f540f4 778 base_os=unix/sysv ;;
28f540f4
RM
779esac
780
781# For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
782tail=$os
783ostry=$os
784while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
785 ostry="$ostry /$o"
786 tail=$o
75914335 787done
28f540f4
RM
788o=`echo $tail | sed 's/[0-9]*$//'`
789if test $o != $tail; then
790 ostry="$ostry /$o"
791fi
ec4b0518
UD
792# For linux-gnu, try linux-gnu, then linux.
793o=`echo $tail | sed 's/-.*$//'`
794if test $o != $tail; then
795 ostry="$ostry /$o"
796fi
28f540f4
RM
797
798# For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
799base=
800tail=$base_os
801while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
802 set $b
803 base="$base /$1"
804 tail="$2"
805done
806
ae6b8730 807# For sparc/sparc32, try sparc/sparc32 and then sparc.
28f540f4 808mach=
2ceaa76a 809tail=$machine${submachine:+/$submachine}
28f540f4
RM
810while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
811 set $m
a63189c0
AZ
812 # Prepend the machine's FPU directory unless the architecture specific
813 # preconfigure disables it.
8df5d347 814 if test "$libc_cv_with_fp" = yes; then
6270516e 815 maybe_fpu=/fpu
f4b07664 816 else
6270516e 817 maybe_fpu=/nofpu
82d00cab 818 fi
6270516e
RM
819 # For each machine term, try it with and then without /multiarch.
820 for try_fpu in $maybe_fpu ''; do
821 for try_multi in $multi_arch_d ''; do
822 mach="$mach /$1$try_fpu$try_multi"
823 done
824 done
28f540f4
RM
825 tail="$2"
826done
827
828dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
829changequote([,])dnl
830
831# Find what sysdep directories exist.
832sysnames=
4b69abad
RM
833for b in $base ''; do
834 for m0 in $mach ''; do
835 for v in /$vendor ''; do
836 test "$v" = / && continue
837 for o in /$ostry ''; do
838 test "$o" = / && continue
6270516e 839 for m in $mach ''; do
644d3857
JM
840 try_suffix="$m0$b$v$o$m"
841 if test -n "$try_suffix"; then
842 try_srcdir="${srcdir}/"
843 try="sysdeps$try_suffix"
844 test -n "$enable_debug_configure" &&
845 echo "$0 [DEBUG]: try $try" >&2
846 if test -d "$try_srcdir$try"; then
847 sysnames="$sysnames $try"
848 { test -n "$o" || test -n "$b"; } && os_used=t
849 { test -n "$m" || test -n "$m0"; } && machine_used=t
850 case x${m0:-$m} in
851 x*/$submachine) submachine_used=t ;;
852 esac
853 fi
854 fi
28f540f4
RM
855 done
856 done
857 done
858 done
4b69abad 859done
28f540f4 860
6f89d2f3
L
861# If the assembler supports gnu_indirect_function symbol type and the
862# architecture supports multi-arch, we enable multi-arch by default.
644d3857 863case $sysnames in
84b9230c
MF
864*"$multi_arch_d"*)
865 ;;
866*)
77e8bddf 867 test x"$multi_arch" = xdefault && multi_arch=no
84b9230c
MF
868 ;;
869esac
870if test x"$multi_arch" != xno; then
6f89d2f3
L
871 AC_DEFINE(USE_MULTIARCH)
872fi
873AC_SUBST(multi_arch)
874
28f540f4
RM
875if test -z "$os_used" && test "$os" != none; then
876 AC_MSG_ERROR(Operating system $os is not supported.)
877fi
878if test -z "$machine_used" && test "$machine" != none; then
879 AC_MSG_ERROR(The $machine is not supported.)
880fi
2ceaa76a
RM
881if test -z "$submachine_used" && test -n "$submachine"; then
882 AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
883fi
884AC_SUBST(submachine)
28f540f4
RM
885
886# We have now validated the configuration.
887
28f540f4
RM
888# Expand the list of system names into a full list of directories
889# from each element's parent name and Implies file (if present).
890set $sysnames
e50ec9f9 891names=
28f540f4
RM
892while test $# -gt 0; do
893 name=$1
894 shift
895
e50ec9f9 896 case " $names " in *" $name "*)
f332db02
RM
897 # Already in the list.
898 continue
e50ec9f9 899 esac
f332db02
RM
900
901 # Report each name as we discover it, so there is no long pause in output.
0b4ee387 902 echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
f332db02 903
57ba7bb4
UD
904 name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
905
906 case $name in
907 /*) xsrcdir= ;;
908 *) xsrcdir=$srcdir/ ;;
909 esac
910 test -n "$enable_debug_configure" &&
911 echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
912
ba75122d
RM
913 for implies_file in Implies Implies-before Implies-after; do
914 implies_type=`echo $implies_file | sed s/-/_/`
915 eval ${implies_type}=
916 if test -f $xsrcdir$name/$implies_file; then
917 # Collect more names from the `Implies' file (removing comments).
918 implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
919 for x in $implied_candidate; do
920 found=no
921 if test -d $xsrcdir$name_base/$x; then
922 eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
636ccfc8 923 found=yes
ba75122d 924 fi
644d3857
JM
925 try="sysdeps/$x"
926 try_srcdir=$srcdir/
927 test -n "$enable_debug_configure" &&
928 echo "[DEBUG]: $name $implies_file $x try() {$try_srcdir}$try" >&2
929 if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
930 then
931 eval "${implies_type}=\"\$${implies_type} \$try\""
932 found=yes
933 fi
ba75122d
RM
934 if test $found = no; then
935 AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
636ccfc8
UD
936 fi
937 done
ba75122d
RM
938 fi
939 done
28f540f4
RM
940
941 # Add NAME to the list of names.
942 names="$names $name"
943
944 # Find the parent of NAME, using the empty string if it has none.
945changequote(,)dnl
57ba7bb4 946 parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
28f540f4
RM
947changequote([,])dnl
948
ba75122d
RM
949 test -n "$enable_debug_configure" &&
950 echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
57633811 951Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
ba75122d 952
28f540f4
RM
953 # Add the names implied by NAME, and NAME's parent (if it has one), to
954 # the list of names to be processed (the argument list). We prepend the
955 # implied names to the list and append the parent. We want implied
956 # directories to come before further directories inferred from the
957 # configuration components; this ensures that for sysv4, unix/common
958 # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
959 # after sysv4).
ba75122d 960 sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
28f540f4
RM
961 test -n "$sysnames" && set $sysnames
962done
963
964# Add the default directories.
83ef87ba 965default_sysnames="sysdeps/generic"
ecdc196c 966sysnames="$names $default_sysnames"
f332db02
RM
967AC_SUBST(sysnames)
968# The other names were emitted during the scan.
ecdc196c 969AC_MSG_RESULT($default_sysnames)
28f540f4 970
f332db02
RM
971
972### Locate tools.
28f540f4 973
28f540f4 974AC_PROG_INSTALL
2b80a372 975if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
28f540f4 976 # The makefiles need to use a different form to find it in $srcdir.
2b80a372 977 INSTALL='\$(..)./scripts/install-sh -c'
28f540f4 978fi
0e3426bb 979AC_PROG_LN_S
ae828bc6 980
4baa087a 981LIBC_PROG_BINUTILS
4baa087a 982
b4396163 983# Accept binutils 2.25 or newer.
4baa087a
RM
984AC_CHECK_PROG_VER(AS, $AS, --version,
985 [GNU assembler.* \([0-9]*\.[0-9.]*\)],
b4396163 986 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
bd805071 987 AS=: critic_missing="$critic_missing as")
f300dc73
L
988
989if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
990 # Accept gold 1.14 or higher
991 AC_CHECK_PROG_VER(LD, $LD, --version,
992 [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
993 [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
994 LD=: critic_missing="$critic_missing GNU gold")
995else
996 AC_CHECK_PROG_VER(LD, $LD, --version,
997 [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
073e8fa7 998 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
f300dc73
L
999 LD=: critic_missing="$critic_missing GNU ld")
1000fi
4baa087a 1001
63bda0c1 1002# These programs are version sensitive.
3a12e572 1003AC_CHECK_TOOL_PREFIX
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
RM
1027AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
1028AC_TRY_COMPILE([], [
4dcbbc3b 1029#if !defined __GNUC__ || __GNUC__ < 6 || (__GNUC__ == 6 && __GNUC_MINOR__ < 2)
461a7b1e
RM
1030#error insufficient compiler
1031#endif],
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(whether to use .ctors/.dtors header and trailer,
1255 libc_cv_ctors_header, [dnl
1256 libc_cv_ctors_header=yes
07037eeb
JM
1257 LIBC_TRY_LINK_STATIC([
1258__attribute__ ((constructor)) void ctor (void) { asm (""); }
1259__attribute__ ((destructor)) void dtor (void) { asm (""); }
113ddea4 1260],
a0da5fe1 1261 [dnl
113ddea4 1262 AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
92963737 1263 { gsub(/\@<:@ */, "@<:@") }
113ddea4
RM
1264 $2 == ".ctors" || $2 == ".dtors" {
1265 size = strtonum("0x" $6)
1266 align = strtonum("0x" $NF)
1267 seen@<:@$2@:>@ = 1
1268 stub@<:@$2@:>@ = size == align * 2
92963737 1269 }
113ddea4
RM
1270 END {
1271 ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1272 dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1273 exit ((ctors_ok && dtors_ok) ? 0 : 1)
1274 }
1275 '], [libc_cv_ctors_header=no])
1276 ], [dnl
1277 AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1278 ])
a0da5fe1
UD
1279])
1280if test $libc_cv_ctors_header = no; then
1281 AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1282fi
5241882c 1283
a0da5fe1
UD
1284AC_CACHE_CHECK(for libunwind-support in compiler,
1285 libc_cv_cc_with_libunwind, [
1286 cat > conftest.c <<EOF
cbdb12de
UD
1287int main (void) { return 0; }
1288EOF
a0da5fe1 1289 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
8175a253 1290 conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
a0da5fe1
UD
1291 libc_cv_cc_with_libunwind=yes
1292 else
1293 libc_cv_cc_with_libunwind=no
c776b3d7 1294 fi
a0da5fe1
UD
1295 rm -f conftest*])
1296AC_SUBST(libc_cv_cc_with_libunwind)
1297if test $libc_cv_cc_with_libunwind = yes; then
1298 AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1299fi
c776b3d7 1300
a0da5fe1
UD
1301ASFLAGS_config=
1302AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1303 libc_cv_as_noexecstack, [dnl
1304cat > conftest.c <<EOF
35915ec8
UD
1305void foo (void) { }
1306EOF
a0da5fe1
UD
1307if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1308 -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
8175a253 1309 && grep .note.GNU-stack conftest.s >/dev/null \
a0da5fe1
UD
1310 && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1311 -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1312then
1313 libc_cv_as_noexecstack=yes
1314else
1315 libc_cv_as_noexecstack=no
1316fi
1317rm -f conftest*])
1318if test $libc_cv_as_noexecstack = yes; then
1319 ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1320fi
1321AC_SUBST(ASFLAGS_config)
2abf9ff1 1322
a0da5fe1
UD
1323AC_CACHE_CHECK(for -z combreloc,
1324 libc_cv_z_combreloc, [dnl
1325cat > conftest.c <<EOF
d555194c
UD
1326extern int bar (int);
1327extern int mumble;
1328int foo (void) { return bar (mumble); }
a711b01d 1329EOF
a0da5fe1 1330if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
66a704c4 1331 -fPIC -shared $no_ssp -o conftest.so conftest.c
35cd3c97 1332 -nostdlib -nostartfiles
c2f55635 1333 -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
a0da5fe1 1334then
a711b01d
UD
1335dnl The following test is a bit weak. We must use a tool which can test
1336dnl cross-platform since the gcc used can be a cross compiler. Without
1337dnl introducing new options this is not easily doable. Instead use a tool
1338dnl which always is cross-platform: readelf. To detect whether -z combreloc
e37fc4aa
AN
1339dnl look for a section named .rel.dyn or .rela.dyn.
1340 if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then
a0da5fe1 1341 libc_cv_z_combreloc=yes
fdde8349
UD
1342 else
1343 libc_cv_z_combreloc=no
a711b01d 1344 fi
a0da5fe1
UD
1345else
1346 libc_cv_z_combreloc=no
1347fi
1348rm -f conftest*])
1349if test "$libc_cv_z_combreloc" = yes; then
1350 AC_DEFINE(HAVE_Z_COMBRELOC)
1351fi
1352AC_SUBST(libc_cv_z_combreloc)
2abf9ff1 1353
6bfea974
L
1354LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
1355 [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
a0da5fe1 1356AC_SUBST(libc_cv_z_execstack)
c9c60884 1357
9d7a3741
L
1358LIBC_LINKER_FEATURE([--no-dynamic-linker],
1359 [-Wl,--no-dynamic-linker],
1360 [libc_cv_no_dynamic_linker=yes],
1361 [libc_cv_no_dynamic_linker=no])
1362LIBC_CONFIG_VAR([have-no-dynamic-linker], [$libc_cv_no_dynamic_linker])
1363
1364AC_CACHE_CHECK(for -static-pie, libc_cv_static_pie, [dnl
1365LIBC_TRY_CC_OPTION([-static-pie],
1366 [libc_cv_static_pie=yes],
1367 [libc_cv_static_pie=no])
1368])
1369LIBC_CONFIG_VAR([have-static-pie], [$libc_cv_static_pie])
1370
a0da5fe1 1371AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
4da0431d
JM
1372LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1373])
c9c60884 1374
a0da5fe1 1375AC_SUBST(libc_cv_fpie)
871b9158 1376
a0da5fe1
UD
1377AC_CACHE_CHECK(for --hash-style option,
1378 libc_cv_hashstyle, [dnl
1379cat > conftest.c <<EOF
871b9158
UD
1380int _start (void) { return 42; }
1381EOF
66a704c4 1382if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
a0da5fe1
UD
1383 -fPIC -shared -o conftest.so conftest.c
1384 -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1385then
1386 libc_cv_hashstyle=yes
1387else
1388 libc_cv_hashstyle=no
1389fi
1390rm -f conftest*])
1391AC_SUBST(libc_cv_hashstyle)
1392
1393# The linker's default -shared behavior is good enough if it
1394# does these things that our custom linker scripts ensure that
1395# all allocated NOTE sections come first.
1396if test "$use_default_link" = default; then
1397 AC_CACHE_CHECK([for sufficient default -shared layout],
1398 libc_cv_use_default_link, [dnl
1399 libc_cv_use_default_link=no
1400 cat > conftest.s <<\EOF
fd5e21c7
RM
1401 .section .note.a,"a",%note
1402 .balign 4
1403 .long 4,4,9
1404 .string "GNU"
1405 .string "foo"
1406 .section .note.b,"a",%note
1407 .balign 4
1408 .long 4,4,9
1409 .string "GNU"
1410 .string "bar"
1411EOF
a0da5fe1 1412 if AC_TRY_COMMAND([dnl
fd5e21c7
RM
1413 ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1414 ac_try=`$READELF -S conftest.so | sed -n \
1415 ['${x;p;}
1416 s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/
1417 t a
1418 b
1419 : a
1420 H']`
a0da5fe1
UD
1421 then
1422 libc_seen_a=no libc_seen_b=no
1423 set -- $ac_try
1424 while test $# -ge 2 -a "$1" = NOTE; do
1425 case "$2" in
1426 .note.a) libc_seen_a=yes ;;
1427 .note.b) libc_seen_b=yes ;;
1428 esac
1429 shift 2
1430 done
1431 case "$libc_seen_a$libc_seen_b" in
1432 yesyes)
1433 libc_cv_use_default_link=yes
1434 ;;
1435 *)
1436 echo >&AS_MESSAGE_LOG_FD "\
fd5e21c7
RM
1437$libc_seen_a$libc_seen_b from:
1438$ac_try"
a0da5fe1
UD
1439 ;;
1440 esac
fd5e21c7 1441 fi
a0da5fe1
UD
1442 rm -f conftest*])
1443 use_default_link=$libc_cv_use_default_link
fd26970f 1444fi
49803108 1445
89569c8b
L
1446AC_CACHE_CHECK(for GLOB_DAT reloc,
1447 libc_cv_has_glob_dat, [dnl
1448cat > conftest.c <<EOF
1449extern int mumble;
1450int foo (void) { return mumble; }
1451EOF
1452if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1453 -fPIC -shared -o conftest.so conftest.c
66a704c4 1454 -nostdlib -nostartfiles $no_ssp
89569c8b
L
1455 1>&AS_MESSAGE_LOG_FD])
1456then
1457dnl look for GLOB_DAT relocation.
1458 if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then
1459 libc_cv_has_glob_dat=yes
1460 else
1461 libc_cv_has_glob_dat=no
1462 fi
1463else
1464 libc_cv_has_glob_dat=no
1465fi
1466rm -f conftest*])
1467AC_SUBST(libc_cv_has_glob_dat)
1468
5c550700
RM
1469AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
1470if libc_cv_output_format=`
66a704c4 1471${CC-cc} -nostartfiles -nostdlib $no_ssp -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
5c550700
RM
1472then
1473 :
1474else
1475 libc_cv_output_format=
1476fi
1477test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1478AC_SUBST(libc_cv_output_format)
1479
22dca1ea 1480AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
49803108
AJ
1481cat > conftest.c <<EOF
1482int foo;
1483EOF
22dca1ea 1484if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
49803108
AJ
1485 conftest.c 1>&AS_MESSAGE_LOG_FD])
1486then
18e2ac6d 1487 libc_cv_fno_toplevel_reorder=yes
49803108 1488else
18e2ac6d 1489 libc_cv_fno_toplevel_reorder=no
49803108
AJ
1490fi
1491rm -f conftest*])
18e2ac6d 1492if test $libc_cv_fno_toplevel_reorder = yes; then
22dca1ea 1493 fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
18e2ac6d 1494else
49803108
AJ
1495 fno_unit_at_a_time=-fno-unit-at-a-time
1496fi
1497AC_SUBST(fno_unit_at_a_time)
fd26970f 1498
61655555
L
1499AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
1500[dnl
1501cat > conftest.c <<EOF
1502__thread int i;
1503void foo (void)
1504{
1505 i = 10;
1506}
1507EOF
1508if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
1509 conftest.c 1>&AS_MESSAGE_LOG_FD])
1510then
1511 libc_cv_mtls_dialect_gnu2=yes
1512else
1513 libc_cv_mtls_dialect_gnu2=no
1514fi
1515rm -f conftest*])
1516AC_SUBST(libc_cv_mtls_dialect_gnu2)
1517LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
1518
a0da5fe1
UD
1519AC_CACHE_CHECK(whether cc puts quotes around section names,
1520 libc_cv_have_section_quotes,
1521 [cat > conftest.c <<EOF
1522 static const int foo
1523 __attribute__ ((section ("bar"))) = 1;
e26dd47f 1524EOF
a0da5fe1
UD
1525 if ${CC-cc} -S conftest.c -o conftest.s; then
1526 if grep '\.section.*"bar"' conftest.s >/dev/null; then
1527 libc_cv_have_section_quotes=yes
e26dd47f 1528 else
a0da5fe1 1529 libc_cv_have_section_quotes=no
e26dd47f 1530 fi
a0da5fe1
UD
1531 else
1532 libc_cv_have_section_quotes=unknown
1533 fi
1534 rm -f conftest.{c,s}
1535 ])
1536if test $libc_cv_have_section_quotes = yes; then
1537 AC_DEFINE(HAVE_SECTION_QUOTES)
9a97d1f7
UD
1538fi
1539
d555194c
UD
1540AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1541cat > conftest.c <<\EOF
1542void zero (void *x)
1543{
a52d1562 1544 __builtin_memset (x, 0, 1000);
d555194c
UD
1545}
1546EOF
1547dnl
e37fc4aa 1548if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "memset" > /dev/null]);
d555194c
UD
1549then
1550 libc_cv_gcc_builtin_memset=no
1551else
1552 libc_cv_gcc_builtin_memset=yes
1553fi
1554rm -f conftest* ])
1555if test "$libc_cv_gcc_builtin_memset" = yes ; then
1556 AC_DEFINE(HAVE_BUILTIN_MEMSET)
1557fi
1558
85dd1003
UD
1559AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1560cat > conftest.c <<\EOF
1561extern char *strstr (const char *, const char *) __asm ("my_strstr");
1562char *foo (const char *a, const char *b)
1563{
1564 return __builtin_strstr (a, b);
1565}
1566EOF
1567dnl
e37fc4aa 1568if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "my_strstr" > /dev/null]);
85dd1003
UD
1569then
1570 libc_cv_gcc_builtin_redirection=yes
1571else
1572 libc_cv_gcc_builtin_redirection=no
1573fi
1574rm -f conftest* ])
3ce1f295
UD
1575if test "$libc_cv_gcc_builtin_redirection" = no; then
1576 AC_MSG_ERROR([support for the symbol redirection needed])
85dd1003
UD
1577fi
1578
7998fa78
AS
1579dnl Determine how to disable generation of FMA instructions.
1580AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1581 libc_cv_cc_nofma, [dnl
1582libc_cv_cc_nofma=
1583for opt in -ffp-contract=off -mno-fused-madd; do
1584 LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1585done])
bef0b507 1586AC_SUBST(libc_cv_cc_nofma)
7998fa78 1587
2cf9ad57
RM
1588if test -n "$submachine"; then
1589 AC_CACHE_CHECK([for compiler option for CPU variant],
f7d82dc9 1590 libc_cv_cc_submachine, [dnl
2cf9ad57
RM
1591 libc_cv_cc_submachine=no
1592 for opt in "-march=$submachine" "-mcpu=$submachine"; do
40b601fb 1593 LIBC_TRY_CC_OPTION([$opt], [
2cf9ad57 1594 libc_cv_cc_submachine="$opt"
40b601fb 1595 break], [])
2cf9ad57
RM
1596 done])
1597 if test "x$libc_cv_cc_submachine" = xno; then
1598 AC_MSG_ERROR([${CC-cc} does not support $submachine])
1599 fi
1600fi
1601AC_SUBST(libc_cv_cc_submachine)
1602
85c2e611
AZ
1603AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
1604__attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
1605cat > conftest.c <<EOF
1606void
1607__attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1608foo (void) {}
1609EOF
1610libc_cv_cc_loop_to_function=no
1611if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1612then
1613 libc_cv_cc_loop_to_function=yes
1614fi
1615rm -f conftest*])
1616if test $libc_cv_cc_loop_to_function = yes; then
1617 AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1618fi
1619AC_SUBST(libc_cv_cc_loop_to_function)
1620
c8f3e6db
UD
1621dnl Check whether we have the gd library available.
1622AC_MSG_CHECKING(for libgd)
6dab8688
UD
1623if test "$with_gd" != "no"; then
1624 old_CFLAGS="$CFLAGS"
1625 CFLAGS="$CFLAGS $libgd_include"
1626 old_LDFLAGS="$LDFLAGS"
1627 LDFLAGS="$LDFLAGS $libgd_ldflags"
1628 old_LIBS="$LIBS"
1629 LIBS="$LIBS -lgd -lpng -lz -lm"
1630 AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
1631 CFLAGS="$old_CFLAGS"
1632 LDFLAGS="$old_LDFLAGS"
1633 LIBS="$old_LIBS"
1634else
1635 LIBGD=no
1636fi
c8f3e6db
UD
1637AC_MSG_RESULT($LIBGD)
1638AC_SUBST(LIBGD)
3d558f4e 1639
2fff3d93
UD
1640# SELinux detection
1641if test x$with_selinux = xno ; then
1642 have_selinux=no;
1643else
1644 # See if we have the SELinux library
1645 AC_CHECK_LIB(selinux, is_selinux_enabled,
1646 have_selinux=yes, have_selinux=no)
49155d51 1647 if test x$with_selinux = xyes ; then
2fff3d93 1648 if test x$have_selinux = xno ; then
0699f766 1649 AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found])
2fff3d93
UD
1650 fi
1651 fi
1652fi
1653# Check if we're building with SELinux support.
1654if test "x$have_selinux" = xyes; then
943db9eb 1655 AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
ec23b9be
UD
1656
1657 # See if we have the libaudit library
943db9eb 1658 AC_CHECK_LIB(audit, audit_log_user_avc_message,
77e8bddf 1659 have_libaudit=yes, have_libaudit=no)
ec23b9be 1660 if test "x$have_libaudit" = xyes; then
943db9eb 1661 AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
ec23b9be
UD
1662 fi
1663 AC_SUBST(have_libaudit)
1f063dca
UD
1664
1665 # See if we have the libcap library
1666 AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
1667 if test "x$have_libcap" = xyes; then
1668 AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
1669 fi
1670 AC_SUBST(have_libcap)
2fff3d93
UD
1671fi
1672AC_SUBST(have_selinux)
1673
61653dfb
RM
1674CPPUNDEFS=
1675dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
1676dnl Since we are building the implementations of the fortified functions here,
1677dnl having the macro defined interacts very badly.
1678AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
1679[AC_TRY_COMPILE([], [
1680#ifdef _FORTIFY_SOURCE
1681# error bogon
1682#endif],
1683 [libc_cv_predef_fortify_source=no],
1684 [libc_cv_predef_fortify_source=yes])])
1685if test $libc_cv_predef_fortify_source = yes; then
1686 CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
1687fi
1688AC_SUBST(CPPUNDEFS)
1689
61b1ef6e
MF
1690# Some linkers on some architectures support __ehdr_start but with
1691# bugs. Make sure usage of it does not create relocations in the
1692# output (as the linker should resolve them all for us).
1693AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
44c4e5d5
RM
1694 libc_cv_ehdr_start, [
1695old_CFLAGS="$CFLAGS"
1696old_LDFLAGS="$LDFLAGS"
1697old_LIBS="$LIBS"
1698CFLAGS="$CFLAGS -fPIC"
66a704c4 1699LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp"
44c4e5d5
RM
1700LIBS=
1701AC_LINK_IFELSE([AC_LANG_SOURCE([
61b1ef6e
MF
1702typedef struct {
1703 char foo;
1704 long val;
1705} Ehdr;
1706extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
1707long ehdr (void) { return __ehdr_start.val; }
44c4e5d5 1708])],
e37fc4aa 1709 [if $READELF -r conftest | grep -F __ehdr_start >/dev/null; then
61b1ef6e
MF
1710 libc_cv_ehdr_start=broken
1711 else
1712 libc_cv_ehdr_start=yes
1713 fi], [libc_cv_ehdr_start=no])
44c4e5d5
RM
1714CFLAGS="$old_CFLAGS"
1715LDFLAGS="$old_LDFLAGS"
1716LIBS="$old_LIBS"
1717])
61b1ef6e 1718if test "$libc_cv_ehdr_start" = yes; then
44c4e5d5 1719 AC_DEFINE([HAVE_EHDR_START])
61b1ef6e
MF
1720elif test "$libc_cv_ehdr_start" = broken; then
1721 AC_MSG_WARN([linker is broken -- you should upgrade])
9fe7e787
RM
1722fi
1723
1724AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
1725 libc_cv_builtin_trap, [dnl
1726libc_cv_builtin_trap=no
1727AC_TRY_COMPILE([], [__builtin_trap ()], [
1728libc_undefs=`$NM -u conftest.o |
1729 LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1730 2>&AS_MESSAGE_LOG_FD` || {
1731 AC_MSG_ERROR([confusing output from $NM -u])
1732}
1733echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1734if test -z "$libc_undefs"; then
1735 libc_cv_builtin_trap=yes
1736fi])])
1737if test $libc_cv_builtin_trap = yes; then
1738 AC_DEFINE([HAVE_BUILTIN_TRAP])
44c4e5d5
RM
1739fi
1740
99e1dc0a
FW
1741dnl C++ feature tests.
1742AC_LANG_PUSH([C++])
1743
1744AC_CACHE_CHECK([whether the C++ compiler supports thread_local],
1745 libc_cv_cxx_thread_local, [
1746old_CXXFLAGS="$CXXFLAGS"
1747CXXFLAGS="$CXXFLAGS -std=gnu++11"
1748AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1749#include <thread>
1750
1751// Compiler support.
1752struct S
1753{
1754 S ();
1755 ~S ();
1756};
1757thread_local S s;
1758S * get () { return &s; }
1759
1760// libstdc++ support.
1761#ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1762#error __cxa_thread_atexit_impl not supported
1763#endif
1764])],
1765 [libc_cv_cxx_thread_local=yes],
1766 [libc_cv_cxx_thread_local=no])
1767CXXFLAGS="$old_CXXFLAGS"
1768])
1769AC_SUBST(libc_cv_cxx_thread_local)
1770
1771AC_LANG_POP([C++])
1772dnl End of C++ feature tests.
1773
c224a18a
RM
1774### End of automated tests.
1775### Now run sysdeps configure fragments.
1776
cb343854 1777# They also can set these variables.
591e1ffb 1778use_ldconfig=no
cb343854 1779ldd_rewrite_script=no
77259608 1780libc_cv_sysconfdir=$sysconfdir
4248b1b1 1781libc_cv_localstatedir=$localstatedir
74bd2300 1782libc_cv_gcc_unwind_find_fde=no
e2fd3cbe 1783libc_cv_idn=no
cb343854 1784
28f540f4 1785# Iterate over all the sysdep directories we will use, running their
09055553 1786# configure fragments.
28f540f4 1787for dir in $sysnames; do
57ba7bb4
UD
1788 case $dir in
1789 /*) dest=$dir ;;
1790 *) dest=$srcdir/$dir ;;
1791 esac
1792 if test -r $dest/configure; then
d1149385 1793 AC_MSG_RESULT(running configure fragment for $dir)
57ba7bb4 1794 . $dest/configure
28f540f4 1795 fi
28f540f4
RM
1796done
1797
5695d46f
AS
1798if test x"$build_mathvec" = xnotset; then
1799 build_mathvec=no
1800fi
1801LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1802
7ffa9423
AZ
1803AC_SUBST(libc_extra_cflags)
1804AC_SUBST(libc_extra_cppflags)
1805
74bd2300
UD
1806if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1807 AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1808fi
1809AC_SUBST(libc_cv_gcc_unwind_find_fde)
1810
6e6249d0
RM
1811# A sysdeps configure fragment can reset this if IFUNC is not actually
1812# usable even though the assembler knows how to generate the symbol type.
1813if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
1814 AC_DEFINE(HAVE_IFUNC)
1815fi
92ad88fe 1816LIBC_CONFIG_VAR([have-ifunc], [$libc_cv_ld_gnu_indirect_function])
6e6249d0 1817
022dfdce
SL
1818if test x"$libc_cv_gcc_indirect_function" = xyes; then
1819 AC_DEFINE(HAVE_GCC_IFUNC)
1820fi
1821
3cc3ef96
RM
1822# This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1823# configure fragment can override the value to prevent this AC_DEFINE.
1824AC_SUBST(use_nscd)
1825if test "x$use_nscd" != xno; then
1826 AC_DEFINE([USE_NSCD])
1827fi
c53d909c
RM
1828if test "x$build_nscd" = xdefault; then
1829 build_nscd=$use_nscd
1830fi
3cc3ef96 1831
84384f5b 1832AC_SUBST(libc_cv_slibdir)
aaa8cb4b 1833AC_SUBST(libc_cv_rtlddir)
90fe682d 1834AC_SUBST(libc_cv_complocaledir)
77259608 1835AC_SUBST(libc_cv_sysconfdir)
4248b1b1 1836AC_SUBST(libc_cv_localstatedir)
1ef32c3d
UD
1837AC_SUBST(libc_cv_rootsbindir)
1838
f57f8055
RM
1839if test x$use_ldconfig = xyes; then
1840 AC_DEFINE(USE_LDCONFIG)
1841fi
591e1ffb 1842AC_SUBST(use_ldconfig)
cb343854 1843AC_SUBST(ldd_rewrite_script)
84384f5b 1844
650425ce 1845AC_SUBST(static)
ff3d7ed3 1846AC_SUBST(shared)
a334319f 1847
ff886b82
UD
1848AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1849[libc_cv_pic_default=yes
cc3fa755 1850cat > conftest.c <<EOF
9756dfe1 1851#if defined __PIC__ || defined __pic__ || defined PIC || defined pic
cc3fa755
UD
1852# error PIC is default.
1853#endif
1854EOF
0b4ee387 1855if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
ff886b82 1856 libc_cv_pic_default=no
cc3fa755
UD
1857fi
1858rm -f conftest.*])
ff886b82 1859AC_SUBST(libc_cv_pic_default)
cc3fa755 1860
00c714df
L
1861AC_CACHE_CHECK([whether -fPIE is default], libc_cv_cc_pie_default,
1862[libc_cv_cc_pie_default=yes
cc08749b
L
1863cat > conftest.c <<EOF
1864#if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1865# error PIE is default.
1866#endif
1867EOF
1868if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
00c714df 1869 libc_cv_cc_pie_default=no
cc08749b
L
1870fi
1871rm -f conftest.*])
00c714df
L
1872libc_cv_pie_default=$libc_cv_cc_pie_default
1873AC_SUBST(libc_cv_cc_pie_default)
cc08749b
L
1874AC_SUBST(libc_cv_pie_default)
1875
abcb584d
L
1876# Set the `multidir' variable by grabbing the variable from the compiler.
1877# We do it once and save the result in a generated makefile.
1878libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory`
1879AC_SUBST(libc_cv_multidir)
1880
9d7a3741
L
1881if test "$static_pie" = yes; then
1882 # The linker must support --no-dynamic-linker.
1883 if test "$libc_cv_no_dynamic_linker" != yes; then
1884 AC_MSG_ERROR([linker support for --no-dynamic-linker needed])
1885 fi
1886 # Default to PIE.
1887 libc_cv_pie_default=yes
1888 AC_DEFINE(ENABLE_STATIC_PIE)
1889fi
1890LIBC_CONFIG_VAR([enable-static-pie], [$static_pie])
1891
ff3d7ed3 1892AC_SUBST(profile)
5107cf1d 1893AC_SUBST(static_nss)
ff3d7ed3 1894
edf5b2d7
UD
1895AC_SUBST(DEFINES)
1896
cb8a6dbd 1897dnl See sysdeps/mach/configure.ac for this variable.
61c83c3f
RM
1898AC_SUBST(mach_interface_list)
1899
ee74a442
UD
1900VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1901RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
df4ef2ab 1902AC_SUBST(VERSION)
ee74a442 1903AC_SUBST(RELEASE)
df4ef2ab 1904
728e272a 1905AC_CONFIG_FILES([config.make Makefile])
c118d634 1906AC_CONFIG_COMMANDS([default],[[
737547be
UD
1907case $CONFIG_FILES in *config.make*)
1908echo "$config_vars" >> config.make;;
1909esac
c118d634
RM
1910test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1911AC_OUTPUT