]> git.ipfire.org Git - thirdparty/glibc.git/blame - configure.ac
Remove unreliable parts of rt/tst-cpuclock2
[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
ebae2f5a
MC
473AC_ARG_ENABLE([scv],
474 AC_HELP_STRING([--disable-scv],
475 [syscalls will not use scv instruction, even if the kernel supports it, powerpc only]),
476 [use_scv=$enableval],
477 [use_scv=yes])
478
479AS_IF([[test "$use_scv" != "no"]],[AC_DEFINE(USE_PPC_SCV)])
480
28f540f4
RM
481# We keep the original values in `$config_*' and never modify them, so we
482# can write them unchanged into config.make. Everything else uses
483# $machine, $vendor, and $os, and changes them whenever convenient.
484config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
485
2f64b655
UD
486# Don't allow vendor == "unknown"
487test "$config_vendor" = unknown && config_vendor=
488config_os="`echo $config_os | sed 's/^unknown-//'`"
489
a2fe9c76 490# Some configurations imply other options.
0269750c 491elf=yes
a2fe9c76 492
644d3857 493# The configure fragment of a port can modify these to supplement
8f73811b
RM
494# or override the table in the case statement below. No fragment should
495# ever change the config_* variables, however.
28f540f4
RM
496machine=$config_machine
497vendor=$config_vendor
498os=$config_os
b22d21b3 499base_os=''
28f540f4 500
2ceaa76a
RM
501submachine=
502AC_ARG_WITH([cpu],
503 AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
504 [dnl
505 case "$withval" in
506 yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
507 no) ;;
508 *) submachine="$withval" ;;
509 esac
510])
511
05439291
RM
512# An preconfigure script can set this when it wants to disable the sanity
513# check below.
514libc_config_ok=no
515
8df5d347
JM
516# A preconfigure script for a system that may or may not use fpu
517# sysdeps directories sets this to a preprocessor conditional for
518# whether to use such directories.
519with_fp_cond=1
520
644d3857 521dnl Let sysdeps/*/preconfigure act here.
10a803e0
RM
522LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
523
8f73811b 524
bdc8eb03
UD
525###
526### By using the undocumented --enable-hacker-mode option for configure
527### one can skip this test to make the configuration not fail for unsupported
528### platforms.
529###
8f73811b 530if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
bdc8eb03 531 case "$machine-$host_os" in
2ce4f015 532 *-linux* | *-gnu*)
bdc8eb03
UD
533 ;;
534 *)
4e58b648
MF
535 AC_MSG_ERROR([
536*** The GNU C library is currently unavailable for this platform.
537*** If you are interested in seeing glibc on this platform visit
538*** the "How to submit a new port" in the wiki:
539*** https://sourceware.org/glibc/wiki/#Development
540*** and join the community!])
bdc8eb03
UD
541 ;;
542 esac
543fi
544
3e239be6
JM
545# Set base_machine if not set by a preconfigure fragment.
546test -n "$base_machine" || base_machine=$machine
f0523145 547AC_SUBST(base_machine)
28f540f4 548
8df5d347
JM
549# Determine whether to use fpu or nofpu sysdeps directories.
550AC_CACHE_CHECK([for use of fpu sysdeps directories],
551 libc_cv_with_fp, [dnl
552cat > conftest.c <<EOF
553#if $with_fp_cond
554int dummy;
555#else
556# error "no hardware floating point"
557#endif
558EOF
559libc_cv_with_fp=no
560if ${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s \
561 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
562 libc_cv_with_fp=yes
563fi
564rm -f conftest*])
565AC_SUBST(libc_cv_with_fp)
566
03baef1c
NA
567AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
568LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
569 [libc_cv_ssp=yes],
570 [libc_cv_ssp=no])
571])
572
573AC_CACHE_CHECK(for -fstack-protector-strong, libc_cv_ssp_strong, [dnl
574LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-strong],
575 [libc_cv_ssp_strong=yes],
576 [libc_cv_ssp_strong=no])
577])
578
579AC_CACHE_CHECK(for -fstack-protector-all, libc_cv_ssp_all, [dnl
580LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-all],
581 [libc_cv_ssp_all=yes],
582 [libc_cv_ssp_all=no])
583])
584
585stack_protector=
586no_stack_protector=
587if test "$libc_cv_ssp" = yes; then
588 no_stack_protector="-fno-stack-protector -DSTACK_PROTECTOR_LEVEL=0"
de659123 589 AC_DEFINE(HAVE_CC_NO_STACK_PROTECTOR)
03baef1c
NA
590fi
591
592if test "$enable_stack_protector" = yes && test "$libc_cv_ssp" = yes; then
593 stack_protector="-fstack-protector"
594 AC_DEFINE(STACK_PROTECTOR_LEVEL, 1)
595elif test "$enable_stack_protector" = all && test "$libc_cv_ssp_all" = yes; then
596 stack_protector="-fstack-protector-all"
597 AC_DEFINE(STACK_PROTECTOR_LEVEL, 2)
598elif test "$enable_stack_protector" = strong && test "$libc_cv_ssp_strong" = yes; then
599 stack_protector="-fstack-protector-strong"
600 AC_DEFINE(STACK_PROTECTOR_LEVEL, 3)
66a704c4
NA
601else
602 stack_protector="-fno-stack-protector"
603 AC_DEFINE(STACK_PROTECTOR_LEVEL, 0)
03baef1c
NA
604fi
605AC_SUBST(libc_cv_ssp)
606AC_SUBST(stack_protector)
607AC_SUBST(no_stack_protector)
608
66a704c4
NA
609if test -n "$stack_protector"; then
610 dnl Don't run configure tests with stack-protection on, to avoid problems with
611 dnl bootstrapping.
612 no_ssp=-fno-stack-protector
613else
614 no_ssp=
615
616 if test "$enable_stack_protector" != no; then
617 AC_MSG_ERROR([--enable-stack-protector=$enable_stack_protector specified, but specified level of stack protection is not supported by the compiler.])
618 fi
619fi
620
0cae3f4b
MF
621# For the multi-arch option we need support in the assembler & linker.
622AC_CACHE_CHECK([for assembler and linker STT_GNU_IFUNC support],
623 libc_cv_ld_gnu_indirect_function, [dnl
786b0b67 624cat > conftest.S <<EOF
84b9230c 625.type foo,%gnu_indirect_function
0cae3f4b
MF
626foo:
627.globl _start
628_start:
629.globl __start
630__start:
631.data
786b0b67
AS
632#ifdef _LP64
633.quad foo
634#else
0cae3f4b 635.long foo
786b0b67 636#endif
84b9230c 637EOF
0cae3f4b
MF
638libc_cv_ld_gnu_indirect_function=no
639if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
66a704c4 640 -nostartfiles -nostdlib $no_ssp \
786b0b67 641 -o conftest conftest.S 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
0cae3f4b
MF
642 # Do a link to see if the backend supports IFUNC relocs.
643 $READELF -r conftest 1>&AS_MESSAGE_LOG_FD
87a698a2 644 LC_ALL=C $READELF -Wr conftest | grep -q 'IRELATIVE\|R_SPARC_JMP_IREL' && {
0cae3f4b
MF
645 libc_cv_ld_gnu_indirect_function=yes
646 }
84b9230c
MF
647fi
648rm -f conftest*])
649
022dfdce
SL
650# Check if gcc supports attribute ifunc as it is used in libc_ifunc macro.
651AC_CACHE_CHECK([for gcc attribute ifunc support],
652 libc_cv_gcc_indirect_function, [dnl
653cat > conftest.c <<EOF
654extern int func (int);
655int used_func (int a)
656{
657 return a;
658}
659static void *resolver ()
660{
661 return &used_func;
662}
663extern __typeof (func) func __attribute__ ((ifunc ("resolver")));
664EOF
665libc_cv_gcc_indirect_function=no
666if ${CC-cc} -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD \
667 2>&AS_MESSAGE_LOG_FD ; then
668 if $READELF -s conftest.o | grep IFUNC >/dev/null 2>&AS_MESSAGE_LOG_FD; then
669 libc_cv_gcc_indirect_function=yes
670 fi
671fi
672rm -f conftest*])
673
b5c45e83
AZ
674# Check if linker supports textrel relocation with ifunc (used on elf/tests).
675# Note that it relies on libc_cv_ld_gnu_indirect_function test above.
676AC_CACHE_CHECK([whether the linker supports textrels along with ifunc],
677 libc_cv_textrel_ifunc, [dnl
678cat > conftest.S <<EOF
679.type foo,%gnu_indirect_function
680foo:
681.globl _start
682_start:
683.globl __start
684__start:
685.data
686#ifdef _LP64
687.quad foo
688#else
689.long foo
690#endif
691.text
692.globl address
693address:
694#ifdef _LP64
695.quad address
696#else
697.long address
698#endif
699EOF
700libc_cv_textrel_ifunc=no
701if test $libc_cv_ld_gnu_indirect_function = yes; then
702 if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostartfiles -nostdlib $no_ssp -pie -o conftest conftest.S); then
703 libc_cv_textrel_ifunc=yes
704 fi
705fi
706rm -f conftest*])
707AC_SUBST(libc_cv_textrel_ifunc)
708
cd6ae7ea
FS
709# Check if CC supports attribute retain as it is used in attribute_used_retain macro.
710AC_CACHE_CHECK([for GNU attribute retain support],
711 libc_cv_gnu_retain, [dnl
712cat > conftest.c <<EOF
713static int var __attribute__ ((used, retain, section ("__libc_atexit")));
714EOF
715libc_cv_gnu_retain=no
716if ${CC-cc} -Werror -c conftest.c -o /dev/null 1>&AS_MESSAGE_LOG_FD \
717 2>&AS_MESSAGE_LOG_FD ; then
718 libc_cv_gnu_retain=yes
719fi
720rm -f conftest*])
721if test $libc_cv_gnu_retain = yes; then
722 AC_DEFINE(HAVE_GNU_RETAIN)
723fi
724LIBC_CONFIG_VAR([have-gnu-retain], [$libc_cv_gnu_retain])
725
8f6f5362
AZ
726# Check if gcc warns about alias for function with incompatible types.
727AC_CACHE_CHECK([if compiler warns about alias for function with incompatible types],
728 libc_cv_gcc_incompatible_alias, [dnl
729cat > conftest.c <<EOF
730int __redirect_foo (const void *s, int c);
731
732__typeof (__redirect_foo) *foo_impl (void) __asm__ ("foo");
733__typeof (__redirect_foo) *foo_impl (void)
734{
735 return 0;
736}
737
738extern __typeof (__redirect_foo) foo_alias __attribute__ ((alias ("foo")));
739EOF
740libc_cv_gcc_incompatible_alias=yes
741if ${CC-cc} -Werror -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
742 libc_cv_gcc_incompatible_alias=no
743fi
744rm -f conftest*])
745
0cae3f4b 746if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
84b9230c
MF
747 if test x"$multi_arch" = xyes; then
748 AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
749 else
750 multi_arch=no
751 fi
752fi
8f6f5362
AZ
753if test x"$libc_cv_gcc_indirect_function" != xyes; then
754 # GCC 8+ emits a warning for alias with incompatible types and it might
755 # fail to build ifunc resolvers aliases to either weak or internal
756 # symbols. Disables multiarch build in this case.
757 if test x"$libc_cv_gcc_incompatible_alias" == xyes; then
758 AC_MSG_WARN([gcc emits a warning for alias between functions of incompatible types])
759 if test x"$multi_arch" = xyes; then
760 AC_MSG_ERROR([--enable-multi-arch support requires a gcc with gnu-indirect-function support])
761 fi
762 AC_MSG_WARN([Multi-arch is disabled.])
763 multi_arch=no
764 elif test x"$multi_arch" = xyes; then
765 AC_MSG_WARN([--enable-multi-arch support recommends a gcc with gnu-indirect-function support.
022dfdce 766Please use a gcc which supports it by default or configure gcc with --enable-gnu-indirect-function])
8f6f5362 767 fi
022dfdce 768fi
6270516e 769multi_arch_d=
84b9230c
MF
770if test x"$multi_arch" != xno; then
771 multi_arch_d=/multiarch
772fi
773
f0523145 774# Compute the list of sysdep directories for this configuration.
f332db02 775# This can take a while to compute.
f0523145 776sysdep_dir=$srcdir/sysdeps
f332db02 777AC_MSG_CHECKING(sysdep dirs)
f0523145
RM
778dnl We need to use [ and ] for other purposes for a while now.
779changequote(,)dnl
28f540f4
RM
780# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
781os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
782
b22d21b3 783test "x$base_os" != x || case "$os" in
28f540f4
RM
784gnu*)
785 base_os=mach/hurd ;;
2ce4f015 786linux*)
28f540f4 787 base_os=unix/sysv ;;
28f540f4
RM
788esac
789
790# For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
791tail=$os
792ostry=$os
793while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
794 ostry="$ostry /$o"
795 tail=$o
75914335 796done
28f540f4
RM
797o=`echo $tail | sed 's/[0-9]*$//'`
798if test $o != $tail; then
799 ostry="$ostry /$o"
800fi
ec4b0518
UD
801# For linux-gnu, try linux-gnu, then linux.
802o=`echo $tail | sed 's/-.*$//'`
803if test $o != $tail; then
804 ostry="$ostry /$o"
805fi
28f540f4
RM
806
807# For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
808base=
809tail=$base_os
810while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
811 set $b
812 base="$base /$1"
813 tail="$2"
814done
815
ae6b8730 816# For sparc/sparc32, try sparc/sparc32 and then sparc.
28f540f4 817mach=
2ceaa76a 818tail=$machine${submachine:+/$submachine}
28f540f4
RM
819while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
820 set $m
a63189c0
AZ
821 # Prepend the machine's FPU directory unless the architecture specific
822 # preconfigure disables it.
8df5d347 823 if test "$libc_cv_with_fp" = yes; then
6270516e 824 maybe_fpu=/fpu
f4b07664 825 else
6270516e 826 maybe_fpu=/nofpu
82d00cab 827 fi
6270516e
RM
828 # For each machine term, try it with and then without /multiarch.
829 for try_fpu in $maybe_fpu ''; do
830 for try_multi in $multi_arch_d ''; do
831 mach="$mach /$1$try_fpu$try_multi"
832 done
833 done
28f540f4
RM
834 tail="$2"
835done
836
837dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
838changequote([,])dnl
839
840# Find what sysdep directories exist.
841sysnames=
4b69abad
RM
842for b in $base ''; do
843 for m0 in $mach ''; do
844 for v in /$vendor ''; do
845 test "$v" = / && continue
846 for o in /$ostry ''; do
847 test "$o" = / && continue
6270516e 848 for m in $mach ''; do
644d3857
JM
849 try_suffix="$m0$b$v$o$m"
850 if test -n "$try_suffix"; then
851 try_srcdir="${srcdir}/"
852 try="sysdeps$try_suffix"
853 test -n "$enable_debug_configure" &&
854 echo "$0 [DEBUG]: try $try" >&2
855 if test -d "$try_srcdir$try"; then
856 sysnames="$sysnames $try"
857 { test -n "$o" || test -n "$b"; } && os_used=t
858 { test -n "$m" || test -n "$m0"; } && machine_used=t
859 case x${m0:-$m} in
860 x*/$submachine) submachine_used=t ;;
861 esac
862 fi
863 fi
28f540f4
RM
864 done
865 done
866 done
867 done
4b69abad 868done
28f540f4 869
6f89d2f3
L
870# If the assembler supports gnu_indirect_function symbol type and the
871# architecture supports multi-arch, we enable multi-arch by default.
644d3857 872case $sysnames in
84b9230c
MF
873*"$multi_arch_d"*)
874 ;;
875*)
77e8bddf 876 test x"$multi_arch" = xdefault && multi_arch=no
84b9230c
MF
877 ;;
878esac
879if test x"$multi_arch" != xno; then
6f89d2f3
L
880 AC_DEFINE(USE_MULTIARCH)
881fi
882AC_SUBST(multi_arch)
883
28f540f4
RM
884if test -z "$os_used" && test "$os" != none; then
885 AC_MSG_ERROR(Operating system $os is not supported.)
886fi
887if test -z "$machine_used" && test "$machine" != none; then
888 AC_MSG_ERROR(The $machine is not supported.)
889fi
2ceaa76a
RM
890if test -z "$submachine_used" && test -n "$submachine"; then
891 AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
892fi
893AC_SUBST(submachine)
28f540f4
RM
894
895# We have now validated the configuration.
896
28f540f4
RM
897# Expand the list of system names into a full list of directories
898# from each element's parent name and Implies file (if present).
899set $sysnames
e50ec9f9 900names=
28f540f4
RM
901while test $# -gt 0; do
902 name=$1
903 shift
904
e50ec9f9 905 case " $names " in *" $name "*)
f332db02
RM
906 # Already in the list.
907 continue
e50ec9f9 908 esac
f332db02
RM
909
910 # Report each name as we discover it, so there is no long pause in output.
0b4ee387 911 echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
f332db02 912
57ba7bb4
UD
913 name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
914
915 case $name in
916 /*) xsrcdir= ;;
917 *) xsrcdir=$srcdir/ ;;
918 esac
919 test -n "$enable_debug_configure" &&
920 echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
921
ba75122d
RM
922 for implies_file in Implies Implies-before Implies-after; do
923 implies_type=`echo $implies_file | sed s/-/_/`
924 eval ${implies_type}=
925 if test -f $xsrcdir$name/$implies_file; then
926 # Collect more names from the `Implies' file (removing comments).
927 implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
928 for x in $implied_candidate; do
929 found=no
930 if test -d $xsrcdir$name_base/$x; then
931 eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
636ccfc8 932 found=yes
ba75122d 933 fi
644d3857
JM
934 try="sysdeps/$x"
935 try_srcdir=$srcdir/
936 test -n "$enable_debug_configure" &&
937 echo "[DEBUG]: $name $implies_file $x try() {$try_srcdir}$try" >&2
938 if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
939 then
940 eval "${implies_type}=\"\$${implies_type} \$try\""
941 found=yes
942 fi
ba75122d
RM
943 if test $found = no; then
944 AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
636ccfc8
UD
945 fi
946 done
ba75122d
RM
947 fi
948 done
28f540f4
RM
949
950 # Add NAME to the list of names.
951 names="$names $name"
952
953 # Find the parent of NAME, using the empty string if it has none.
954changequote(,)dnl
57ba7bb4 955 parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
28f540f4
RM
956changequote([,])dnl
957
ba75122d
RM
958 test -n "$enable_debug_configure" &&
959 echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
57633811 960Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
ba75122d 961
28f540f4
RM
962 # Add the names implied by NAME, and NAME's parent (if it has one), to
963 # the list of names to be processed (the argument list). We prepend the
964 # implied names to the list and append the parent. We want implied
965 # directories to come before further directories inferred from the
966 # configuration components; this ensures that for sysv4, unix/common
967 # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
968 # after sysv4).
ba75122d 969 sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
28f540f4
RM
970 test -n "$sysnames" && set $sysnames
971done
972
973# Add the default directories.
83ef87ba 974default_sysnames="sysdeps/generic"
ecdc196c 975sysnames="$names $default_sysnames"
f332db02
RM
976AC_SUBST(sysnames)
977# The other names were emitted during the scan.
ecdc196c 978AC_MSG_RESULT($default_sysnames)
28f540f4 979
f332db02
RM
980
981### Locate tools.
28f540f4 982
28f540f4 983AC_PROG_INSTALL
2b80a372 984if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
28f540f4 985 # The makefiles need to use a different form to find it in $srcdir.
2b80a372 986 INSTALL='\$(..)./scripts/install-sh -c'
28f540f4 987fi
0e3426bb 988AC_PROG_LN_S
ae828bc6 989
4baa087a 990LIBC_PROG_BINUTILS
4baa087a 991
b4396163 992# Accept binutils 2.25 or newer.
4baa087a
RM
993AC_CHECK_PROG_VER(AS, $AS, --version,
994 [GNU assembler.* \([0-9]*\.[0-9.]*\)],
b4396163 995 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
bd805071 996 AS=: critic_missing="$critic_missing as")
f300dc73 997
224edada
FS
998libc_cv_with_lld=no
999case $($LD --version) in
1000 "GNU gold"*)
f300dc73 1001 # Accept gold 1.14 or higher
224edada 1002 AC_CHECK_PROG_VER(LD, $LD, --version,
f300dc73
L
1003 [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
1004 [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
1005 LD=: critic_missing="$critic_missing GNU gold")
224edada
FS
1006 ;;
1007 "LLD"*)
1008 # Accept LLD 13.0.0 or higher
1009 AC_CHECK_PROG_VER(LD, $LD, --version,
1010 [LLD.* \([0-9][0-9]*\.[0-9.]*\)],
1011 [1[3-9].*|[2-9][0-9].*],
1012 LD=: critic_missing="$critic_missing LLD")
1013 libc_cv_with_lld=yes
1014 ;;
1015 *)
1016 AC_CHECK_PROG_VER(LD, $LD, --version,
f300dc73 1017 [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
073e8fa7 1018 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
f300dc73 1019 LD=: critic_missing="$critic_missing GNU ld")
224edada
FS
1020 ;;
1021esac
1022LIBC_CONFIG_VAR([with-lld], [$libc_cv_with_lld])
4baa087a 1023
63bda0c1 1024# These programs are version sensitive.
22e65f8f 1025AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
8fc1e2ca 1026 [GNU Make[^0-9]*\([0-9][0-9.]*\)],
f2873d2d 1027 [[4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
63bda0c1 1028
22e65f8f 1029AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
bdd421cc 1030 [GNU gettext.* \([0-9]*\.[0-9.]*\)],
aefdff34
RM
1031 [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
1032 MSGFMT=: aux_missing="$aux_missing msgfmt")
63bda0c1 1033AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
8b7fb588 1034 [GNU texinfo.* \([0-9][0-9.]*\)],
3a12c70f 1035 [4.[7-9]*|4.[1-9][0-9]*|[5-9].*],
aefdff34 1036 MAKEINFO=: aux_missing="$aux_missing makeinfo")
d6a97a28 1037AC_CHECK_PROG_VER(SED, sed, --version,
07e51550 1038 [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
aefdff34
RM
1039 [3.0[2-9]*|3.[1-9]*|[4-9]*],
1040 SED=: aux_missing="$aux_missing sed")
0786794f
AM
1041AC_CHECK_PROG_VER(AWK, gawk, --version,
1042 [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
12086fb4 1043 [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
1faaf703
JB
1044AC_CHECK_PROG_VER(BISON, bison, --version,
1045 [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
1046 [2.7*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing bison")
63bda0c1 1047
461a7b1e 1048AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
b190bccc 1049AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[
4dcbbc3b 1050#if !defined __GNUC__ || __GNUC__ < 6 || (__GNUC__ == 6 && __GNUC_MINOR__ < 2)
461a7b1e 1051#error insufficient compiler
b190bccc 1052#endif]])],
461a7b1e
RM
1053 [libc_cv_compiler_ok=yes],
1054 [libc_cv_compiler_ok=no])])
1055AS_IF([test $libc_cv_compiler_ok != yes],
1056 [critic_missing="$critic_missing compiler"])
1057
30b99d79 1058AC_CHECK_TOOL(NM, nm, false)
d30cf5bb 1059
8894bad3
AM
1060if test "x$maintainer" = "xyes"; then
1061 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
1062 case "x$AUTOCONF" in
1063 xno|x|x:) AUTOCONF=no ;;
1064 *)
1065 AC_CACHE_CHECK(dnl
1066 whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
1067 if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then
1068 libc_cv_autoconf_works=yes
1069 else
1070 libc_cv_autoconf_works=no
1071 fi])
1072 test $libc_cv_autoconf_works = yes || AUTOCONF=no
1073 ;;
1074 esac
1075 if test "x$AUTOCONF" = xno; then
1076 aux_missing="$aux_missing autoconf"
1077 fi
9e8ac24b
AM
1078else
1079 AUTOCONF=no
14519931 1080fi
1400de2e 1081
8ce8299f 1082# Check for python3 if available, or else python.
c6982f7e
JM
1083AC_CHECK_PROG_VER(PYTHON_PROG, python3 python, --version,
1084 [Python \([0-9][0-9.]*\)],
1085 [3.[4-9]*|3.[1-9][0-9]*|[4-9].*|[1-9][0-9]*],
1086 critic_missing="$critic_missing python")
1087PYTHON="$PYTHON_PROG -B"
1088AC_SUBST(PYTHON)
8ce8299f 1089
32a448ed
RM
1090test -n "$critic_missing" && AC_MSG_ERROR([
1091*** These critical programs are missing or too old:$critic_missing
1092*** Check the INSTALL file for required versions.])
1093
4bca4c17 1094test -n "$aux_missing" && AC_MSG_WARN([
9c6fffc0 1095*** These auxiliary programs are missing or incompatible versions:$aux_missing
8ce8299f 1096*** some features or tests will be disabled.
63bda0c1 1097*** Check the INSTALL file for required versions.])
28f540f4 1098
dbe7a0f5
UD
1099# if using special system headers, find out the compiler's sekrit
1100# header directory and add that to the list. NOTE: Only does the right
1101# thing on a system that doesn't need fixincludes. (Not presently a problem.)
1102if test -n "$sysheaders"; then
67fbfa5c
RM
1103 SYSINCLUDES=-nostdinc
1104 for d in include include-fixed; do
1105 i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
1106 SYSINCLUDES="$SYSINCLUDES -isystem $i"
1107 done
1108 SYSINCLUDES="$SYSINCLUDES \
3d6ce23a 1109-isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
ef226fec 1110 if test -n "$CXX"; then
7872cfb0 1111 CXX_SYSINCLUDES=
67060746
AC
1112 for cxxheaders in `$CXX -v -S -x c++ /dev/null -o /dev/null 2>&1 \
1113 | sed -n -e '1,/#include/d' -e 's/^ \(\/.*\/[cg]++\)/\1/p'`; do
1114 test "x$cxxheaders" != x &&
1115 CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders"
1116 done
ef226fec 1117 fi
dbe7a0f5
UD
1118fi
1119AC_SUBST(SYSINCLUDES)
ef226fec 1120AC_SUBST(CXX_SYSINCLUDES)
dbe7a0f5 1121
fc3e1337
FW
1122# Obtain some C++ header file paths. This is used to make a local
1123# copy of those headers in Makerules.
1124if test -n "$CXX"; then
1125 find_cxx_header () {
c2528fef
FW
1126 echo "#include <$1>" | $CXX -M -MP -x c++ - 2>/dev/null \
1127 | sed -n "\,$1:,{s/:\$//;p}"
fc3e1337
FW
1128 }
1129 CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
1130 CXX_CMATH_HEADER="$(find_cxx_header cmath)"
a65ea28d 1131 CXX_BITS_STD_ABS_H="$(find_cxx_header bits/std_abs.h)"
fc3e1337
FW
1132fi
1133AC_SUBST(CXX_CSTDLIB_HEADER)
1134AC_SUBST(CXX_CMATH_HEADER)
a65ea28d 1135AC_SUBST(CXX_BITS_STD_ABS_H)
fc3e1337 1136
3911660e
UD
1137# Test if LD_LIBRARY_PATH contains the notation for the current directory
1138# since this would lead to problems installing/building glibc.
1139# LD_LIBRARY_PATH contains the current directory if one of the following
1140# is true:
1141# - one of the terminals (":" and ";") is the first or last sign
1142# - two terminals occur directly after each other
1143# - the path contains an element with a dot in it
1144AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
1145changequote(,)dnl
1146case ${LD_LIBRARY_PATH} in
1147 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
b3a86ae1 1148 ld_library_path_setting="contains current directory"
3911660e
UD
1149 ;;
1150 *)
1151 ld_library_path_setting="ok"
1152 ;;
1153esac
1154changequote([,])dnl
1155AC_MSG_RESULT($ld_library_path_setting)
1156if test "$ld_library_path_setting" != "ok"; then
63bda0c1
UD
1157AC_MSG_ERROR([
1158*** LD_LIBRARY_PATH shouldn't contain the current directory when
1159*** building glibc. Please change the environment variable
1160*** and run configure again.])
3911660e 1161fi
8e31cf7e 1162
26f56c1c 1163AC_PATH_PROG(BASH_SHELL, bash, no)
84384f5b 1164
c0016081 1165AC_PATH_PROG(PERL, perl, no)
2fd5d029
RM
1166if test "$PERL" != no &&
1167 (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1168 PERL=no
ecb06196 1169fi
2f512715
AS
1170AC_PATH_PROG(INSTALL_INFO, install-info, no,
1171 $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
2de00372 1172
b8dc6a10 1173AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
9a70fcab 1174cat > conftest.s <<EOF
8c0c01db 1175.text
ae1025be 1176foo:
df2a0c93 1177.set glibc_conftest_frobozz,foo
7b8e0d49 1178.globl glibc_conftest_frobozz
e215c478 1179EOF
df2a0c93
RM
1180# The alpha-dec-osf1 assembler gives only a warning for `.set'
1181# (but it doesn't work), so we must do a linking check to be sure.
1182cat > conftest1.c <<\EOF
1183extern int glibc_conftest_frobozz;
640f0119 1184void _start() { glibc_conftest_frobozz = 1; }
df2a0c93
RM
1185EOF
1186if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
66a704c4 1187 -nostartfiles -nostdlib $no_ssp \
0b4ee387 1188 -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
e215c478
RM
1189 libc_cv_asm_set_directive=yes
1190else
1191 libc_cv_asm_set_directive=no
1192fi
65b3cbcb 1193rm -f conftest*])
e215c478
RM
1194if test $libc_cv_asm_set_directive = yes; then
1195 AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1196fi
1197
2a723ff6
JM
1198AC_CACHE_CHECK(linker support for protected data symbol,
1199 libc_cv_protected_data,
1200 [cat > conftest.c <<EOF
1201 int bar __attribute__ ((visibility ("protected"))) = 1;
83569fb8 1202EOF
2a723ff6 1203 libc_cv_protected_data=no
66a704c4 1204 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -o conftest.so); then
2a723ff6
JM
1205 cat > conftest.c <<EOF
1206 extern int bar;
1207 int main (void) { return bar; }
83569fb8 1208EOF
66a704c4 1209 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp conftest.c -o conftest conftest.so); then
2a723ff6 1210 libc_cv_protected_data=yes
83569fb8 1211 fi
2a723ff6
JM
1212 fi
1213 rm -f conftest.*
1214 ])
83569fb8
L
1215AC_SUBST(libc_cv_protected_data)
1216
19f1a11e
L
1217AC_CACHE_CHECK(linker support for INSERT in linker script,
1218 libc_cv_insert,
1219 [cat > conftest.c <<EOF
5f07d47e 1220 int __attribute__ ((section(".bar"))) bar = 0x12345678;
19f1a11e
L
1221 int test (void) { return bar; }
1222EOF
1223 cat > conftest.t <<EOF
1224 SECTIONS
1225 {
1226 .bar : { *(.bar) }
1227 }
1228 INSERT AFTER .rela.dyn;
1229EOF
1230 libc_cv_insert=no
1231 if AC_TRY_COMMAND([${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -Wl,-T,conftest.t -o conftest.so]); then
1232 libc_cv_insert=yes
1233 fi
1234 rm -f conftest.*
1235 ])
1236AC_SUBST(libc_cv_insert)
1237
a0da5fe1
UD
1238AC_CACHE_CHECK(for broken __attribute__((alias())),
1239 libc_cv_broken_alias_attribute,
1240 [cat > conftest.c <<EOF
1241 extern int foo (int x) __asm ("xyzzy");
1242 int bar (int x) { return x; }
1243 extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1244 extern int dfoo;
1245 extern __typeof (dfoo) dfoo __asm ("abccb");
1246 int dfoo = 1;
37ba7d66 1247EOF
a0da5fe1
UD
1248 libc_cv_broken_alias_attribute=yes
1249 if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1250 if grep 'xyzzy' conftest.s >/dev/null &&
1251 grep 'abccb' conftest.s >/dev/null; then
1252 libc_cv_broken_alias_attribute=no
1253 fi
1254 fi
1255 rm -f conftest.c conftest.s
1256 ])
1257if test $libc_cv_broken_alias_attribute = yes; then
1258 AC_MSG_ERROR(working alias attribute support required)
1259fi
1260
2a723ff6
JM
1261AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1262 libc_cv_have_sdata_section,
1263 [echo "int i;" > conftest.c
1264 libc_cv_have_sdata_section=no
1265 if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1266 | grep '\.sdata' >/dev/null; then
1267 libc_cv_have_sdata_section=yes
1268 fi
1269 rm -f conftest.c conftest.so
1270 ])
1271if test $libc_cv_have_sdata_section = yes; then
1272 AC_DEFINE(HAVE_SDATA_SECTION)
a0da5fe1 1273fi
0d01dace 1274
a0da5fe1
UD
1275AC_CACHE_CHECK(for libunwind-support in compiler,
1276 libc_cv_cc_with_libunwind, [
1277 cat > conftest.c <<EOF
cbdb12de
UD
1278int main (void) { return 0; }
1279EOF
a0da5fe1 1280 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
8175a253 1281 conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
a0da5fe1
UD
1282 libc_cv_cc_with_libunwind=yes
1283 else
1284 libc_cv_cc_with_libunwind=no
c776b3d7 1285 fi
a0da5fe1
UD
1286 rm -f conftest*])
1287AC_SUBST(libc_cv_cc_with_libunwind)
1288if test $libc_cv_cc_with_libunwind = yes; then
1289 AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1290fi
c776b3d7 1291
a0da5fe1
UD
1292ASFLAGS_config=
1293AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1294 libc_cv_as_noexecstack, [dnl
1295cat > conftest.c <<EOF
35915ec8
UD
1296void foo (void) { }
1297EOF
a0da5fe1
UD
1298if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1299 -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
8175a253 1300 && grep .note.GNU-stack conftest.s >/dev/null \
a0da5fe1
UD
1301 && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1302 -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1303then
1304 libc_cv_as_noexecstack=yes
1305else
1306 libc_cv_as_noexecstack=no
1307fi
1308rm -f conftest*])
1309if test $libc_cv_as_noexecstack = yes; then
1310 ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1311fi
1312AC_SUBST(ASFLAGS_config)
2abf9ff1 1313
a0da5fe1
UD
1314AC_CACHE_CHECK(for -z combreloc,
1315 libc_cv_z_combreloc, [dnl
1316cat > conftest.c <<EOF
d555194c
UD
1317extern int bar (int);
1318extern int mumble;
1319int foo (void) { return bar (mumble); }
a711b01d 1320EOF
a0da5fe1 1321if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
66a704c4 1322 -fPIC -shared $no_ssp -o conftest.so conftest.c
35cd3c97 1323 -nostdlib -nostartfiles
c2f55635 1324 -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
a0da5fe1 1325then
a711b01d
UD
1326dnl The following test is a bit weak. We must use a tool which can test
1327dnl cross-platform since the gcc used can be a cross compiler. Without
1328dnl introducing new options this is not easily doable. Instead use a tool
1329dnl which always is cross-platform: readelf. To detect whether -z combreloc
e37fc4aa
AN
1330dnl look for a section named .rel.dyn or .rela.dyn.
1331 if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then
a0da5fe1 1332 libc_cv_z_combreloc=yes
fdde8349
UD
1333 else
1334 libc_cv_z_combreloc=no
a711b01d 1335 fi
a0da5fe1
UD
1336else
1337 libc_cv_z_combreloc=no
1338fi
1339rm -f conftest*])
1340if test "$libc_cv_z_combreloc" = yes; then
1341 AC_DEFINE(HAVE_Z_COMBRELOC)
1342fi
1343AC_SUBST(libc_cv_z_combreloc)
2abf9ff1 1344
6bfea974
L
1345LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
1346 [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
a0da5fe1 1347AC_SUBST(libc_cv_z_execstack)
c9c60884 1348
cd6ae7ea
FS
1349LIBC_LINKER_FEATURE([-z start-stop-gc], [-Wl,-z,start-stop-gc],
1350 [libc_cv_z_start_stop_gc=yes], [libc_cv_z_start_stop_gc=no])
1351LIBC_CONFIG_VAR([have-z-start-stop-gc], [$libc_cv_z_start_stop_gc])
1352
9926f6e2
FS
1353LIBC_LINKER_FEATURE([--depaudit], [-Wl,--depaudit,x],
1354 [libc_cv_depaudit=yes], [libc_cv_depaudit=no])
1355LIBC_CONFIG_VAR([have-depaudit], [$libc_cv_depaudit])
1356
9d7a3741
L
1357LIBC_LINKER_FEATURE([--no-dynamic-linker],
1358 [-Wl,--no-dynamic-linker],
1359 [libc_cv_no_dynamic_linker=yes],
1360 [libc_cv_no_dynamic_linker=no])
1361LIBC_CONFIG_VAR([have-no-dynamic-linker], [$libc_cv_no_dynamic_linker])
1362
1363AC_CACHE_CHECK(for -static-pie, libc_cv_static_pie, [dnl
1364LIBC_TRY_CC_OPTION([-static-pie],
1365 [libc_cv_static_pie=yes],
1366 [libc_cv_static_pie=no])
1367])
1368LIBC_CONFIG_VAR([have-static-pie], [$libc_cv_static_pie])
1369
a0da5fe1 1370AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
4da0431d
JM
1371LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1372])
c9c60884 1373
a0da5fe1 1374AC_SUBST(libc_cv_fpie)
871b9158 1375
a0da5fe1
UD
1376AC_CACHE_CHECK(for --hash-style option,
1377 libc_cv_hashstyle, [dnl
1378cat > conftest.c <<EOF
871b9158
UD
1379int _start (void) { return 42; }
1380EOF
66a704c4 1381if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
a0da5fe1
UD
1382 -fPIC -shared -o conftest.so conftest.c
1383 -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1384then
1385 libc_cv_hashstyle=yes
1386else
1387 libc_cv_hashstyle=no
1388fi
1389rm -f conftest*])
1390AC_SUBST(libc_cv_hashstyle)
1391
1392# The linker's default -shared behavior is good enough if it
1393# does these things that our custom linker scripts ensure that
1394# all allocated NOTE sections come first.
1395if test "$use_default_link" = default; then
1396 AC_CACHE_CHECK([for sufficient default -shared layout],
1397 libc_cv_use_default_link, [dnl
1398 libc_cv_use_default_link=no
1399 cat > conftest.s <<\EOF
fd5e21c7
RM
1400 .section .note.a,"a",%note
1401 .balign 4
1402 .long 4,4,9
1403 .string "GNU"
1404 .string "foo"
1405 .section .note.b,"a",%note
1406 .balign 4
1407 .long 4,4,9
1408 .string "GNU"
1409 .string "bar"
1410EOF
a0da5fe1 1411 if AC_TRY_COMMAND([dnl
fd5e21c7
RM
1412 ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1413 ac_try=`$READELF -S conftest.so | sed -n \
1414 ['${x;p;}
1415 s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/
1416 t a
1417 b
1418 : a
1419 H']`
a0da5fe1
UD
1420 then
1421 libc_seen_a=no libc_seen_b=no
1422 set -- $ac_try
1423 while test $# -ge 2 -a "$1" = NOTE; do
1424 case "$2" in
1425 .note.a) libc_seen_a=yes ;;
1426 .note.b) libc_seen_b=yes ;;
1427 esac
1428 shift 2
1429 done
1430 case "$libc_seen_a$libc_seen_b" in
1431 yesyes)
1432 libc_cv_use_default_link=yes
1433 ;;
1434 *)
1435 echo >&AS_MESSAGE_LOG_FD "\
fd5e21c7
RM
1436$libc_seen_a$libc_seen_b from:
1437$ac_try"
a0da5fe1
UD
1438 ;;
1439 esac
fd5e21c7 1440 fi
a0da5fe1
UD
1441 rm -f conftest*])
1442 use_default_link=$libc_cv_use_default_link
fd26970f 1443fi
49803108 1444
89569c8b
L
1445AC_CACHE_CHECK(for GLOB_DAT reloc,
1446 libc_cv_has_glob_dat, [dnl
1447cat > conftest.c <<EOF
1448extern int mumble;
1449int foo (void) { return mumble; }
1450EOF
1451if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1452 -fPIC -shared -o conftest.so conftest.c
66a704c4 1453 -nostdlib -nostartfiles $no_ssp
89569c8b
L
1454 1>&AS_MESSAGE_LOG_FD])
1455then
1456dnl look for GLOB_DAT relocation.
1457 if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then
1458 libc_cv_has_glob_dat=yes
1459 else
1460 libc_cv_has_glob_dat=no
1461 fi
1462else
1463 libc_cv_has_glob_dat=no
1464fi
1465rm -f conftest*])
1466AC_SUBST(libc_cv_has_glob_dat)
1467
22dca1ea 1468AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
49803108
AJ
1469cat > conftest.c <<EOF
1470int foo;
1471EOF
22dca1ea 1472if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
49803108
AJ
1473 conftest.c 1>&AS_MESSAGE_LOG_FD])
1474then
18e2ac6d 1475 libc_cv_fno_toplevel_reorder=yes
49803108 1476else
18e2ac6d 1477 libc_cv_fno_toplevel_reorder=no
49803108
AJ
1478fi
1479rm -f conftest*])
18e2ac6d 1480if test $libc_cv_fno_toplevel_reorder = yes; then
22dca1ea 1481 fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
18e2ac6d 1482else
49803108
AJ
1483 fno_unit_at_a_time=-fno-unit-at-a-time
1484fi
1485AC_SUBST(fno_unit_at_a_time)
fd26970f 1486
61655555
L
1487AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
1488[dnl
1489cat > conftest.c <<EOF
1490__thread int i;
1491void foo (void)
1492{
1493 i = 10;
1494}
1495EOF
1496if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
1497 conftest.c 1>&AS_MESSAGE_LOG_FD])
1498then
1499 libc_cv_mtls_dialect_gnu2=yes
1500else
1501 libc_cv_mtls_dialect_gnu2=no
1502fi
1503rm -f conftest*])
1504AC_SUBST(libc_cv_mtls_dialect_gnu2)
1505LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
1506
a0da5fe1
UD
1507AC_CACHE_CHECK(whether cc puts quotes around section names,
1508 libc_cv_have_section_quotes,
1509 [cat > conftest.c <<EOF
1510 static const int foo
1511 __attribute__ ((section ("bar"))) = 1;
e26dd47f 1512EOF
a0da5fe1
UD
1513 if ${CC-cc} -S conftest.c -o conftest.s; then
1514 if grep '\.section.*"bar"' conftest.s >/dev/null; then
1515 libc_cv_have_section_quotes=yes
e26dd47f 1516 else
a0da5fe1 1517 libc_cv_have_section_quotes=no
e26dd47f 1518 fi
a0da5fe1
UD
1519 else
1520 libc_cv_have_section_quotes=unknown
1521 fi
1522 rm -f conftest.{c,s}
1523 ])
1524if test $libc_cv_have_section_quotes = yes; then
1525 AC_DEFINE(HAVE_SECTION_QUOTES)
9a97d1f7
UD
1526fi
1527
d555194c
UD
1528AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1529cat > conftest.c <<\EOF
1530void zero (void *x)
1531{
a52d1562 1532 __builtin_memset (x, 0, 1000);
d555194c
UD
1533}
1534EOF
1535dnl
e37fc4aa 1536if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "memset" > /dev/null]);
d555194c
UD
1537then
1538 libc_cv_gcc_builtin_memset=no
1539else
1540 libc_cv_gcc_builtin_memset=yes
1541fi
1542rm -f conftest* ])
1543if test "$libc_cv_gcc_builtin_memset" = yes ; then
1544 AC_DEFINE(HAVE_BUILTIN_MEMSET)
1545fi
1546
85dd1003
UD
1547AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1548cat > conftest.c <<\EOF
1549extern char *strstr (const char *, const char *) __asm ("my_strstr");
1550char *foo (const char *a, const char *b)
1551{
1552 return __builtin_strstr (a, b);
1553}
1554EOF
1555dnl
e37fc4aa 1556if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "my_strstr" > /dev/null]);
85dd1003
UD
1557then
1558 libc_cv_gcc_builtin_redirection=yes
1559else
1560 libc_cv_gcc_builtin_redirection=no
1561fi
1562rm -f conftest* ])
3ce1f295
UD
1563if test "$libc_cv_gcc_builtin_redirection" = no; then
1564 AC_MSG_ERROR([support for the symbol redirection needed])
85dd1003
UD
1565fi
1566
7998fa78
AS
1567dnl Determine how to disable generation of FMA instructions.
1568AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1569 libc_cv_cc_nofma, [dnl
1570libc_cv_cc_nofma=
1571for opt in -ffp-contract=off -mno-fused-madd; do
1572 LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1573done])
bef0b507 1574AC_SUBST(libc_cv_cc_nofma)
7998fa78 1575
2cf9ad57
RM
1576if test -n "$submachine"; then
1577 AC_CACHE_CHECK([for compiler option for CPU variant],
f7d82dc9 1578 libc_cv_cc_submachine, [dnl
2cf9ad57
RM
1579 libc_cv_cc_submachine=no
1580 for opt in "-march=$submachine" "-mcpu=$submachine"; do
40b601fb 1581 LIBC_TRY_CC_OPTION([$opt], [
2cf9ad57 1582 libc_cv_cc_submachine="$opt"
40b601fb 1583 break], [])
2cf9ad57
RM
1584 done])
1585 if test "x$libc_cv_cc_submachine" = xno; then
1586 AC_MSG_ERROR([${CC-cc} does not support $submachine])
1587 fi
1588fi
1589AC_SUBST(libc_cv_cc_submachine)
1590
85c2e611
AZ
1591AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
1592__attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
1593cat > conftest.c <<EOF
1594void
1595__attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1596foo (void) {}
1597EOF
1598libc_cv_cc_loop_to_function=no
1599if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1600then
1601 libc_cv_cc_loop_to_function=yes
1602fi
1603rm -f conftest*])
1604if test $libc_cv_cc_loop_to_function = yes; then
1605 AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1606fi
1607AC_SUBST(libc_cv_cc_loop_to_function)
1608
c8f3e6db
UD
1609dnl Check whether we have the gd library available.
1610AC_MSG_CHECKING(for libgd)
6dab8688
UD
1611if test "$with_gd" != "no"; then
1612 old_CFLAGS="$CFLAGS"
1613 CFLAGS="$CFLAGS $libgd_include"
1614 old_LDFLAGS="$LDFLAGS"
1615 LDFLAGS="$LDFLAGS $libgd_ldflags"
1616 old_LIBS="$LIBS"
1617 LIBS="$LIBS -lgd -lpng -lz -lm"
e9e7f245
NT
1618 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <gd.h>]], [[gdImagePng (0, 0)]])],
1619 [LIBGD=yes], [LIBGD=no])
6dab8688
UD
1620 CFLAGS="$old_CFLAGS"
1621 LDFLAGS="$old_LDFLAGS"
1622 LIBS="$old_LIBS"
1623else
1624 LIBGD=no
1625fi
c8f3e6db
UD
1626AC_MSG_RESULT($LIBGD)
1627AC_SUBST(LIBGD)
3d558f4e 1628
2fff3d93
UD
1629# SELinux detection
1630if test x$with_selinux = xno ; then
1631 have_selinux=no;
1632else
1633 # See if we have the SELinux library
1634 AC_CHECK_LIB(selinux, is_selinux_enabled,
1635 have_selinux=yes, have_selinux=no)
49155d51 1636 if test x$with_selinux = xyes ; then
2fff3d93 1637 if test x$have_selinux = xno ; then
0699f766 1638 AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found])
2fff3d93
UD
1639 fi
1640 fi
1641fi
1642# Check if we're building with SELinux support.
1643if test "x$have_selinux" = xyes; then
943db9eb 1644 AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
ec23b9be
UD
1645
1646 # See if we have the libaudit library
943db9eb 1647 AC_CHECK_LIB(audit, audit_log_user_avc_message,
77e8bddf 1648 have_libaudit=yes, have_libaudit=no)
ec23b9be 1649 if test "x$have_libaudit" = xyes; then
943db9eb 1650 AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
ec23b9be
UD
1651 fi
1652 AC_SUBST(have_libaudit)
1f063dca
UD
1653
1654 # See if we have the libcap library
1655 AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
1656 if test "x$have_libcap" = xyes; then
1657 AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
1658 fi
1659 AC_SUBST(have_libcap)
2fff3d93
UD
1660fi
1661AC_SUBST(have_selinux)
1662
61653dfb
RM
1663CPPUNDEFS=
1664dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
1665dnl Since we are building the implementations of the fortified functions here,
1666dnl having the macro defined interacts very badly.
b190bccc
NT
1667dnl _FORTIFY_SOURCE requires compiler optimization level 1 (gcc -O1)
1668dnl and above (see "man FEATURE_TEST_MACROS").
1669dnl So do NOT replace AC_COMPILE_IFELSE with AC_PREPROC_IFELSE.
61653dfb 1670AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
b190bccc 1671[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
61653dfb
RM
1672#ifdef _FORTIFY_SOURCE
1673# error bogon
b190bccc 1674#endif]])],
61653dfb
RM
1675 [libc_cv_predef_fortify_source=no],
1676 [libc_cv_predef_fortify_source=yes])])
1677if test $libc_cv_predef_fortify_source = yes; then
1678 CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
1679fi
1680AC_SUBST(CPPUNDEFS)
1681
0923f74a
FW
1682dnl Starting with binutils 2.35, GAS can attach multiple symbol versions
1683dnl to one symbol (PR 23840).
1684AC_CACHE_CHECK(whether the assembler requires one version per symbol,
1685 libc_cv_symver_needs_alias, [dnl
1686 cat > conftest.s <<EOF
1687 .text
1688testfunc:
1689 .globl testfunc
1690 .symver testfunc, testfunc1@VERSION1
1691 .symver testfunc, testfunc1@VERSION2
1692EOF
1693 libc_cv_symver_needs_alias=no
1694 if ${CC-cc} $ASFLAGS -c conftest.s 2>&AS_MESSAGE_LOG_FD; then
1695 libc_cv_symver_needs_alias=no
1696 else
1697 libc_cv_symver_needs_alias=yes
1698 fi
1699 rm conftest.*
1700])
1701if test "$libc_cv_symver_needs_alias" = yes; then
1702 AC_DEFINE(SYMVER_NEEDS_ALIAS)
1703fi
1704
9fe7e787
RM
1705AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
1706 libc_cv_builtin_trap, [dnl
1707libc_cv_builtin_trap=no
b190bccc 1708AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[__builtin_trap ()]])],[
9fe7e787
RM
1709libc_undefs=`$NM -u conftest.o |
1710 LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1711 2>&AS_MESSAGE_LOG_FD` || {
1712 AC_MSG_ERROR([confusing output from $NM -u])
1713}
1714echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1715if test -z "$libc_undefs"; then
1716 libc_cv_builtin_trap=yes
b190bccc 1717fi],[])])
9fe7e787
RM
1718if test $libc_cv_builtin_trap = yes; then
1719 AC_DEFINE([HAVE_BUILTIN_TRAP])
44c4e5d5
RM
1720fi
1721
99e1dc0a
FW
1722dnl C++ feature tests.
1723AC_LANG_PUSH([C++])
1724
1725AC_CACHE_CHECK([whether the C++ compiler supports thread_local],
1726 libc_cv_cxx_thread_local, [
1727old_CXXFLAGS="$CXXFLAGS"
1728CXXFLAGS="$CXXFLAGS -std=gnu++11"
1729AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1730#include <thread>
1731
1732// Compiler support.
1733struct S
1734{
1735 S ();
1736 ~S ();
1737};
1738thread_local S s;
1739S * get () { return &s; }
1740
1741// libstdc++ support.
1742#ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1743#error __cxa_thread_atexit_impl not supported
1744#endif
1745])],
1746 [libc_cv_cxx_thread_local=yes],
1747 [libc_cv_cxx_thread_local=no])
1748CXXFLAGS="$old_CXXFLAGS"
1749])
1750AC_SUBST(libc_cv_cxx_thread_local)
1751
1752AC_LANG_POP([C++])
1753dnl End of C++ feature tests.
1754
c224a18a
RM
1755### End of automated tests.
1756### Now run sysdeps configure fragments.
1757
cb343854 1758# They also can set these variables.
591e1ffb 1759use_ldconfig=no
cb343854 1760ldd_rewrite_script=no
77259608 1761libc_cv_sysconfdir=$sysconfdir
4248b1b1 1762libc_cv_localstatedir=$localstatedir
74bd2300 1763libc_cv_gcc_unwind_find_fde=no
e2fd3cbe 1764libc_cv_idn=no
ad201afe 1765pthread_in_libc=yes
cb343854 1766
28f540f4 1767# Iterate over all the sysdep directories we will use, running their
09055553 1768# configure fragments.
28f540f4 1769for dir in $sysnames; do
57ba7bb4
UD
1770 case $dir in
1771 /*) dest=$dir ;;
1772 *) dest=$srcdir/$dir ;;
1773 esac
1774 if test -r $dest/configure; then
d1149385 1775 AC_MSG_RESULT(running configure fragment for $dir)
57ba7bb4 1776 . $dest/configure
28f540f4 1777 fi
28f540f4
RM
1778done
1779
5695d46f
AS
1780if test x"$build_mathvec" = xnotset; then
1781 build_mathvec=no
1782fi
1783LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1784
7ffa9423
AZ
1785AC_SUBST(libc_extra_cflags)
1786AC_SUBST(libc_extra_cppflags)
1787
74bd2300
UD
1788if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1789 AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1790fi
1791AC_SUBST(libc_cv_gcc_unwind_find_fde)
1792
6e6249d0
RM
1793# A sysdeps configure fragment can reset this if IFUNC is not actually
1794# usable even though the assembler knows how to generate the symbol type.
1795if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
1796 AC_DEFINE(HAVE_IFUNC)
1797fi
92ad88fe 1798LIBC_CONFIG_VAR([have-ifunc], [$libc_cv_ld_gnu_indirect_function])
6e6249d0 1799
022dfdce
SL
1800if test x"$libc_cv_gcc_indirect_function" = xyes; then
1801 AC_DEFINE(HAVE_GCC_IFUNC)
1802fi
16b59780 1803LIBC_CONFIG_VAR([have-gcc-ifunc], [$libc_cv_gcc_indirect_function])
022dfdce 1804
3cc3ef96
RM
1805# This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1806# configure fragment can override the value to prevent this AC_DEFINE.
1807AC_SUBST(use_nscd)
1808if test "x$use_nscd" != xno; then
1809 AC_DEFINE([USE_NSCD])
1810fi
c53d909c
RM
1811if test "x$build_nscd" = xdefault; then
1812 build_nscd=$use_nscd
1813fi
3cc3ef96 1814
84384f5b 1815AC_SUBST(libc_cv_slibdir)
aaa8cb4b 1816AC_SUBST(libc_cv_rtlddir)
90fe682d 1817AC_SUBST(libc_cv_complocaledir)
77259608 1818AC_SUBST(libc_cv_sysconfdir)
4248b1b1 1819AC_SUBST(libc_cv_localstatedir)
1ef32c3d
UD
1820AC_SUBST(libc_cv_rootsbindir)
1821
f57f8055
RM
1822if test x$use_ldconfig = xyes; then
1823 AC_DEFINE(USE_LDCONFIG)
1824fi
591e1ffb 1825AC_SUBST(use_ldconfig)
cb343854 1826AC_SUBST(ldd_rewrite_script)
84384f5b 1827
650425ce 1828AC_SUBST(static)
ff3d7ed3 1829AC_SUBST(shared)
a334319f 1830
ff886b82
UD
1831AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1832[libc_cv_pic_default=yes
cc3fa755 1833cat > conftest.c <<EOF
9756dfe1 1834#if defined __PIC__ || defined __pic__ || defined PIC || defined pic
cc3fa755
UD
1835# error PIC is default.
1836#endif
1837EOF
0b4ee387 1838if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
ff886b82 1839 libc_cv_pic_default=no
cc3fa755
UD
1840fi
1841rm -f conftest.*])
ff886b82 1842AC_SUBST(libc_cv_pic_default)
cc3fa755 1843
00c714df
L
1844AC_CACHE_CHECK([whether -fPIE is default], libc_cv_cc_pie_default,
1845[libc_cv_cc_pie_default=yes
cc08749b
L
1846cat > conftest.c <<EOF
1847#if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1848# error PIE is default.
1849#endif
1850EOF
1851if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
00c714df 1852 libc_cv_cc_pie_default=no
cc08749b
L
1853fi
1854rm -f conftest.*])
00c714df
L
1855libc_cv_pie_default=$libc_cv_cc_pie_default
1856AC_SUBST(libc_cv_cc_pie_default)
cc08749b
L
1857AC_SUBST(libc_cv_pie_default)
1858
abcb584d
L
1859# Set the `multidir' variable by grabbing the variable from the compiler.
1860# We do it once and save the result in a generated makefile.
1861libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory`
1862AC_SUBST(libc_cv_multidir)
1863
9d7a3741 1864if test "$static_pie" = yes; then
374cef32
SN
1865 # Check target support for static PIE
1866 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef SUPPORT_STATIC_PIE
1867# error static PIE is not supported
1868#endif]])], , AC_MSG_ERROR([the architecture does not support static PIE]))
9d7a3741
L
1869 # The linker must support --no-dynamic-linker.
1870 if test "$libc_cv_no_dynamic_linker" != yes; then
1871 AC_MSG_ERROR([linker support for --no-dynamic-linker needed])
1872 fi
1873 # Default to PIE.
1874 libc_cv_pie_default=yes
1875 AC_DEFINE(ENABLE_STATIC_PIE)
1876fi
1877LIBC_CONFIG_VAR([enable-static-pie], [$static_pie])
1878
ff3d7ed3 1879AC_SUBST(profile)
5107cf1d 1880AC_SUBST(static_nss)
ff3d7ed3 1881
edf5b2d7
UD
1882AC_SUBST(DEFINES)
1883
cb8a6dbd 1884dnl See sysdeps/mach/configure.ac for this variable.
61c83c3f
RM
1885AC_SUBST(mach_interface_list)
1886
ee74a442
UD
1887VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1888RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
df4ef2ab 1889AC_SUBST(VERSION)
ee74a442 1890AC_SUBST(RELEASE)
df4ef2ab 1891
ad201afe
FW
1892if test "$pthread_in_libc" = yes; then
1893 AC_DEFINE(PTHREAD_IN_LIBC)
1894fi
1895AC_SUBST(pthread_in_libc)
1896
728e272a 1897AC_CONFIG_FILES([config.make Makefile])
c118d634 1898AC_CONFIG_COMMANDS([default],[[
737547be
UD
1899case $CONFIG_FILES in *config.make*)
1900echo "$config_vars" >> config.make;;
1901esac
c118d634
RM
1902test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1903AC_OUTPUT