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