]> git.ipfire.org Git - thirdparty/glibc.git/blame - configure.ac
powerpc64: Always restore TOC on longjmp [BZ #21895]
[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.
a306c790 3AC_INIT([GNU C Library], [(see version.h)], [https://sourceware.org/bugzilla/], [glibc])
5d77b1da 4AC_CONFIG_SRCDIR([include/features.h])
6b7f6183
RM
5AC_CONFIG_HEADERS([config.h])
6AC_CONFIG_AUX_DIR([scripts])
28f540f4 7
8b748aed
JM
8ACX_PKGVERSION([GNU libc])
9ACX_BUGURL([http://www.gnu.org/software/libc/bugs.html])
10AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"],
11 [Package description])
12AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"],
13 [Bug reporting address])
14
918b5606
L
15# Glibc should not depend on any header files
16AC_DEFUN([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
17 [m4_divert_text([DEFAULTS],
18 [ac_includes_default='/* none */'])])
19
bb931195
TS
20# We require GCC, and by default use its preprocessor. Override AC_PROG_CPP
21# here to work around the Autoconf issue discussed in
a306c790 22# <https://sourceware.org/ml/libc-alpha/2013-01/msg00721.html>.
bb931195
TS
23AC_DEFUN([AC_PROG_CPP],
24[AC_REQUIRE([AC_PROG_CC])dnl
25AC_ARG_VAR([CPP], [C preprocessor])dnl
26_AC_ARG_VAR_CPPFLAGS()dnl
27# On Suns, sometimes $CPP names a directory.
28if test -n "$CPP" && test -d "$CPP"; then
29 CPP=
30fi
31if test -z "$CPP"; then
32 CPP="$CC -E"
33fi
34AC_SUBST(CPP)dnl
35])# AC_PROG_CPP
36
b5a5da23
TS
37# We require GCC. Override _AC_PROG_CC_C89 here to work around the Autoconf
38# issue discussed in
a306c790 39# <https://sourceware.org/ml/libc-alpha/2013-01/msg00757.html>.
b5a5da23
TS
40AC_DEFUN([_AC_PROG_CC_C89], [[$1]])
41
7967983f
RM
42dnl This is here so we can set $subdirs directly based on configure fragments.
43AC_CONFIG_SUBDIRS()
44
c16a054d
AS
45AC_CANONICAL_HOST
46
c0bac8b0
UD
47AC_PROG_CC
48if test $host != $build; then
49 AC_CHECK_PROGS(BUILD_CC, gcc cc)
50fi
51AC_SUBST(cross_compiling)
52AC_PROG_CPP
e4693aa7
RM
53AC_CHECK_TOOL(READELF, readelf, false)
54
c0bac8b0
UD
55# We need the C++ compiler only for testing.
56AC_PROG_CXX
e4693aa7
RM
57# It's useless to us if it can't link programs (e.g. missing -lstdc++).
58AC_CACHE_CHECK([whether $CXX can link programs], libc_cv_cxx_link_ok, [dnl
59AC_LANG_PUSH([C++])
d337ceb7 60# Default, dynamic case.
e4693aa7
RM
61AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
62 [libc_cv_cxx_link_ok=yes],
63 [libc_cv_cxx_link_ok=no])
d337ceb7
FW
64# Static case.
65old_LDFLAGS="$LDFLAGS"
66LDFLAGS="$LDFLAGS -static"
67AC_LINK_IFELSE([AC_LANG_SOURCE([
68#include <iostream>
69
70int
71main()
72{
73 std::cout << "Hello, world!";
74 return 0;
75}
76])],
77 [],
78 [libc_cv_cxx_link_ok=no])
79LDFLAGS="$old_LDFLAGS"
e4693aa7
RM
80AC_LANG_POP([C++])])
81AS_IF([test $libc_cv_cxx_link_ok != yes], [CXX=])
c0bac8b0 82
db340c90 83if test "`cd $srcdir; pwd -P`" = "`pwd -P`"; then
c72637d4
RM
84 AC_MSG_ERROR([you must configure in a separate build directory])
85fi
86
28f540f4
RM
87# This will get text that should go into config.make.
88config_vars=
89
c8f3e6db 90# Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
6b7f6183 91AC_ARG_WITH([gd],
77e8bddf
AS
92 AC_HELP_STRING([--with-gd=DIR],
93 [find libgd include dir and library with prefix DIR]),
c8f3e6db
UD
94 [dnl
95case "$with_gd" in
f5f7239f
UD
96yes|''|no) ;;
97*) libgd_include="-I$withval/include"
c8f3e6db
UD
98 libgd_ldflags="-L$withval/lib" ;;
99esac
100])
6b7f6183 101AC_ARG_WITH([gd-include],
77e8bddf
AS
102 AC_HELP_STRING([--with-gd-include=DIR],
103 [find libgd include files in DIR]),
104 [dnl
f5f7239f
UD
105case "$with_gd_include" in
106''|no) ;;
107*) libgd_include="-I$withval" ;;
108esac
109])
6b7f6183 110AC_ARG_WITH([gd-lib],
77e8bddf
AS
111 AC_HELP_STRING([--with-gd-lib=DIR],
112 [find libgd library files in DIR]),
113 [dnl
f5f7239f
UD
114case "$with_gd_lib" in
115''|no) ;;
116*) libgd_ldflags="-L$withval" ;;
117esac
118])
119
120if test -n "$libgd_include"; then
121 config_vars="$config_vars
cf90163d 122CFLAGS-memusagestat.c = $libgd_include"
f5f7239f
UD
123fi
124if test -n "$libgd_ldflags"; then
125 config_vars="$config_vars
126libgd-LDFLAGS = $libgd_ldflags"
127fi
28f540f4 128
ff3d7ed3 129dnl Arguments to specify presence of other packages/features.
6b7f6183 130AC_ARG_WITH([binutils],
77e8bddf
AS
131 AC_HELP_STRING([--with-binutils=PATH],
132 [specify location of binutils (as and ld)]),
6b7f6183
RM
133 [path_binutils=$withval],
134 [path_binutils=''])
2fff3d93 135AC_ARG_WITH([selinux],
77e8bddf
AS
136 AC_HELP_STRING([--with-selinux],
137 [if building with SELinux support]),
2fff3d93
UD
138 [with_selinux=$withval],
139 [with_selinux=auto])
28f540f4 140
6b7f6183 141AC_ARG_WITH([headers],
77e8bddf
AS
142 AC_HELP_STRING([--with-headers=PATH],
143 [location of system headers to use
6b7f6183
RM
144 (for example /usr/src/linux/include)
145 @<:@default=compiler default@:>@]),
146 [sysheaders=$withval],
147 [sysheaders=''])
c91c505f 148AC_SUBST(sysheaders)
dbe7a0f5 149
f781ef40
RM
150AC_SUBST(use_default_link)
151AC_ARG_WITH([default-link],
152 AC_HELP_STRING([--with-default-link],
fd5e21c7 153 [do not use explicit linker scripts]),
f781ef40 154 [use_default_link=$withval],
fd5e21c7 155 [use_default_link=default])
f781ef40 156
6b7f6183 157AC_ARG_ENABLE([sanity-checks],
77e8bddf
AS
158 AC_HELP_STRING([--disable-sanity-checks],
159 [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
6b7f6183
RM
160 [enable_sanity=$enableval],
161 [enable_sanity=yes])
a18f587d 162
6b7f6183 163AC_ARG_ENABLE([shared],
77e8bddf 164 AC_HELP_STRING([--enable-shared],
a0da5fe1 165 [build shared library @<:@default=yes if GNU ld@:>@]),
6b7f6183 166 [shared=$enableval],
a0da5fe1 167 [shared=yes])
6b7f6183 168AC_ARG_ENABLE([profile],
77e8bddf
AS
169 AC_HELP_STRING([--enable-profile],
170 [build profiled library @<:@default=no@:>@]),
6b7f6183 171 [profile=$enableval],
11bf311e 172 [profile=no])
9d7a3741
L
173AC_ARG_ENABLE([static-pie],
174 AC_HELP_STRING([--enable-static-pie],
175 [enable static PIE support and use it in the testsuite @<:@default=no@:>@]),
176 [static_pie=$enableval],
177 [static_pie=no])
1cba4036
MF
178AC_ARG_ENABLE([timezone-tools],
179 AC_HELP_STRING([--disable-timezone-tools],
44f826e3 180 [do not install timezone tools @<:@default=install@:>@]),
1cba4036
MF
181 [enable_timezone_tools=$enableval],
182 [enable_timezone_tools=yes])
183AC_SUBST(enable_timezone_tools)
6b7f6183 184
740b3dbe
L
185AC_ARG_ENABLE([hardcoded-path-in-tests],
186 AC_HELP_STRING([--enable-hardcoded-path-in-tests],
187 [hardcode newly built glibc path in tests @<:@default=no@:>@]),
188 [hardcoded_path_in_tests=$enableval],
189 [hardcoded_path_in_tests=no])
190AC_SUBST(hardcoded_path_in_tests)
191
35f1e827
UD
192AC_ARG_ENABLE([stackguard-randomization],
193 AC_HELP_STRING([--enable-stackguard-randomization],
194 [initialize __stack_chk_guard canary with a random number at program start]),
195 [enable_stackguard_randomize=$enableval],
196 [enable_stackguard_randomize=no])
197if test "$enable_stackguard_randomize" = yes; then
198 AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
199fi
200
6b7f6183 201AC_ARG_ENABLE([hidden-plt],
77e8bddf
AS
202 AC_HELP_STRING([--disable-hidden-plt],
203 [do not hide internal function calls to avoid PLT]),
6b7f6183
RM
204 [hidden=$enableval],
205 [hidden=yes])
749a9a4f
RM
206if test "x$hidden" = xno; then
207 AC_DEFINE(NO_HIDDEN)
208fi
209
4df8c11d
UD
210AC_ARG_ENABLE([bind-now],
211 AC_HELP_STRING([--enable-bind-now],
212 [disable lazy relocations in DSOs]),
213 [bindnow=$enableval],
214 [bindnow=no])
215AC_SUBST(bindnow)
6901def6
L
216if test "x$bindnow" = xyes; then
217 AC_DEFINE(BIND_NOW)
218fi
4df8c11d 219
03baef1c
NA
220dnl Build glibc with -fstack-protector, -fstack-protector-all, or
221dnl -fstack-protector-strong.
222AC_ARG_ENABLE([stack-protector],
223 AC_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@],
224 [Use -fstack-protector[-all|-strong] to detect glibc buffer overflows]),
225 [enable_stack_protector=$enableval],
226 [enable_stack_protector=no])
227case "$enable_stack_protector" in
228all|yes|no|strong) ;;
229*) AC_MSG_ERROR([Not a valid argument for --enable-stack-protector: \"$enable_stack_protector\"]);;
230esac
231
5107cf1d
UD
232dnl On some platforms we cannot use dynamic loading. We must provide
233dnl static NSS modules.
6b7f6183 234AC_ARG_ENABLE([static-nss],
77e8bddf
AS
235 AC_HELP_STRING([--enable-static-nss],
236 [build static NSS modules @<:@default=no@:>@]),
6b7f6183
RM
237 [static_nss=$enableval],
238 [static_nss=no])
834cef7c
UD
239dnl Enable static NSS also if we build no shared objects.
240if test x"$static_nss" = xyes || test x"$shared" = xno; then
3172f58f 241 static_nss=yes
5107cf1d
UD
242 AC_DEFINE(DO_STATIC_NSS)
243fi
244
6b7f6183 245AC_ARG_ENABLE([force-install],
77e8bddf
AS
246 AC_HELP_STRING([--disable-force-install],
247 [don't force installation of files from this package, even if they are older than the installed files]),
6b7f6183
RM
248 [force_install=$enableval],
249 [force_install=yes])
73237de3
UD
250AC_SUBST(force_install)
251
8894bad3
AM
252AC_ARG_ENABLE([maintainer-mode],
253 AC_HELP_STRING([--enable-maintainer-mode],
254 [enable make rules and dependencies not useful (and sometimes confusing) to the casual installer]),
255 [maintainer=$enableval],
256 [maintainer=no])
257
958f238f
UD
258dnl On some platforms we allow dropping compatibility with all kernel
259dnl versions.
6b7f6183 260AC_ARG_ENABLE([kernel],
77e8bddf
AS
261 AC_HELP_STRING([--enable-kernel=VERSION],
262 [compile for compatibility with kernel not older than VERSION]),
6b7f6183
RM
263 [minimum_kernel=$enableval],
264 [])
86cfe82d
UD
265dnl Prevent unreasonable values.
266if test "$minimum_kernel" = yes || test "$minimum_kernel" = no; then
267 # Better nothing than this.
268 minimum_kernel=""
269e369f
UD
269else
270 if test "$minimum_kernel" = current; then
271 minimum_kernel=`uname -r 2>/dev/null` || minimum_kernel=
272 fi
86cfe82d 273fi
958f238f 274
6cc7d725
UD
275dnl For the development we sometimes want gcc to issue even more warnings.
276dnl This is not the default since many of the extra warnings are not
277dnl appropriate.
6b7f6183
RM
278AC_ARG_ENABLE([all-warnings],
279 AC_HELP_STRING([--enable-all-warnings],
77e8bddf 280 [enable all useful warnings gcc can issue]),
6b7f6183
RM
281 [all_warnings=$enableval],
282 [])
6cc7d725
UD
283AC_SUBST(all_warnings)
284
a4ecc9eb
JM
285AC_ARG_ENABLE([werror],
286 AC_HELP_STRING([--disable-werror],
287 [do not build with -Werror]),
288 [enable_werror=$enableval],
289 [enable_werror=yes])
290AC_SUBST(enable_werror)
291
425ce2ed
UD
292AC_ARG_ENABLE([multi-arch],
293 AC_HELP_STRING([--enable-multi-arch],
294 [enable single DSO with optimizations for multiple architectures]),
295 [multi_arch=$enableval],
6f89d2f3 296 [multi_arch=default])
425ce2ed 297
d5c3fafc
DD
298AC_ARG_ENABLE([experimental-malloc],
299 AC_HELP_STRING([--disable-experimental-malloc],
300 [disable experimental malloc features]),
301 [experimental_malloc=$enableval],
302 [experimental_malloc=yes])
303AC_SUBST(experimental_malloc)
304
e69d994a
ZW
305AC_ARG_ENABLE([crypt],
306 AC_HELP_STRING([--disable-crypt],
307 [do not build nor install the passphrase hashing library, libcrypt]),
308 [build_crypt=$enableval],
309 [build_crypt=yes])
310AC_SUBST(build_crypt)
311
ff886b82
UD
312AC_ARG_ENABLE([nss-crypt],
313 AC_HELP_STRING([--enable-nss-crypt],
314 [enable libcrypt to use nss]),
315 [nss_crypt=$enableval],
316 [nss_crypt=no])
e69d994a
ZW
317if test x$build_libcrypt = xno && test x$nss_crypt = xyes; then
318 AC_MSG_WARN([--enable-nss-crypt has no effect when libcrypt is disabled])
319 nss_crypt=no
320fi
ff886b82
UD
321if test x$nss_crypt = xyes; then
322 nss_includes=-I$(nss-config --includedir 2>/dev/null)
323 if test $? -ne 0; then
324 AC_MSG_ERROR([cannot find include directory with nss-config])
325 fi
57b4af19
GT
326 nspr_includes=-I$(nspr-config --includedir 2>/dev/null)
327 if test $? -ne 0; then
328 AC_MSG_ERROR([cannot find include directory with nspr-config])
329 fi
ff886b82 330 old_CFLAGS="$CFLAGS"
57b4af19 331 CFLAGS="$CFLAGS $nss_includes $nspr_includes"
b68e08db 332 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
ff886b82
UD
333#include <hasht.h>
334#include <nsslowhash.h>
b68e08db 335void f (void) { NSSLOW_Init (); }])],
ff886b82
UD
336 libc_cv_nss_crypt=yes,
337 AC_MSG_ERROR([
338cannot find NSS headers with lowlevel hash function interfaces]))
339 old_LIBS="$LIBS"
84aa7516 340 old_LDFLAGS="$LDFLAGS"
ff886b82
UD
341 LIBS="$LIBS -lfreebl3"
342 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
343#include <hasht.h>
344#include <nsslowhash.h>],
345 [NSSLOW_Init();])],
346 libc_cv_nss_crypt=yes,
347 AC_MSG_ERROR([
348cannot link program using lowlevel NSS hash functions]))
84aa7516
CD
349 # Check to see if there is a static NSS cryptographic library.
350 # If there isn't then we can't link anything with libcrypt.a,
351 # and that might mean disabling some static tests.
352 LDFLAGS="$LDFLAGS -static"
353 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
354#include <hasht.h>
355#include <nsslowhash.h>],
356 [NSSLOW_Init();])],
357 libc_cv_static_nss_crypt=yes,
358 libc_cv_static_nss_crypt=no)
359 LDFLAGS="$old_LDFLAGS"
ff886b82
UD
360 CFLAGS="$old_CFLAGS"
361 LIBS="$old_LIBS"
362else
363 libc_cv_nss_crypt=no
84aa7516 364 libc_cv_static_nss_crypt=no
ff886b82
UD
365fi
366AC_SUBST(libc_cv_nss_crypt)
84aa7516 367AC_SUBST(libc_cv_static_nss_crypt)
ff886b82 368
3a097cc7 369
021db4be
AJ
370AC_ARG_ENABLE([obsolete-rpc],
371 AC_HELP_STRING([--enable-obsolete-rpc],
372 [build and install the obsolete RPC code for link-time usage]),
373 [link_obsolete_rpc=$enableval],
374 [link_obsolete_rpc=no])
375AC_SUBST(link_obsolete_rpc)
376
377if test "$link_obsolete_rpc" = yes; then
378 AC_DEFINE(LINK_OBSOLETE_RPC)
379fi
380
1e4d83f6
TK
381AC_ARG_ENABLE([obsolete-nsl],
382 AC_HELP_STRING([--enable-obsolete-nsl],
383 [build and install the obsolete libnsl library and depending NSS modules]),
384 [build_obsolete_nsl=$enableval],
385 [build_obsolete_nsl=no])
386AC_SUBST(build_obsolete_nsl)
387
388if test "$build_obsolete_nsl" = yes; then
389 AC_DEFINE(LINK_OBSOLETE_NSL)
390fi
391
3a097cc7
RM
392AC_ARG_ENABLE([systemtap],
393 [AS_HELP_STRING([--enable-systemtap],
394 [enable systemtap static probe points @<:@default=no@:>@])],
395 [systemtap=$enableval],
396 [systemtap=no])
397if test "x$systemtap" != xno; then
398 AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
399 old_CFLAGS="$CFLAGS"
783dd2d3 400 CFLAGS="-std=gnu11 $CFLAGS"
0e3933b9 401 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
3a097cc7
RM
402void foo (int i, void *p)
403{
404 asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
405 :: STAP_PROBE_ASM_OPERANDS (2, i, p));
0e3933b9 406}]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])
3a097cc7
RM
407 CFLAGS="$old_CFLAGS"])
408 if test $libc_cv_sdt = yes; then
409 AC_DEFINE([USE_STAP_PROBE])
410 elif test "x$systemtap" != xauto; then
411 AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
412 fi
413fi
414
c53d909c
RM
415AC_ARG_ENABLE([build-nscd],
416 [AS_HELP_STRING([--disable-build-nscd],
417 [disable building and installing the nscd daemon])],
418 [build_nscd=$enableval],
419 [build_nscd=default])
420AC_SUBST(build_nscd)
421
3cc3ef96
RM
422# Note the use of $use_nscd is near the bottom of the file.
423AC_ARG_ENABLE([nscd],
424 [AS_HELP_STRING([--disable-nscd],
425 [library functions will not contact the nscd daemon])],
426 [use_nscd=$enableval],
427 [use_nscd=yes])
428
e4608715
CD
429AC_ARG_ENABLE([pt_chown],
430 [AS_HELP_STRING([--enable-pt_chown],
431 [Enable building and installing pt_chown])],
432 [build_pt_chown=$enableval],
433 [build_pt_chown=no])
434AC_SUBST(build_pt_chown)
8c12f01d 435if test "$build_pt_chown" = yes; then
e4608715
CD
436 AC_DEFINE(HAVE_PT_CHOWN)
437fi
438
67e58f39
SP
439AC_ARG_ENABLE([tunables],
440 [AS_HELP_STRING([--enable-tunables],
6765d5d3 441 [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])],
67e58f39 442 [have_tunables=$enableval],
2c0b90ab 443 [have_tunables=yes])
67e58f39
SP
444AC_SUBST(have_tunables)
445if test "$have_tunables" = yes; then
446 AC_DEFINE(HAVE_TUNABLES)
447fi
448
ebf27d12
ST
449# The abi-tags file uses a fairly simplistic model for name recognition that
450# can't distinguish i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a
451# $host_os of `gnu*' here to be `gnu-gnu*' just so that it can tell.
452# This doesn't get used much beyond that, so it's fairly safe.
453case "$host_os" in
454linux*)
455 ;;
456gnu*)
457 host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
458 ;;
459esac
460
5695d46f
AS
461AC_ARG_ENABLE([mathvec],
462 [AS_HELP_STRING([--enable-mathvec],
463 [Enable building and installing mathvec @<:@default depends on architecture@:>@])],
464 [build_mathvec=$enableval],
465 [build_mathvec=notset])
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
630 LC_ALL=C $READELF -r conftest | grep 'no relocations' >/dev/null || {
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
8f6f5362
AZ
660# Check if gcc warns about alias for function with incompatible types.
661AC_CACHE_CHECK([if compiler warns about alias for function with incompatible types],
662 libc_cv_gcc_incompatible_alias, [dnl
663cat > conftest.c <<EOF
664int __redirect_foo (const void *s, int c);
665
666__typeof (__redirect_foo) *foo_impl (void) __asm__ ("foo");
667__typeof (__redirect_foo) *foo_impl (void)
668{
669 return 0;
670}
671
672extern __typeof (__redirect_foo) foo_alias __attribute__ ((alias ("foo")));
673EOF
674libc_cv_gcc_incompatible_alias=yes
675if ${CC-cc} -Werror -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
676 libc_cv_gcc_incompatible_alias=no
677fi
678rm -f conftest*])
679
0cae3f4b 680if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
84b9230c
MF
681 if test x"$multi_arch" = xyes; then
682 AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
683 else
684 multi_arch=no
685 fi
686fi
8f6f5362
AZ
687if test x"$libc_cv_gcc_indirect_function" != xyes; then
688 # GCC 8+ emits a warning for alias with incompatible types and it might
689 # fail to build ifunc resolvers aliases to either weak or internal
690 # symbols. Disables multiarch build in this case.
691 if test x"$libc_cv_gcc_incompatible_alias" == xyes; then
692 AC_MSG_WARN([gcc emits a warning for alias between functions of incompatible types])
693 if test x"$multi_arch" = xyes; then
694 AC_MSG_ERROR([--enable-multi-arch support requires a gcc with gnu-indirect-function support])
695 fi
696 AC_MSG_WARN([Multi-arch is disabled.])
697 multi_arch=no
698 elif test x"$multi_arch" = xyes; then
699 AC_MSG_WARN([--enable-multi-arch support recommends a gcc with gnu-indirect-function support.
022dfdce 700Please use a gcc which supports it by default or configure gcc with --enable-gnu-indirect-function])
8f6f5362 701 fi
022dfdce 702fi
6270516e 703multi_arch_d=
84b9230c
MF
704if test x"$multi_arch" != xno; then
705 multi_arch_d=/multiarch
706fi
707
f0523145 708# Compute the list of sysdep directories for this configuration.
f332db02 709# This can take a while to compute.
f0523145 710sysdep_dir=$srcdir/sysdeps
f332db02 711AC_MSG_CHECKING(sysdep dirs)
f0523145
RM
712dnl We need to use [ and ] for other purposes for a while now.
713changequote(,)dnl
28f540f4
RM
714# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
715os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
716
b22d21b3 717test "x$base_os" != x || case "$os" in
28f540f4
RM
718gnu*)
719 base_os=mach/hurd ;;
2ce4f015 720linux*)
28f540f4 721 base_os=unix/sysv ;;
28f540f4
RM
722esac
723
724# For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
725tail=$os
726ostry=$os
727while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
728 ostry="$ostry /$o"
729 tail=$o
75914335 730done
28f540f4
RM
731o=`echo $tail | sed 's/[0-9]*$//'`
732if test $o != $tail; then
733 ostry="$ostry /$o"
734fi
ec4b0518
UD
735# For linux-gnu, try linux-gnu, then linux.
736o=`echo $tail | sed 's/-.*$//'`
737if test $o != $tail; then
738 ostry="$ostry /$o"
739fi
28f540f4
RM
740
741# For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
742base=
743tail=$base_os
744while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
745 set $b
746 base="$base /$1"
747 tail="$2"
748done
749
ae6b8730 750# For sparc/sparc32, try sparc/sparc32 and then sparc.
28f540f4 751mach=
2ceaa76a 752tail=$machine${submachine:+/$submachine}
28f540f4
RM
753while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
754 set $m
10ceac89 755 # Prepend the machine's FPU directory unless --without-fp.
8df5d347 756 if test "$libc_cv_with_fp" = yes; then
6270516e 757 maybe_fpu=/fpu
f4b07664 758 else
6270516e 759 maybe_fpu=/nofpu
82d00cab 760 fi
6270516e
RM
761 # For each machine term, try it with and then without /multiarch.
762 for try_fpu in $maybe_fpu ''; do
763 for try_multi in $multi_arch_d ''; do
764 mach="$mach /$1$try_fpu$try_multi"
765 done
766 done
28f540f4
RM
767 tail="$2"
768done
769
770dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
771changequote([,])dnl
772
773# Find what sysdep directories exist.
774sysnames=
4b69abad
RM
775for b in $base ''; do
776 for m0 in $mach ''; do
777 for v in /$vendor ''; do
778 test "$v" = / && continue
779 for o in /$ostry ''; do
780 test "$o" = / && continue
6270516e 781 for m in $mach ''; do
644d3857
JM
782 try_suffix="$m0$b$v$o$m"
783 if test -n "$try_suffix"; then
784 try_srcdir="${srcdir}/"
785 try="sysdeps$try_suffix"
786 test -n "$enable_debug_configure" &&
787 echo "$0 [DEBUG]: try $try" >&2
788 if test -d "$try_srcdir$try"; then
789 sysnames="$sysnames $try"
790 { test -n "$o" || test -n "$b"; } && os_used=t
791 { test -n "$m" || test -n "$m0"; } && machine_used=t
792 case x${m0:-$m} in
793 x*/$submachine) submachine_used=t ;;
794 esac
795 fi
796 fi
28f540f4
RM
797 done
798 done
799 done
800 done
4b69abad 801done
28f540f4 802
6f89d2f3
L
803# If the assembler supports gnu_indirect_function symbol type and the
804# architecture supports multi-arch, we enable multi-arch by default.
644d3857 805case $sysnames in
84b9230c
MF
806*"$multi_arch_d"*)
807 ;;
808*)
77e8bddf 809 test x"$multi_arch" = xdefault && multi_arch=no
84b9230c
MF
810 ;;
811esac
812if test x"$multi_arch" != xno; then
6f89d2f3
L
813 AC_DEFINE(USE_MULTIARCH)
814fi
815AC_SUBST(multi_arch)
816
28f540f4
RM
817if test -z "$os_used" && test "$os" != none; then
818 AC_MSG_ERROR(Operating system $os is not supported.)
819fi
820if test -z "$machine_used" && test "$machine" != none; then
821 AC_MSG_ERROR(The $machine is not supported.)
822fi
2ceaa76a
RM
823if test -z "$submachine_used" && test -n "$submachine"; then
824 AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
825fi
826AC_SUBST(submachine)
28f540f4
RM
827
828# We have now validated the configuration.
829
28f540f4
RM
830# Expand the list of system names into a full list of directories
831# from each element's parent name and Implies file (if present).
832set $sysnames
e50ec9f9 833names=
28f540f4
RM
834while test $# -gt 0; do
835 name=$1
836 shift
837
e50ec9f9 838 case " $names " in *" $name "*)
f332db02
RM
839 # Already in the list.
840 continue
e50ec9f9 841 esac
f332db02
RM
842
843 # Report each name as we discover it, so there is no long pause in output.
0b4ee387 844 echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
f332db02 845
57ba7bb4
UD
846 name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
847
848 case $name in
849 /*) xsrcdir= ;;
850 *) xsrcdir=$srcdir/ ;;
851 esac
852 test -n "$enable_debug_configure" &&
853 echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
854
ba75122d
RM
855 for implies_file in Implies Implies-before Implies-after; do
856 implies_type=`echo $implies_file | sed s/-/_/`
857 eval ${implies_type}=
858 if test -f $xsrcdir$name/$implies_file; then
859 # Collect more names from the `Implies' file (removing comments).
860 implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
861 for x in $implied_candidate; do
862 found=no
863 if test -d $xsrcdir$name_base/$x; then
864 eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
636ccfc8 865 found=yes
ba75122d 866 fi
644d3857
JM
867 try="sysdeps/$x"
868 try_srcdir=$srcdir/
869 test -n "$enable_debug_configure" &&
870 echo "[DEBUG]: $name $implies_file $x try() {$try_srcdir}$try" >&2
871 if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
872 then
873 eval "${implies_type}=\"\$${implies_type} \$try\""
874 found=yes
875 fi
ba75122d
RM
876 if test $found = no; then
877 AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
636ccfc8
UD
878 fi
879 done
ba75122d
RM
880 fi
881 done
28f540f4
RM
882
883 # Add NAME to the list of names.
884 names="$names $name"
885
886 # Find the parent of NAME, using the empty string if it has none.
887changequote(,)dnl
57ba7bb4 888 parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
28f540f4
RM
889changequote([,])dnl
890
ba75122d
RM
891 test -n "$enable_debug_configure" &&
892 echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
57633811 893Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
ba75122d 894
28f540f4
RM
895 # Add the names implied by NAME, and NAME's parent (if it has one), to
896 # the list of names to be processed (the argument list). We prepend the
897 # implied names to the list and append the parent. We want implied
898 # directories to come before further directories inferred from the
899 # configuration components; this ensures that for sysv4, unix/common
900 # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
901 # after sysv4).
ba75122d 902 sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
28f540f4
RM
903 test -n "$sysnames" && set $sysnames
904done
905
906# Add the default directories.
83ef87ba 907default_sysnames="sysdeps/generic"
ecdc196c 908sysnames="$names $default_sysnames"
f332db02
RM
909AC_SUBST(sysnames)
910# The other names were emitted during the scan.
ecdc196c 911AC_MSG_RESULT($default_sysnames)
28f540f4 912
f332db02
RM
913
914### Locate tools.
28f540f4 915
28f540f4 916AC_PROG_INSTALL
2b80a372 917if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
28f540f4 918 # The makefiles need to use a different form to find it in $srcdir.
2b80a372 919 INSTALL='\$(..)./scripts/install-sh -c'
28f540f4 920fi
0e3426bb 921AC_PROG_LN_S
ae828bc6 922
4baa087a 923LIBC_PROG_BINUTILS
4baa087a 924
b4396163 925# Accept binutils 2.25 or newer.
4baa087a
RM
926AC_CHECK_PROG_VER(AS, $AS, --version,
927 [GNU assembler.* \([0-9]*\.[0-9.]*\)],
b4396163 928 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
bd805071 929 AS=: critic_missing="$critic_missing as")
f300dc73
L
930
931if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
932 # Accept gold 1.14 or higher
933 AC_CHECK_PROG_VER(LD, $LD, --version,
934 [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
935 [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
936 LD=: critic_missing="$critic_missing GNU gold")
937else
938 AC_CHECK_PROG_VER(LD, $LD, --version,
939 [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
073e8fa7 940 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
f300dc73
L
941 LD=: critic_missing="$critic_missing GNU ld")
942fi
4baa087a 943
63bda0c1 944# These programs are version sensitive.
3a12e572 945AC_CHECK_TOOL_PREFIX
22e65f8f 946AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
8fc1e2ca 947 [GNU Make[^0-9]*\([0-9][0-9.]*\)],
f2873d2d 948 [[4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
63bda0c1 949
22e65f8f 950AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
bdd421cc 951 [GNU gettext.* \([0-9]*\.[0-9.]*\)],
aefdff34
RM
952 [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
953 MSGFMT=: aux_missing="$aux_missing msgfmt")
63bda0c1 954AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
8b7fb588 955 [GNU texinfo.* \([0-9][0-9.]*\)],
3a12c70f 956 [4.[7-9]*|4.[1-9][0-9]*|[5-9].*],
aefdff34 957 MAKEINFO=: aux_missing="$aux_missing makeinfo")
d6a97a28 958AC_CHECK_PROG_VER(SED, sed, --version,
07e51550 959 [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
aefdff34
RM
960 [3.0[2-9]*|3.[1-9]*|[4-9]*],
961 SED=: aux_missing="$aux_missing sed")
0786794f
AM
962AC_CHECK_PROG_VER(AWK, gawk, --version,
963 [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
12086fb4 964 [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
1faaf703
JB
965AC_CHECK_PROG_VER(BISON, bison, --version,
966 [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
967 [2.7*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing bison")
63bda0c1 968
461a7b1e
RM
969AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
970AC_TRY_COMPILE([], [
4add8674 971#if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9)
461a7b1e
RM
972#error insufficient compiler
973#endif],
974 [libc_cv_compiler_ok=yes],
975 [libc_cv_compiler_ok=no])])
976AS_IF([test $libc_cv_compiler_ok != yes],
977 [critic_missing="$critic_missing compiler"])
978
30b99d79 979AC_CHECK_TOOL(NM, nm, false)
d30cf5bb 980
8894bad3
AM
981if test "x$maintainer" = "xyes"; then
982 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
983 case "x$AUTOCONF" in
984 xno|x|x:) AUTOCONF=no ;;
985 *)
986 AC_CACHE_CHECK(dnl
987 whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
988 if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then
989 libc_cv_autoconf_works=yes
990 else
991 libc_cv_autoconf_works=no
992 fi])
993 test $libc_cv_autoconf_works = yes || AUTOCONF=no
994 ;;
995 esac
996 if test "x$AUTOCONF" = xno; then
997 aux_missing="$aux_missing autoconf"
998 fi
9e8ac24b
AM
999else
1000 AUTOCONF=no
14519931 1001fi
1400de2e 1002
8ce8299f
SP
1003# Check for python3 if available, or else python.
1004AC_CHECK_PROGS(PYTHON_PROG, python3 python,no)
1005case "x$PYTHON_PROG" in
1006xno|x|x:) PYTHON_PROG=no ;;
1007*) ;;
1008esac
1009
1010if test "x$PYTHON_PROG" = xno; then
1011 aux_missing="$aux_missing python"
1012else
1013 PYTHON="$PYTHON_PROG -B"
1014 AC_SUBST(PYTHON)
1015fi
1016
32a448ed
RM
1017test -n "$critic_missing" && AC_MSG_ERROR([
1018*** These critical programs are missing or too old:$critic_missing
1019*** Check the INSTALL file for required versions.])
1020
4bca4c17 1021test -n "$aux_missing" && AC_MSG_WARN([
9c6fffc0 1022*** These auxiliary programs are missing or incompatible versions:$aux_missing
8ce8299f 1023*** some features or tests will be disabled.
63bda0c1 1024*** Check the INSTALL file for required versions.])
28f540f4 1025
dbe7a0f5
UD
1026# if using special system headers, find out the compiler's sekrit
1027# header directory and add that to the list. NOTE: Only does the right
1028# thing on a system that doesn't need fixincludes. (Not presently a problem.)
1029if test -n "$sysheaders"; then
67fbfa5c
RM
1030 SYSINCLUDES=-nostdinc
1031 for d in include include-fixed; do
1032 i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
1033 SYSINCLUDES="$SYSINCLUDES -isystem $i"
1034 done
1035 SYSINCLUDES="$SYSINCLUDES \
3d6ce23a 1036-isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
ef226fec 1037 if test -n "$CXX"; then
7872cfb0 1038 CXX_SYSINCLUDES=
67060746
AC
1039 for cxxheaders in `$CXX -v -S -x c++ /dev/null -o /dev/null 2>&1 \
1040 | sed -n -e '1,/#include/d' -e 's/^ \(\/.*\/[cg]++\)/\1/p'`; do
1041 test "x$cxxheaders" != x &&
1042 CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders"
1043 done
ef226fec 1044 fi
dbe7a0f5
UD
1045fi
1046AC_SUBST(SYSINCLUDES)
ef226fec 1047AC_SUBST(CXX_SYSINCLUDES)
dbe7a0f5 1048
fc3e1337
FW
1049# Obtain some C++ header file paths. This is used to make a local
1050# copy of those headers in Makerules.
1051if test -n "$CXX"; then
1052 find_cxx_header () {
c2528fef
FW
1053 echo "#include <$1>" | $CXX -M -MP -x c++ - 2>/dev/null \
1054 | sed -n "\,$1:,{s/:\$//;p}"
fc3e1337
FW
1055 }
1056 CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
1057 CXX_CMATH_HEADER="$(find_cxx_header cmath)"
a65ea28d 1058 CXX_BITS_STD_ABS_H="$(find_cxx_header bits/std_abs.h)"
fc3e1337
FW
1059fi
1060AC_SUBST(CXX_CSTDLIB_HEADER)
1061AC_SUBST(CXX_CMATH_HEADER)
a65ea28d 1062AC_SUBST(CXX_BITS_STD_ABS_H)
fc3e1337 1063
3911660e
UD
1064# Test if LD_LIBRARY_PATH contains the notation for the current directory
1065# since this would lead to problems installing/building glibc.
1066# LD_LIBRARY_PATH contains the current directory if one of the following
1067# is true:
1068# - one of the terminals (":" and ";") is the first or last sign
1069# - two terminals occur directly after each other
1070# - the path contains an element with a dot in it
1071AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
1072changequote(,)dnl
1073case ${LD_LIBRARY_PATH} in
1074 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
b3a86ae1 1075 ld_library_path_setting="contains current directory"
3911660e
UD
1076 ;;
1077 *)
1078 ld_library_path_setting="ok"
1079 ;;
1080esac
1081changequote([,])dnl
1082AC_MSG_RESULT($ld_library_path_setting)
1083if test "$ld_library_path_setting" != "ok"; then
63bda0c1
UD
1084AC_MSG_ERROR([
1085*** LD_LIBRARY_PATH shouldn't contain the current directory when
1086*** building glibc. Please change the environment variable
1087*** and run configure again.])
3911660e 1088fi
8e31cf7e 1089
26f56c1c 1090AC_PATH_PROG(BASH_SHELL, bash, no)
84384f5b 1091
c0016081 1092AC_PATH_PROG(PERL, perl, no)
2fd5d029
RM
1093if test "$PERL" != no &&
1094 (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1095 PERL=no
ecb06196 1096fi
2f512715
AS
1097AC_PATH_PROG(INSTALL_INFO, install-info, no,
1098 $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
2de00372 1099
b8dc6a10 1100AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
9a70fcab 1101cat > conftest.s <<EOF
8c0c01db 1102.text
ae1025be 1103foo:
df2a0c93 1104.set glibc_conftest_frobozz,foo
7b8e0d49 1105.globl glibc_conftest_frobozz
e215c478 1106EOF
df2a0c93
RM
1107# The alpha-dec-osf1 assembler gives only a warning for `.set'
1108# (but it doesn't work), so we must do a linking check to be sure.
1109cat > conftest1.c <<\EOF
1110extern int glibc_conftest_frobozz;
640f0119 1111void _start() { glibc_conftest_frobozz = 1; }
df2a0c93
RM
1112EOF
1113if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
66a704c4 1114 -nostartfiles -nostdlib $no_ssp \
0b4ee387 1115 -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
e215c478
RM
1116 libc_cv_asm_set_directive=yes
1117else
1118 libc_cv_asm_set_directive=no
1119fi
65b3cbcb 1120rm -f conftest*])
e215c478
RM
1121if test $libc_cv_asm_set_directive = yes; then
1122 AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1123fi
1124
2a723ff6
JM
1125AC_CACHE_CHECK(linker support for protected data symbol,
1126 libc_cv_protected_data,
1127 [cat > conftest.c <<EOF
1128 int bar __attribute__ ((visibility ("protected"))) = 1;
83569fb8 1129EOF
2a723ff6 1130 libc_cv_protected_data=no
66a704c4 1131 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -o conftest.so); then
2a723ff6
JM
1132 cat > conftest.c <<EOF
1133 extern int bar;
1134 int main (void) { return bar; }
83569fb8 1135EOF
66a704c4 1136 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp conftest.c -o conftest conftest.so); then
2a723ff6 1137 libc_cv_protected_data=yes
83569fb8 1138 fi
2a723ff6
JM
1139 fi
1140 rm -f conftest.*
1141 ])
83569fb8
L
1142AC_SUBST(libc_cv_protected_data)
1143
19f1a11e
L
1144AC_CACHE_CHECK(linker support for INSERT in linker script,
1145 libc_cv_insert,
1146 [cat > conftest.c <<EOF
1147 const int __attribute__ ((section(".bar"))) bar = 0x12345678;
1148 int test (void) { return bar; }
1149EOF
1150 cat > conftest.t <<EOF
1151 SECTIONS
1152 {
1153 .bar : { *(.bar) }
1154 }
1155 INSERT AFTER .rela.dyn;
1156EOF
1157 libc_cv_insert=no
1158 if AC_TRY_COMMAND([${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -Wl,-T,conftest.t -o conftest.so]); then
1159 libc_cv_insert=yes
1160 fi
1161 rm -f conftest.*
1162 ])
1163AC_SUBST(libc_cv_insert)
1164
a0da5fe1
UD
1165AC_CACHE_CHECK(for broken __attribute__((alias())),
1166 libc_cv_broken_alias_attribute,
1167 [cat > conftest.c <<EOF
1168 extern int foo (int x) __asm ("xyzzy");
1169 int bar (int x) { return x; }
1170 extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1171 extern int dfoo;
1172 extern __typeof (dfoo) dfoo __asm ("abccb");
1173 int dfoo = 1;
37ba7d66 1174EOF
a0da5fe1
UD
1175 libc_cv_broken_alias_attribute=yes
1176 if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1177 if grep 'xyzzy' conftest.s >/dev/null &&
1178 grep 'abccb' conftest.s >/dev/null; then
1179 libc_cv_broken_alias_attribute=no
1180 fi
1181 fi
1182 rm -f conftest.c conftest.s
1183 ])
1184if test $libc_cv_broken_alias_attribute = yes; then
1185 AC_MSG_ERROR(working alias attribute support required)
1186fi
1187
2a723ff6
JM
1188AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1189 libc_cv_have_sdata_section,
1190 [echo "int i;" > conftest.c
1191 libc_cv_have_sdata_section=no
1192 if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1193 | grep '\.sdata' >/dev/null; then
1194 libc_cv_have_sdata_section=yes
1195 fi
1196 rm -f conftest.c conftest.so
1197 ])
1198if test $libc_cv_have_sdata_section = yes; then
1199 AC_DEFINE(HAVE_SDATA_SECTION)
a0da5fe1 1200fi
0d01dace 1201
a0da5fe1
UD
1202AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
1203 libc_cv_ctors_header, [dnl
1204 libc_cv_ctors_header=yes
07037eeb
JM
1205 LIBC_TRY_LINK_STATIC([
1206__attribute__ ((constructor)) void ctor (void) { asm (""); }
1207__attribute__ ((destructor)) void dtor (void) { asm (""); }
113ddea4 1208],
a0da5fe1 1209 [dnl
113ddea4 1210 AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
92963737 1211 { gsub(/\@<:@ */, "@<:@") }
113ddea4
RM
1212 $2 == ".ctors" || $2 == ".dtors" {
1213 size = strtonum("0x" $6)
1214 align = strtonum("0x" $NF)
1215 seen@<:@$2@:>@ = 1
1216 stub@<:@$2@:>@ = size == align * 2
92963737 1217 }
113ddea4
RM
1218 END {
1219 ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1220 dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1221 exit ((ctors_ok && dtors_ok) ? 0 : 1)
1222 }
1223 '], [libc_cv_ctors_header=no])
1224 ], [dnl
1225 AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1226 ])
a0da5fe1
UD
1227])
1228if test $libc_cv_ctors_header = no; then
1229 AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1230fi
5241882c 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
1764
022dfdce
SL
1765if test x"$libc_cv_gcc_indirect_function" = xyes; then
1766 AC_DEFINE(HAVE_GCC_IFUNC)
1767fi
1768
3cc3ef96
RM
1769# This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1770# configure fragment can override the value to prevent this AC_DEFINE.
1771AC_SUBST(use_nscd)
1772if test "x$use_nscd" != xno; then
1773 AC_DEFINE([USE_NSCD])
1774fi
c53d909c
RM
1775if test "x$build_nscd" = xdefault; then
1776 build_nscd=$use_nscd
1777fi
3cc3ef96 1778
84384f5b 1779AC_SUBST(libc_cv_slibdir)
aaa8cb4b 1780AC_SUBST(libc_cv_rtlddir)
90fe682d 1781AC_SUBST(libc_cv_complocaledir)
77259608 1782AC_SUBST(libc_cv_sysconfdir)
4248b1b1 1783AC_SUBST(libc_cv_localstatedir)
1ef32c3d
UD
1784AC_SUBST(libc_cv_rootsbindir)
1785
f57f8055
RM
1786if test x$use_ldconfig = xyes; then
1787 AC_DEFINE(USE_LDCONFIG)
1788fi
591e1ffb 1789AC_SUBST(use_ldconfig)
cb343854 1790AC_SUBST(ldd_rewrite_script)
84384f5b 1791
650425ce 1792AC_SUBST(static)
ff3d7ed3 1793AC_SUBST(shared)
a334319f 1794
ff886b82
UD
1795AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1796[libc_cv_pic_default=yes
cc3fa755 1797cat > conftest.c <<EOF
9756dfe1 1798#if defined __PIC__ || defined __pic__ || defined PIC || defined pic
cc3fa755
UD
1799# error PIC is default.
1800#endif
1801EOF
0b4ee387 1802if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
ff886b82 1803 libc_cv_pic_default=no
cc3fa755
UD
1804fi
1805rm -f conftest.*])
ff886b82 1806AC_SUBST(libc_cv_pic_default)
cc3fa755 1807
00c714df
L
1808AC_CACHE_CHECK([whether -fPIE is default], libc_cv_cc_pie_default,
1809[libc_cv_cc_pie_default=yes
cc08749b
L
1810cat > conftest.c <<EOF
1811#if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1812# error PIE is default.
1813#endif
1814EOF
1815if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
00c714df 1816 libc_cv_cc_pie_default=no
cc08749b
L
1817fi
1818rm -f conftest.*])
00c714df
L
1819libc_cv_pie_default=$libc_cv_cc_pie_default
1820AC_SUBST(libc_cv_cc_pie_default)
cc08749b
L
1821AC_SUBST(libc_cv_pie_default)
1822
abcb584d
L
1823# Set the `multidir' variable by grabbing the variable from the compiler.
1824# We do it once and save the result in a generated makefile.
1825libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory`
1826AC_SUBST(libc_cv_multidir)
1827
9d7a3741
L
1828if test "$static_pie" = yes; then
1829 # The linker must support --no-dynamic-linker.
1830 if test "$libc_cv_no_dynamic_linker" != yes; then
1831 AC_MSG_ERROR([linker support for --no-dynamic-linker needed])
1832 fi
1833 # Default to PIE.
1834 libc_cv_pie_default=yes
1835 AC_DEFINE(ENABLE_STATIC_PIE)
1836fi
1837LIBC_CONFIG_VAR([enable-static-pie], [$static_pie])
1838
ff3d7ed3 1839AC_SUBST(profile)
5107cf1d 1840AC_SUBST(static_nss)
ff3d7ed3 1841
edf5b2d7
UD
1842AC_SUBST(DEFINES)
1843
cb8a6dbd 1844dnl See sysdeps/mach/configure.ac for this variable.
61c83c3f
RM
1845AC_SUBST(mach_interface_list)
1846
ee74a442
UD
1847VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1848RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
df4ef2ab 1849AC_SUBST(VERSION)
ee74a442 1850AC_SUBST(RELEASE)
df4ef2ab 1851
728e272a 1852AC_CONFIG_FILES([config.make Makefile])
c118d634 1853AC_CONFIG_COMMANDS([default],[[
737547be
UD
1854case $CONFIG_FILES in *config.make*)
1855echo "$config_vars" >> config.make;;
1856esac
c118d634
RM
1857test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1858AC_OUTPUT