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