]> git.ipfire.org Git - thirdparty/glibc.git/blame - configure.ac
S390: Adjust lock elision code after review.
[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.
f318beb8 3AC_INIT([GNU C Library], [(see version.h)], [http://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
22# <http://sourceware.org/ml/libc-alpha/2013-01/msg00721.html>.
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
39# <http://sourceware.org/ml/libc-alpha/2013-01/msg00757.html>.
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([fp],
77e8bddf
AS
131 AC_HELP_STRING([--with-fp],
132 [if using floating-point hardware @<:@default=yes@:>@]),
6b7f6183
RM
133 [with_fp=$withval],
134 [with_fp=yes])
675322a5 135AC_SUBST(with_fp)
6b7f6183 136AC_ARG_WITH([binutils],
77e8bddf
AS
137 AC_HELP_STRING([--with-binutils=PATH],
138 [specify location of binutils (as and ld)]),
6b7f6183
RM
139 [path_binutils=$withval],
140 [path_binutils=''])
2fff3d93 141AC_ARG_WITH([selinux],
77e8bddf
AS
142 AC_HELP_STRING([--with-selinux],
143 [if building with SELinux support]),
2fff3d93
UD
144 [with_selinux=$withval],
145 [with_selinux=auto])
28f540f4 146
6b7f6183 147AC_ARG_WITH([headers],
77e8bddf
AS
148 AC_HELP_STRING([--with-headers=PATH],
149 [location of system headers to use
6b7f6183
RM
150 (for example /usr/src/linux/include)
151 @<:@default=compiler default@:>@]),
152 [sysheaders=$withval],
153 [sysheaders=''])
c91c505f 154AC_SUBST(sysheaders)
dbe7a0f5 155
f781ef40
RM
156AC_SUBST(use_default_link)
157AC_ARG_WITH([default-link],
158 AC_HELP_STRING([--with-default-link],
fd5e21c7 159 [do not use explicit linker scripts]),
f781ef40 160 [use_default_link=$withval],
fd5e21c7 161 [use_default_link=default])
f781ef40 162
6b7f6183 163AC_ARG_ENABLE([sanity-checks],
77e8bddf
AS
164 AC_HELP_STRING([--disable-sanity-checks],
165 [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
6b7f6183
RM
166 [enable_sanity=$enableval],
167 [enable_sanity=yes])
a18f587d 168
6b7f6183 169AC_ARG_ENABLE([shared],
77e8bddf 170 AC_HELP_STRING([--enable-shared],
a0da5fe1 171 [build shared library @<:@default=yes if GNU ld@:>@]),
6b7f6183 172 [shared=$enableval],
a0da5fe1 173 [shared=yes])
6b7f6183 174AC_ARG_ENABLE([profile],
77e8bddf
AS
175 AC_HELP_STRING([--enable-profile],
176 [build profiled library @<:@default=no@:>@]),
6b7f6183 177 [profile=$enableval],
11bf311e 178 [profile=no])
1cba4036
MF
179AC_ARG_ENABLE([timezone-tools],
180 AC_HELP_STRING([--disable-timezone-tools],
44f826e3 181 [do not install timezone tools @<:@default=install@:>@]),
1cba4036
MF
182 [enable_timezone_tools=$enableval],
183 [enable_timezone_tools=yes])
184AC_SUBST(enable_timezone_tools)
6b7f6183 185
740b3dbe
L
186AC_ARG_ENABLE([hardcoded-path-in-tests],
187 AC_HELP_STRING([--enable-hardcoded-path-in-tests],
188 [hardcode newly built glibc path in tests @<:@default=no@:>@]),
189 [hardcoded_path_in_tests=$enableval],
190 [hardcoded_path_in_tests=no])
191AC_SUBST(hardcoded_path_in_tests)
192
35f1e827
UD
193AC_ARG_ENABLE([stackguard-randomization],
194 AC_HELP_STRING([--enable-stackguard-randomization],
195 [initialize __stack_chk_guard canary with a random number at program start]),
196 [enable_stackguard_randomize=$enableval],
197 [enable_stackguard_randomize=no])
198if test "$enable_stackguard_randomize" = yes; then
199 AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
200fi
201
1717da59
AK
202AC_ARG_ENABLE([lock-elision],
203 AC_HELP_STRING([--enable-lock-elision[=yes/no]],
52dfbe13 204 [Enable lock elision for pthread mutexes by default]),
1717da59
AK
205 [enable_lock_elision=$enableval],
206 [enable_lock_elision=no])
5a414ff7 207AC_SUBST(enable_lock_elision)
1717da59
AK
208if test "$enable_lock_elision" = yes ; then
209 AC_DEFINE(ENABLE_LOCK_ELISION)
210fi
211
6b3a2224 212dnl Generic infrastructure for drop-in additions to libc.
6b7f6183 213AC_ARG_ENABLE([add-ons],
77e8bddf
AS
214 AC_HELP_STRING([--enable-add-ons@<:@=DIRS...@:>@],
215 [configure and build add-ons in DIR1,DIR2,...
216 search for add-ons if no parameter given]),
e0a3ed4f 217 , [enable_add_ons=yes])
61952351 218
6b7f6183 219AC_ARG_ENABLE([hidden-plt],
77e8bddf
AS
220 AC_HELP_STRING([--disable-hidden-plt],
221 [do not hide internal function calls to avoid PLT]),
6b7f6183
RM
222 [hidden=$enableval],
223 [hidden=yes])
749a9a4f
RM
224if test "x$hidden" = xno; then
225 AC_DEFINE(NO_HIDDEN)
226fi
227
4df8c11d
UD
228AC_ARG_ENABLE([bind-now],
229 AC_HELP_STRING([--enable-bind-now],
230 [disable lazy relocations in DSOs]),
231 [bindnow=$enableval],
232 [bindnow=no])
233AC_SUBST(bindnow)
6901def6
L
234if test "x$bindnow" = xyes; then
235 AC_DEFINE(BIND_NOW)
236fi
4df8c11d 237
03baef1c
NA
238dnl Build glibc with -fstack-protector, -fstack-protector-all, or
239dnl -fstack-protector-strong.
240AC_ARG_ENABLE([stack-protector],
241 AC_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@],
242 [Use -fstack-protector[-all|-strong] to detect glibc buffer overflows]),
243 [enable_stack_protector=$enableval],
244 [enable_stack_protector=no])
245case "$enable_stack_protector" in
246all|yes|no|strong) ;;
247*) AC_MSG_ERROR([Not a valid argument for --enable-stack-protector: \"$enable_stack_protector\"]);;
248esac
249
5107cf1d
UD
250dnl On some platforms we cannot use dynamic loading. We must provide
251dnl static NSS modules.
6b7f6183 252AC_ARG_ENABLE([static-nss],
77e8bddf
AS
253 AC_HELP_STRING([--enable-static-nss],
254 [build static NSS modules @<:@default=no@:>@]),
6b7f6183
RM
255 [static_nss=$enableval],
256 [static_nss=no])
834cef7c
UD
257dnl Enable static NSS also if we build no shared objects.
258if test x"$static_nss" = xyes || test x"$shared" = xno; then
3172f58f 259 static_nss=yes
5107cf1d
UD
260 AC_DEFINE(DO_STATIC_NSS)
261fi
262
6b7f6183 263AC_ARG_ENABLE([force-install],
77e8bddf
AS
264 AC_HELP_STRING([--disable-force-install],
265 [don't force installation of files from this package, even if they are older than the installed files]),
6b7f6183
RM
266 [force_install=$enableval],
267 [force_install=yes])
73237de3
UD
268AC_SUBST(force_install)
269
8894bad3
AM
270AC_ARG_ENABLE([maintainer-mode],
271 AC_HELP_STRING([--enable-maintainer-mode],
272 [enable make rules and dependencies not useful (and sometimes confusing) to the casual installer]),
273 [maintainer=$enableval],
274 [maintainer=no])
275
958f238f
UD
276dnl On some platforms we allow dropping compatibility with all kernel
277dnl versions.
6b7f6183 278AC_ARG_ENABLE([kernel],
77e8bddf
AS
279 AC_HELP_STRING([--enable-kernel=VERSION],
280 [compile for compatibility with kernel not older than VERSION]),
6b7f6183
RM
281 [minimum_kernel=$enableval],
282 [])
86cfe82d
UD
283dnl Prevent unreasonable values.
284if test "$minimum_kernel" = yes || test "$minimum_kernel" = no; then
285 # Better nothing than this.
286 minimum_kernel=""
269e369f
UD
287else
288 if test "$minimum_kernel" = current; then
289 minimum_kernel=`uname -r 2>/dev/null` || minimum_kernel=
290 fi
86cfe82d 291fi
958f238f 292
6cc7d725
UD
293dnl For the development we sometimes want gcc to issue even more warnings.
294dnl This is not the default since many of the extra warnings are not
295dnl appropriate.
6b7f6183
RM
296AC_ARG_ENABLE([all-warnings],
297 AC_HELP_STRING([--enable-all-warnings],
77e8bddf 298 [enable all useful warnings gcc can issue]),
6b7f6183
RM
299 [all_warnings=$enableval],
300 [])
6cc7d725
UD
301AC_SUBST(all_warnings)
302
a4ecc9eb
JM
303AC_ARG_ENABLE([werror],
304 AC_HELP_STRING([--disable-werror],
305 [do not build with -Werror]),
306 [enable_werror=$enableval],
307 [enable_werror=yes])
308AC_SUBST(enable_werror)
309
425ce2ed
UD
310AC_ARG_ENABLE([multi-arch],
311 AC_HELP_STRING([--enable-multi-arch],
312 [enable single DSO with optimizations for multiple architectures]),
313 [multi_arch=$enableval],
6f89d2f3 314 [multi_arch=default])
425ce2ed 315
ff886b82
UD
316AC_ARG_ENABLE([nss-crypt],
317 AC_HELP_STRING([--enable-nss-crypt],
318 [enable libcrypt to use nss]),
319 [nss_crypt=$enableval],
320 [nss_crypt=no])
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
326 old_CFLAGS="$CFLAGS"
327 CFLAGS="$CFLAGS $nss_includes"
b68e08db 328 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
ff886b82
UD
329#include <hasht.h>
330#include <nsslowhash.h>
b68e08db 331void f (void) { NSSLOW_Init (); }])],
ff886b82
UD
332 libc_cv_nss_crypt=yes,
333 AC_MSG_ERROR([
334cannot find NSS headers with lowlevel hash function interfaces]))
335 old_LIBS="$LIBS"
84aa7516 336 old_LDFLAGS="$LDFLAGS"
ff886b82
UD
337 LIBS="$LIBS -lfreebl3"
338 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
339#include <hasht.h>
340#include <nsslowhash.h>],
341 [NSSLOW_Init();])],
342 libc_cv_nss_crypt=yes,
343 AC_MSG_ERROR([
344cannot link program using lowlevel NSS hash functions]))
84aa7516
CD
345 # Check to see if there is a static NSS cryptographic library.
346 # If there isn't then we can't link anything with libcrypt.a,
347 # and that might mean disabling some static tests.
348 LDFLAGS="$LDFLAGS -static"
349 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
350#include <hasht.h>
351#include <nsslowhash.h>],
352 [NSSLOW_Init();])],
353 libc_cv_static_nss_crypt=yes,
354 libc_cv_static_nss_crypt=no)
355 LDFLAGS="$old_LDFLAGS"
ff886b82
UD
356 CFLAGS="$old_CFLAGS"
357 LIBS="$old_LIBS"
358else
359 libc_cv_nss_crypt=no
84aa7516 360 libc_cv_static_nss_crypt=no
ff886b82
UD
361fi
362AC_SUBST(libc_cv_nss_crypt)
84aa7516 363AC_SUBST(libc_cv_static_nss_crypt)
ff886b82 364
3a097cc7 365
021db4be
AJ
366AC_ARG_ENABLE([obsolete-rpc],
367 AC_HELP_STRING([--enable-obsolete-rpc],
368 [build and install the obsolete RPC code for link-time usage]),
369 [link_obsolete_rpc=$enableval],
370 [link_obsolete_rpc=no])
371AC_SUBST(link_obsolete_rpc)
372
373if test "$link_obsolete_rpc" = yes; then
374 AC_DEFINE(LINK_OBSOLETE_RPC)
375fi
376
3a097cc7
RM
377AC_ARG_ENABLE([systemtap],
378 [AS_HELP_STRING([--enable-systemtap],
379 [enable systemtap static probe points @<:@default=no@:>@])],
380 [systemtap=$enableval],
381 [systemtap=no])
382if test "x$systemtap" != xno; then
383 AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
384 old_CFLAGS="$CFLAGS"
783dd2d3 385 CFLAGS="-std=gnu11 $CFLAGS"
0e3933b9 386 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
3a097cc7
RM
387void foo (int i, void *p)
388{
389 asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
390 :: STAP_PROBE_ASM_OPERANDS (2, i, p));
0e3933b9 391}]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])
3a097cc7
RM
392 CFLAGS="$old_CFLAGS"])
393 if test $libc_cv_sdt = yes; then
394 AC_DEFINE([USE_STAP_PROBE])
395 elif test "x$systemtap" != xauto; then
396 AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
397 fi
398fi
399
c53d909c
RM
400AC_ARG_ENABLE([build-nscd],
401 [AS_HELP_STRING([--disable-build-nscd],
402 [disable building and installing the nscd daemon])],
403 [build_nscd=$enableval],
404 [build_nscd=default])
405AC_SUBST(build_nscd)
406
3cc3ef96
RM
407# Note the use of $use_nscd is near the bottom of the file.
408AC_ARG_ENABLE([nscd],
409 [AS_HELP_STRING([--disable-nscd],
410 [library functions will not contact the nscd daemon])],
411 [use_nscd=$enableval],
412 [use_nscd=yes])
413
e4608715
CD
414AC_ARG_ENABLE([pt_chown],
415 [AS_HELP_STRING([--enable-pt_chown],
416 [Enable building and installing pt_chown])],
417 [build_pt_chown=$enableval],
418 [build_pt_chown=no])
419AC_SUBST(build_pt_chown)
8c12f01d 420if test "$build_pt_chown" = yes; then
e4608715
CD
421 AC_DEFINE(HAVE_PT_CHOWN)
422fi
423
67e58f39
SP
424AC_ARG_ENABLE([tunables],
425 [AS_HELP_STRING([--enable-tunables],
6765d5d3 426 [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])],
67e58f39
SP
427 [have_tunables=$enableval],
428 [have_tunables=no])
429AC_SUBST(have_tunables)
430if test "$have_tunables" = yes; then
431 AC_DEFINE(HAVE_TUNABLES)
432fi
433
ebf27d12
ST
434# The abi-tags file uses a fairly simplistic model for name recognition that
435# can't distinguish i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a
436# $host_os of `gnu*' here to be `gnu-gnu*' just so that it can tell.
437# This doesn't get used much beyond that, so it's fairly safe.
438case "$host_os" in
439linux*)
440 ;;
441gnu*)
442 host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
443 ;;
444esac
445
5695d46f
AS
446AC_ARG_ENABLE([mathvec],
447 [AS_HELP_STRING([--enable-mathvec],
448 [Enable building and installing mathvec @<:@default depends on architecture@:>@])],
449 [build_mathvec=$enableval],
450 [build_mathvec=notset])
451
28f540f4
RM
452# We keep the original values in `$config_*' and never modify them, so we
453# can write them unchanged into config.make. Everything else uses
454# $machine, $vendor, and $os, and changes them whenever convenient.
455config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
456
2f64b655
UD
457# Don't allow vendor == "unknown"
458test "$config_vendor" = unknown && config_vendor=
459config_os="`echo $config_os | sed 's/^unknown-//'`"
460
a2fe9c76 461# Some configurations imply other options.
0269750c 462elf=yes
a2fe9c76 463
8f73811b
RM
464# The configure fragment of an add-on port can modify these to supplement
465# or override the table in the case statement below. No fragment should
466# ever change the config_* variables, however.
28f540f4
RM
467machine=$config_machine
468vendor=$config_vendor
469os=$config_os
b22d21b3 470base_os=''
28f540f4 471
2ceaa76a
RM
472submachine=
473AC_ARG_WITH([cpu],
474 AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
475 [dnl
476 case "$withval" in
477 yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
478 no) ;;
479 *) submachine="$withval" ;;
480 esac
481])
482
05439291
RM
483# An preconfigure script can set this when it wants to disable the sanity
484# check below.
485libc_config_ok=no
486
10a803e0
RM
487dnl Let sysdeps/*/preconfigure act here, like they can in add-ons.
488LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
489
8f73811b
RM
490dnl Having this here, though empty, makes sure that if add-ons' fragments
491dnl do AC_CONFIG_SUBDIRS([some-dir]), which just sets $subdirs, then
492dnl our AC_OUTPUT will actually use it.
493AC_CONFIG_SUBDIRS()
494
e0a3ed4f
RM
495case "$enable_add_ons" in
496''|no) add_ons= ;;
497yes|'*')
498 add_ons=`cd $srcdir && ls -d 2> /dev/null */configure */sysdeps |
499 sed 's@/[[^/]]*$@@' | sort | uniq`
500 add_ons_automatic=yes
501 ;;
502*) add_ons=`echo "$enable_add_ons" | sed 's/,/ /g'`
503 add_ons_automatic=no ;;
504esac
505
506configured_add_ons=
8f73811b
RM
507add_ons_sfx=
508add_ons_pfx=
509if test x"$add_ons" != x; then
510 for f in $add_ons; do
511 # Some sanity checks
512 case "$f" in
513 crypt)
514 AC_MSG_ERROR([
515*** It seems that you're using an old \`crypt' add-on. crypt is now
516*** part of glibc and using the old add-on will not work with this
517*** release. Start again with fresh sources and without the old
518*** \`crypt' add-on.])
519 ;;
520 localedata)
521 AC_MSG_ERROR([
522*** It seems that you're using an old \`localedata' add-on. localedata
523*** is now part of glibc and using the old add-on will not work with
524*** this release. Start again with fresh sources and without the old
525*** \`localedata' add-on.])
526 ;;
527 esac
8f73811b
RM
528 done
529
9382fcee 530 # Now source each add-on's configure fragment.
c80e931a
RM
531 # The fragments can use $srcdir/$libc_add_on to find themselves,
532 # and test $add_ons_automatic to see if they were explicitly requested.
533 # A fragment can clear (or even change) $libc_add_on to affect
534 # whether it goes into the list to be actually used in the build.
535 use_add_ons=
9382fcee 536 for libc_add_on in $add_ons; do
e0a3ed4f
RM
537 # Test whether such a directory really exists.
538 # It can be absolute, or relative to $srcdir, or relative to the build dir.
539 case "$libc_add_on" in
540 /*)
541 libc_add_on_srcdir=$libc_add_on
542 ;;
543 *)
544 test -d "$srcdir/$libc_add_on" || {
77e8bddf 545 if test -d "$libc_add_on"; then
e0a3ed4f
RM
546 libc_add_on="`pwd`/$libc_add_on"
547 else
548 AC_MSG_ERROR(add-on directory \"$libc_add_on\" does not exist)
549 fi
550 }
551 libc_add_on_srcdir=$srcdir/$libc_add_on
552 ;;
553 esac
554
555 libc_add_on_frag=$libc_add_on_srcdir/configure
556 libc_add_on_canonical=
7967983f 557 libc_add_on_config_subdirs=
e0a3ed4f
RM
558 if test -r "$libc_add_on_frag"; then
559 AC_MSG_NOTICE(running configure fragment for add-on $libc_add_on)
560 libc_add_on_canonical=unknown
561 libc_add_on_subdirs=
562 . "$libc_add_on_frag"
563 test -z "$libc_add_on" || {
77e8bddf 564 configured_add_ons="$configured_add_ons $libc_add_on"
e0a3ed4f
RM
565 if test "x$libc_add_on_canonical" = xunknown; then
566 AC_MSG_ERROR(fragment must set \$libc_add_on_canonical)
567 fi
568 for d in $libc_add_on_subdirs; do
569 case "$libc_add_on" in
570 /*) subdir_srcdir="$libc_add_on" ;;
571 *) subdir_srcdir="\$(..)$libc_add_on" ;;
572 esac
573 case "$d" in
574 .)
575 d="${libc_add_on_canonical:-$libc_add_on}"
576 ;;
577 /*)
578 subdir_srcdir="$d"
579 ;;
580 *)
581 subdir_srcdir="$subdir_srcdir/$d"
582 ;;
583 esac
584 d=`echo "$d" | sed 's@/*$@@;s@^.*/@@'`
585 add_on_subdirs="$add_on_subdirs $d"
586 test "$subdir_srcdir" = "\$(..)$d" || config_vars="$config_vars
587$d-srcdir = $subdir_srcdir"
588 done
7967983f
RM
589 for d in $libc_add_on_config_subdirs; do
590 case "$d" in
591 /*) AC_MSG_ERROR(dnl
592fragment uses absolute path in \$libc_add_on_config_subdirs) ;;
593 esac
594 if test ! -d "$libc_add_on_srcdir/$d"; then
595 AC_MSG_ERROR(fragment wants to configure missing directory $d)
596 fi
597 case "$libc_add_on" in
598 /*) AC_MSG_ERROR(dnl
599relative path required for add-on using \$libc_add_on_config_subdirs) ;;
600 esac
601 subdirs="$subdirs $libc_add_on/$d"
602 done
e0a3ed4f 603 }
8f73811b 604 fi
619f9448 605 if test -n "$libc_add_on"; then
10a803e0 606 LIBC_PRECONFIGURE([$libc_add_on_srcdir], [add-on $libc_add_on for])
619f9448
RM
607 use_add_ons="$use_add_ons $libc_add_on"
608 add_ons_pfx="$add_ons_pfx $libc_add_on/"
e0a3ed4f
RM
609 test -z "$libc_add_on_canonical" ||
610 add_ons_sfx="$add_ons_sfx /$libc_add_on_canonical"
619f9448 611 fi
8f73811b 612 done
c80e931a
RM
613 # Use echo to strip excess whitespace.
614 add_ons="`echo $use_add_ons`"
8f73811b
RM
615fi
616AC_SUBST(add_ons)
e0a3ed4f 617AC_SUBST(add_on_subdirs)
8f73811b
RM
618
619
bdc8eb03
UD
620###
621### By using the undocumented --enable-hacker-mode option for configure
622### one can skip this test to make the configuration not fail for unsupported
623### platforms.
624###
8f73811b 625if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
bdc8eb03 626 case "$machine-$host_os" in
2ce4f015 627 *-linux* | *-gnu*)
bdc8eb03
UD
628 ;;
629 *)
4e58b648
MF
630 AC_MSG_ERROR([
631*** The GNU C library is currently unavailable for this platform.
632*** If you are interested in seeing glibc on this platform visit
633*** the "How to submit a new port" in the wiki:
634*** https://sourceware.org/glibc/wiki/#Development
635*** and join the community!])
bdc8eb03
UD
636 ;;
637 esac
638fi
639
3e239be6
JM
640# Set base_machine if not set by a preconfigure fragment.
641test -n "$base_machine" || base_machine=$machine
f0523145 642AC_SUBST(base_machine)
28f540f4 643
03baef1c
NA
644AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
645LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
646 [libc_cv_ssp=yes],
647 [libc_cv_ssp=no])
648])
649
650AC_CACHE_CHECK(for -fstack-protector-strong, libc_cv_ssp_strong, [dnl
651LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-strong],
652 [libc_cv_ssp_strong=yes],
653 [libc_cv_ssp_strong=no])
654])
655
656AC_CACHE_CHECK(for -fstack-protector-all, libc_cv_ssp_all, [dnl
657LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-all],
658 [libc_cv_ssp_all=yes],
659 [libc_cv_ssp_all=no])
660])
661
662stack_protector=
663no_stack_protector=
664if test "$libc_cv_ssp" = yes; then
665 no_stack_protector="-fno-stack-protector -DSTACK_PROTECTOR_LEVEL=0"
de659123 666 AC_DEFINE(HAVE_CC_NO_STACK_PROTECTOR)
03baef1c
NA
667fi
668
669if test "$enable_stack_protector" = yes && test "$libc_cv_ssp" = yes; then
670 stack_protector="-fstack-protector"
671 AC_DEFINE(STACK_PROTECTOR_LEVEL, 1)
672elif test "$enable_stack_protector" = all && test "$libc_cv_ssp_all" = yes; then
673 stack_protector="-fstack-protector-all"
674 AC_DEFINE(STACK_PROTECTOR_LEVEL, 2)
675elif test "$enable_stack_protector" = strong && test "$libc_cv_ssp_strong" = yes; then
676 stack_protector="-fstack-protector-strong"
677 AC_DEFINE(STACK_PROTECTOR_LEVEL, 3)
66a704c4
NA
678else
679 stack_protector="-fno-stack-protector"
680 AC_DEFINE(STACK_PROTECTOR_LEVEL, 0)
03baef1c
NA
681fi
682AC_SUBST(libc_cv_ssp)
683AC_SUBST(stack_protector)
684AC_SUBST(no_stack_protector)
685
66a704c4
NA
686if test -n "$stack_protector"; then
687 dnl Don't run configure tests with stack-protection on, to avoid problems with
688 dnl bootstrapping.
689 no_ssp=-fno-stack-protector
690else
691 no_ssp=
692
693 if test "$enable_stack_protector" != no; then
694 AC_MSG_ERROR([--enable-stack-protector=$enable_stack_protector specified, but specified level of stack protection is not supported by the compiler.])
695 fi
696fi
697
0cae3f4b
MF
698# For the multi-arch option we need support in the assembler & linker.
699AC_CACHE_CHECK([for assembler and linker STT_GNU_IFUNC support],
700 libc_cv_ld_gnu_indirect_function, [dnl
786b0b67 701cat > conftest.S <<EOF
84b9230c 702.type foo,%gnu_indirect_function
0cae3f4b
MF
703foo:
704.globl _start
705_start:
706.globl __start
707__start:
708.data
786b0b67
AS
709#ifdef _LP64
710.quad foo
711#else
0cae3f4b 712.long foo
786b0b67 713#endif
84b9230c 714EOF
0cae3f4b
MF
715libc_cv_ld_gnu_indirect_function=no
716if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
66a704c4 717 -nostartfiles -nostdlib $no_ssp \
786b0b67 718 -o conftest conftest.S 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
0cae3f4b
MF
719 # Do a link to see if the backend supports IFUNC relocs.
720 $READELF -r conftest 1>&AS_MESSAGE_LOG_FD
721 LC_ALL=C $READELF -r conftest | grep 'no relocations' >/dev/null || {
722 libc_cv_ld_gnu_indirect_function=yes
723 }
84b9230c
MF
724fi
725rm -f conftest*])
726
022dfdce
SL
727# Check if gcc supports attribute ifunc as it is used in libc_ifunc macro.
728AC_CACHE_CHECK([for gcc attribute ifunc support],
729 libc_cv_gcc_indirect_function, [dnl
730cat > conftest.c <<EOF
731extern int func (int);
732int used_func (int a)
733{
734 return a;
735}
736static void *resolver ()
737{
738 return &used_func;
739}
740extern __typeof (func) func __attribute__ ((ifunc ("resolver")));
741EOF
742libc_cv_gcc_indirect_function=no
743if ${CC-cc} -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD \
744 2>&AS_MESSAGE_LOG_FD ; then
745 if $READELF -s conftest.o | grep IFUNC >/dev/null 2>&AS_MESSAGE_LOG_FD; then
746 libc_cv_gcc_indirect_function=yes
747 fi
748fi
749rm -f conftest*])
750
0cae3f4b 751if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
84b9230c
MF
752 if test x"$multi_arch" = xyes; then
753 AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
754 else
755 multi_arch=no
756 fi
757fi
022dfdce
SL
758if test x"$libc_cv_gcc_indirect_function" != xyes &&
759 test x"$multi_arch" = xyes; then
760 AC_MSG_WARN([--enable-multi-arch support recommends a gcc with gnu-indirect-function support.
761Please use a gcc which supports it by default or configure gcc with --enable-gnu-indirect-function])
762fi
6270516e 763multi_arch_d=
84b9230c
MF
764if test x"$multi_arch" != xno; then
765 multi_arch_d=/multiarch
766fi
767
f0523145 768# Compute the list of sysdep directories for this configuration.
f332db02 769# This can take a while to compute.
f0523145 770sysdep_dir=$srcdir/sysdeps
f332db02 771AC_MSG_CHECKING(sysdep dirs)
f0523145
RM
772dnl We need to use [ and ] for other purposes for a while now.
773changequote(,)dnl
28f540f4
RM
774# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
775os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
776
b22d21b3 777test "x$base_os" != x || case "$os" in
28f540f4
RM
778gnu*)
779 base_os=mach/hurd ;;
2ce4f015 780linux*)
28f540f4 781 base_os=unix/sysv ;;
28f540f4
RM
782esac
783
784# For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
785tail=$os
786ostry=$os
787while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
788 ostry="$ostry /$o"
789 tail=$o
75914335 790done
28f540f4
RM
791o=`echo $tail | sed 's/[0-9]*$//'`
792if test $o != $tail; then
793 ostry="$ostry /$o"
794fi
ec4b0518
UD
795# For linux-gnu, try linux-gnu, then linux.
796o=`echo $tail | sed 's/-.*$//'`
797if test $o != $tail; then
798 ostry="$ostry /$o"
799fi
28f540f4
RM
800
801# For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
802base=
803tail=$base_os
804while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
805 set $b
806 base="$base /$1"
807 tail="$2"
808done
809
ae6b8730 810# For sparc/sparc32, try sparc/sparc32 and then sparc.
28f540f4 811mach=
2ceaa76a 812tail=$machine${submachine:+/$submachine}
28f540f4
RM
813while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
814 set $m
10ceac89
RM
815 # Prepend the machine's FPU directory unless --without-fp.
816 if test "$with_fp" = yes; then
6270516e 817 maybe_fpu=/fpu
f4b07664 818 else
6270516e 819 maybe_fpu=/nofpu
82d00cab 820 fi
6270516e
RM
821 # For each machine term, try it with and then without /multiarch.
822 for try_fpu in $maybe_fpu ''; do
823 for try_multi in $multi_arch_d ''; do
824 mach="$mach /$1$try_fpu$try_multi"
825 done
826 done
28f540f4
RM
827 tail="$2"
828done
829
830dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
831changequote([,])dnl
832
833# Find what sysdep directories exist.
e0a3ed4f 834sysnames_add_ons=
28f540f4 835sysnames=
4b69abad
RM
836for b in $base ''; do
837 for m0 in $mach ''; do
838 for v in /$vendor ''; do
839 test "$v" = / && continue
840 for o in /$ostry ''; do
841 test "$o" = / && continue
6270516e 842 for m in $mach ''; do
4b69abad 843 for d in $add_ons_pfx ''; do
8f73811b 844 for a in $add_ons_sfx ''; do
1c9f1a02
RM
845 try_suffix="$m0$b$v$o$m"
846 if test -n "$try_suffix"; then
77e8bddf
AS
847 try_srcdir="${srcdir}/"
848 case "$d" in
e0a3ed4f
RM
849 /*) try_srcdir= ;;
850 esac
1c9f1a02 851 try="${d}sysdeps$try_suffix$a"
8f73811b
RM
852 test -n "$enable_debug_configure" &&
853 echo "$0 [DEBUG]: try $try" >&2
e0a3ed4f 854 if test -d "$try_srcdir$try"; then
8f73811b
RM
855 sysnames="$sysnames $try"
856 { test -n "$o" || test -n "$b"; } && os_used=t
857 { test -n "$m" || test -n "$m0"; } && machine_used=t
4b69abad
RM
858 case x${m0:-$m} in
859 x*/$submachine) submachine_used=t ;;
860 esac
e0a3ed4f
RM
861 if test -n "$d"; then
862 case "$sysnames_add_ons" in
863 *" $d "*) ;;
864 *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
865 esac
866 fi
8f73811b 867 fi
57ba7bb4 868 fi
8f73811b 869 done
57ba7bb4 870 done
28f540f4
RM
871 done
872 done
873 done
874 done
4b69abad 875done
28f540f4 876
6f89d2f3
L
877# If the assembler supports gnu_indirect_function symbol type and the
878# architecture supports multi-arch, we enable multi-arch by default.
84b9230c
MF
879case $sysnames_add_ons$sysnames in
880*"$multi_arch_d"*)
881 ;;
882*)
77e8bddf 883 test x"$multi_arch" = xdefault && multi_arch=no
84b9230c
MF
884 ;;
885esac
886if test x"$multi_arch" != xno; then
6f89d2f3
L
887 AC_DEFINE(USE_MULTIARCH)
888fi
889AC_SUBST(multi_arch)
890
28f540f4
RM
891if test -z "$os_used" && test "$os" != none; then
892 AC_MSG_ERROR(Operating system $os is not supported.)
893fi
894if test -z "$machine_used" && test "$machine" != none; then
895 AC_MSG_ERROR(The $machine is not supported.)
896fi
2ceaa76a
RM
897if test -z "$submachine_used" && test -n "$submachine"; then
898 AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
899fi
900AC_SUBST(submachine)
28f540f4
RM
901
902# We have now validated the configuration.
903
28f540f4
RM
904# Expand the list of system names into a full list of directories
905# from each element's parent name and Implies file (if present).
906set $sysnames
e50ec9f9 907names=
28f540f4
RM
908while test $# -gt 0; do
909 name=$1
910 shift
911
e50ec9f9 912 case " $names " in *" $name "*)
f332db02
RM
913 # Already in the list.
914 continue
e50ec9f9 915 esac
f332db02
RM
916
917 # Report each name as we discover it, so there is no long pause in output.
0b4ee387 918 echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
f332db02 919
57ba7bb4
UD
920 name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
921
922 case $name in
923 /*) xsrcdir= ;;
924 *) xsrcdir=$srcdir/ ;;
925 esac
926 test -n "$enable_debug_configure" &&
927 echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
928
ba75122d
RM
929 for implies_file in Implies Implies-before Implies-after; do
930 implies_type=`echo $implies_file | sed s/-/_/`
931 eval ${implies_type}=
932 if test -f $xsrcdir$name/$implies_file; then
933 # Collect more names from the `Implies' file (removing comments).
934 implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
935 for x in $implied_candidate; do
936 found=no
937 if test -d $xsrcdir$name_base/$x; then
938 eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
636ccfc8 939 found=yes
ba75122d
RM
940 fi
941 for d in $add_ons_pfx ''; do
942 try="${d}sysdeps/$x"
943 case $d in
944 /*) try_srcdir= ;;
945 *) try_srcdir=$srcdir/ ;;
e0a3ed4f 946 esac
ba75122d
RM
947 test -n "$enable_debug_configure" &&
948 echo "[DEBUG]: $name $implies_file $x try($d) {$try_srcdir}$try" >&2
949 if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
950 then
951 eval "${implies_type}=\"\$${implies_type} \$try\""
952 found=yes
953 case "$sysnames_add_ons" in
954 *" $d "*) ;;
955 *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
956 esac
957 fi
958 done
959 if test $found = no; then
960 AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
636ccfc8
UD
961 fi
962 done
ba75122d
RM
963 fi
964 done
28f540f4
RM
965
966 # Add NAME to the list of names.
967 names="$names $name"
968
969 # Find the parent of NAME, using the empty string if it has none.
970changequote(,)dnl
57ba7bb4 971 parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
28f540f4
RM
972changequote([,])dnl
973
ba75122d
RM
974 test -n "$enable_debug_configure" &&
975 echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
57633811 976Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
ba75122d 977
28f540f4
RM
978 # Add the names implied by NAME, and NAME's parent (if it has one), to
979 # the list of names to be processed (the argument list). We prepend the
980 # implied names to the list and append the parent. We want implied
981 # directories to come before further directories inferred from the
982 # configuration components; this ensures that for sysv4, unix/common
983 # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
984 # after sysv4).
ba75122d 985 sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
28f540f4
RM
986 test -n "$sysnames" && set $sysnames
987done
988
989# Add the default directories.
83ef87ba 990default_sysnames="sysdeps/generic"
ecdc196c 991sysnames="$names $default_sysnames"
f332db02
RM
992AC_SUBST(sysnames)
993# The other names were emitted during the scan.
ecdc196c 994AC_MSG_RESULT($default_sysnames)
28f540f4 995
e0a3ed4f
RM
996# Collect the list of add-ons that supply partial sysdeps trees.
997sysdeps_add_ons=
998for add_on in $add_ons; do
999 case "$add_on" in
1000 /*) xsrcdir= ;;
1001 *) xsrcdir="$srcdir/" ;;
1002 esac
1003
1004 test -d "$xsrcdir$add_on/sysdeps" || {
1005 case "$configured_add_ons " in
1006 *" $add_on "*) ;;
1007 *|'')
1008 AC_MSG_ERROR(add-on $add_on has no configure fragment or sysdeps tree)
1009 ;;
1010 esac
1011 continue
1012 }
1013
1014 sysdeps_add_ons="$sysdeps_add_ons $add_on"
1015 case "$sysnames_add_ons" in
1016 *" $add_on/ "*) ;;
1017 *|'')
1018 AC_MSG_WARN(add-on $add_on contributed no sysdeps directories)
1019 continue ;;
1020 esac
1021
1022 found=no
1023 for d in $sysnames; do
1024 case "$d" in
1025 $add_on/sysdeps/*) ;;
1026 *) continue ;;
1027 esac
1028 (cd "$xsrcdir$d" && for f in *[[!~]]; do
1029 case "$f" in
1030 sys|bits)
1031 for ff in $f/*.h; do
1032 test -d "$ff" || { test -e "$ff" && exit 88; }
1033 done
1034 ;;
1035 *)
77e8bddf 1036 test -d "$f" || { test -e "$f" && exit 88; }
e0a3ed4f
RM
1037 ;;
1038 esac
1039 done)
1040 if test $? -eq 88; then
1041 found=yes
1042 break
1043 fi
1044 done
1045 if test $found = no; then
1046 AC_MSG_WARN(add-on $add_on contributed no useful sysdeps directories)
1047 fi
1048done
1049AC_SUBST(sysdeps_add_ons)
1050
f332db02
RM
1051
1052### Locate tools.
28f540f4 1053
28f540f4 1054AC_PROG_INSTALL
2b80a372 1055if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
28f540f4 1056 # The makefiles need to use a different form to find it in $srcdir.
2b80a372 1057 INSTALL='\$(..)./scripts/install-sh -c'
28f540f4 1058fi
0e3426bb 1059AC_PROG_LN_S
ae828bc6 1060
4baa087a 1061LIBC_PROG_BINUTILS
4baa087a 1062
bd805071 1063# Accept binutils 2.22 or newer.
4baa087a
RM
1064AC_CHECK_PROG_VER(AS, $AS, --version,
1065 [GNU assembler.* \([0-9]*\.[0-9.]*\)],
bd805071
AS
1066 [2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
1067 AS=: critic_missing="$critic_missing as")
4baa087a
RM
1068AC_CHECK_PROG_VER(LD, $LD, --version,
1069 [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
bd805071
AS
1070 [2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
1071 LD=: critic_missing="$critic_missing ld")
4baa087a 1072
63bda0c1 1073# These programs are version sensitive.
3a12e572 1074AC_CHECK_TOOL_PREFIX
22e65f8f 1075AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
8fc1e2ca 1076 [GNU Make[^0-9]*\([0-9][0-9.]*\)],
28d708c4 1077 [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
63bda0c1 1078
22e65f8f 1079AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
bdd421cc 1080 [GNU gettext.* \([0-9]*\.[0-9.]*\)],
aefdff34
RM
1081 [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
1082 MSGFMT=: aux_missing="$aux_missing msgfmt")
63bda0c1 1083AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
8b7fb588 1084 [GNU texinfo.* \([0-9][0-9.]*\)],
3a12c70f 1085 [4.[7-9]*|4.[1-9][0-9]*|[5-9].*],
aefdff34 1086 MAKEINFO=: aux_missing="$aux_missing makeinfo")
d6a97a28 1087AC_CHECK_PROG_VER(SED, sed, --version,
07e51550 1088 [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
aefdff34
RM
1089 [3.0[2-9]*|3.[1-9]*|[4-9]*],
1090 SED=: aux_missing="$aux_missing sed")
0786794f
AM
1091AC_CHECK_PROG_VER(AWK, gawk, --version,
1092 [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
12086fb4 1093 [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
63bda0c1 1094
461a7b1e
RM
1095AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
1096AC_TRY_COMPILE([], [
b08b4218 1097#if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
461a7b1e
RM
1098#error insufficient compiler
1099#endif],
1100 [libc_cv_compiler_ok=yes],
1101 [libc_cv_compiler_ok=no])])
1102AS_IF([test $libc_cv_compiler_ok != yes],
1103 [critic_missing="$critic_missing compiler"])
1104
30b99d79 1105AC_CHECK_TOOL(NM, nm, false)
d30cf5bb 1106
8894bad3
AM
1107if test "x$maintainer" = "xyes"; then
1108 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
1109 case "x$AUTOCONF" in
1110 xno|x|x:) AUTOCONF=no ;;
1111 *)
1112 AC_CACHE_CHECK(dnl
1113 whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
1114 if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then
1115 libc_cv_autoconf_works=yes
1116 else
1117 libc_cv_autoconf_works=no
1118 fi])
1119 test $libc_cv_autoconf_works = yes || AUTOCONF=no
1120 ;;
1121 esac
1122 if test "x$AUTOCONF" = xno; then
1123 aux_missing="$aux_missing autoconf"
1124 fi
9e8ac24b
AM
1125else
1126 AUTOCONF=no
14519931 1127fi
1400de2e 1128
8ce8299f
SP
1129# Check for python3 if available, or else python.
1130AC_CHECK_PROGS(PYTHON_PROG, python3 python,no)
1131case "x$PYTHON_PROG" in
1132xno|x|x:) PYTHON_PROG=no ;;
1133*) ;;
1134esac
1135
1136if test "x$PYTHON_PROG" = xno; then
1137 aux_missing="$aux_missing python"
1138else
1139 PYTHON="$PYTHON_PROG -B"
1140 AC_SUBST(PYTHON)
1141fi
1142
32a448ed
RM
1143test -n "$critic_missing" && AC_MSG_ERROR([
1144*** These critical programs are missing or too old:$critic_missing
1145*** Check the INSTALL file for required versions.])
1146
4bca4c17 1147test -n "$aux_missing" && AC_MSG_WARN([
9c6fffc0 1148*** These auxiliary programs are missing or incompatible versions:$aux_missing
8ce8299f 1149*** some features or tests will be disabled.
63bda0c1 1150*** Check the INSTALL file for required versions.])
28f540f4 1151
dbe7a0f5
UD
1152# if using special system headers, find out the compiler's sekrit
1153# header directory and add that to the list. NOTE: Only does the right
1154# thing on a system that doesn't need fixincludes. (Not presently a problem.)
1155if test -n "$sysheaders"; then
67fbfa5c
RM
1156 SYSINCLUDES=-nostdinc
1157 for d in include include-fixed; do
1158 i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
1159 SYSINCLUDES="$SYSINCLUDES -isystem $i"
1160 done
1161 SYSINCLUDES="$SYSINCLUDES \
3d6ce23a 1162-isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
ef226fec 1163 if test -n "$CXX"; then
7872cfb0 1164 CXX_SYSINCLUDES=
67060746
AC
1165 for cxxheaders in `$CXX -v -S -x c++ /dev/null -o /dev/null 2>&1 \
1166 | sed -n -e '1,/#include/d' -e 's/^ \(\/.*\/[cg]++\)/\1/p'`; do
1167 test "x$cxxheaders" != x &&
1168 CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders"
1169 done
ef226fec 1170 fi
dbe7a0f5
UD
1171fi
1172AC_SUBST(SYSINCLUDES)
ef226fec 1173AC_SUBST(CXX_SYSINCLUDES)
dbe7a0f5 1174
fc3e1337
FW
1175# Obtain some C++ header file paths. This is used to make a local
1176# copy of those headers in Makerules.
1177if test -n "$CXX"; then
1178 find_cxx_header () {
1179 echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}"
1180 }
1181 CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
1182 CXX_CMATH_HEADER="$(find_cxx_header cmath)"
1183fi
1184AC_SUBST(CXX_CSTDLIB_HEADER)
1185AC_SUBST(CXX_CMATH_HEADER)
1186
3911660e
UD
1187# Test if LD_LIBRARY_PATH contains the notation for the current directory
1188# since this would lead to problems installing/building glibc.
1189# LD_LIBRARY_PATH contains the current directory if one of the following
1190# is true:
1191# - one of the terminals (":" and ";") is the first or last sign
1192# - two terminals occur directly after each other
1193# - the path contains an element with a dot in it
1194AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
1195changequote(,)dnl
1196case ${LD_LIBRARY_PATH} in
1197 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
b3a86ae1 1198 ld_library_path_setting="contains current directory"
3911660e
UD
1199 ;;
1200 *)
1201 ld_library_path_setting="ok"
1202 ;;
1203esac
1204changequote([,])dnl
1205AC_MSG_RESULT($ld_library_path_setting)
1206if test "$ld_library_path_setting" != "ok"; then
63bda0c1
UD
1207AC_MSG_ERROR([
1208*** LD_LIBRARY_PATH shouldn't contain the current directory when
1209*** building glibc. Please change the environment variable
1210*** and run configure again.])
3911660e 1211fi
8e31cf7e 1212
26f56c1c 1213AC_PATH_PROG(BASH_SHELL, bash, no)
84384f5b 1214
c0016081 1215AC_PATH_PROG(PERL, perl, no)
2fd5d029
RM
1216if test "$PERL" != no &&
1217 (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1218 PERL=no
ecb06196 1219fi
2f512715
AS
1220AC_PATH_PROG(INSTALL_INFO, install-info, no,
1221 $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
cc8623f1
WN
1222AC_CHECK_PROG_VER(BISON, bison, --version,
1223 [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
1224 [2.7*|[3-9].*|[1-9][0-9]*],
1225 BISON=no)
2de00372 1226
b8dc6a10 1227AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
9a70fcab 1228cat > conftest.s <<EOF
8c0c01db 1229.text
ae1025be 1230foo:
df2a0c93 1231.set glibc_conftest_frobozz,foo
7b8e0d49 1232.globl glibc_conftest_frobozz
e215c478 1233EOF
df2a0c93
RM
1234# The alpha-dec-osf1 assembler gives only a warning for `.set'
1235# (but it doesn't work), so we must do a linking check to be sure.
1236cat > conftest1.c <<\EOF
1237extern int glibc_conftest_frobozz;
640f0119 1238void _start() { glibc_conftest_frobozz = 1; }
df2a0c93
RM
1239EOF
1240if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
66a704c4 1241 -nostartfiles -nostdlib $no_ssp \
0b4ee387 1242 -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
e215c478
RM
1243 libc_cv_asm_set_directive=yes
1244else
1245 libc_cv_asm_set_directive=no
1246fi
65b3cbcb 1247rm -f conftest*])
e215c478
RM
1248if test $libc_cv_asm_set_directive = yes; then
1249 AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1250fi
1251
2a723ff6
JM
1252AC_CACHE_CHECK(linker support for protected data symbol,
1253 libc_cv_protected_data,
1254 [cat > conftest.c <<EOF
1255 int bar __attribute__ ((visibility ("protected"))) = 1;
83569fb8 1256EOF
2a723ff6 1257 libc_cv_protected_data=no
66a704c4 1258 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -o conftest.so); then
2a723ff6
JM
1259 cat > conftest.c <<EOF
1260 extern int bar;
1261 int main (void) { return bar; }
83569fb8 1262EOF
66a704c4 1263 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp conftest.c -o conftest conftest.so); then
2a723ff6 1264 libc_cv_protected_data=yes
83569fb8 1265 fi
2a723ff6
JM
1266 fi
1267 rm -f conftest.*
1268 ])
83569fb8
L
1269AC_SUBST(libc_cv_protected_data)
1270
a0da5fe1
UD
1271AC_CACHE_CHECK(for broken __attribute__((alias())),
1272 libc_cv_broken_alias_attribute,
1273 [cat > conftest.c <<EOF
1274 extern int foo (int x) __asm ("xyzzy");
1275 int bar (int x) { return x; }
1276 extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1277 extern int dfoo;
1278 extern __typeof (dfoo) dfoo __asm ("abccb");
1279 int dfoo = 1;
37ba7d66 1280EOF
a0da5fe1
UD
1281 libc_cv_broken_alias_attribute=yes
1282 if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1283 if grep 'xyzzy' conftest.s >/dev/null &&
1284 grep 'abccb' conftest.s >/dev/null; then
1285 libc_cv_broken_alias_attribute=no
1286 fi
1287 fi
1288 rm -f conftest.c conftest.s
1289 ])
1290if test $libc_cv_broken_alias_attribute = yes; then
1291 AC_MSG_ERROR(working alias attribute support required)
1292fi
1293
2a723ff6
JM
1294AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1295 libc_cv_have_sdata_section,
1296 [echo "int i;" > conftest.c
1297 libc_cv_have_sdata_section=no
1298 if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1299 | grep '\.sdata' >/dev/null; then
1300 libc_cv_have_sdata_section=yes
1301 fi
1302 rm -f conftest.c conftest.so
1303 ])
1304if test $libc_cv_have_sdata_section = yes; then
1305 AC_DEFINE(HAVE_SDATA_SECTION)
a0da5fe1 1306fi
0d01dace 1307
a0da5fe1
UD
1308AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
1309 libc_cv_ctors_header, [dnl
1310 libc_cv_ctors_header=yes
07037eeb
JM
1311 LIBC_TRY_LINK_STATIC([
1312__attribute__ ((constructor)) void ctor (void) { asm (""); }
1313__attribute__ ((destructor)) void dtor (void) { asm (""); }
113ddea4 1314],
a0da5fe1 1315 [dnl
113ddea4 1316 AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
92963737 1317 { gsub(/\@<:@ */, "@<:@") }
113ddea4
RM
1318 $2 == ".ctors" || $2 == ".dtors" {
1319 size = strtonum("0x" $6)
1320 align = strtonum("0x" $NF)
1321 seen@<:@$2@:>@ = 1
1322 stub@<:@$2@:>@ = size == align * 2
92963737 1323 }
113ddea4
RM
1324 END {
1325 ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1326 dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1327 exit ((ctors_ok && dtors_ok) ? 0 : 1)
1328 }
1329 '], [libc_cv_ctors_header=no])
1330 ], [dnl
1331 AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1332 ])
a0da5fe1
UD
1333])
1334if test $libc_cv_ctors_header = no; then
1335 AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1336fi
5241882c 1337
a0da5fe1
UD
1338AC_CACHE_CHECK(for libunwind-support in compiler,
1339 libc_cv_cc_with_libunwind, [
1340 cat > conftest.c <<EOF
cbdb12de
UD
1341int main (void) { return 0; }
1342EOF
a0da5fe1 1343 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
8175a253 1344 conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
a0da5fe1
UD
1345 libc_cv_cc_with_libunwind=yes
1346 else
1347 libc_cv_cc_with_libunwind=no
c776b3d7 1348 fi
a0da5fe1
UD
1349 rm -f conftest*])
1350AC_SUBST(libc_cv_cc_with_libunwind)
1351if test $libc_cv_cc_with_libunwind = yes; then
1352 AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1353fi
c776b3d7 1354
a0da5fe1
UD
1355ASFLAGS_config=
1356AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1357 libc_cv_as_noexecstack, [dnl
1358cat > conftest.c <<EOF
35915ec8
UD
1359void foo (void) { }
1360EOF
a0da5fe1
UD
1361if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1362 -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
8175a253 1363 && grep .note.GNU-stack conftest.s >/dev/null \
a0da5fe1
UD
1364 && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1365 -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1366then
1367 libc_cv_as_noexecstack=yes
1368else
1369 libc_cv_as_noexecstack=no
1370fi
1371rm -f conftest*])
1372if test $libc_cv_as_noexecstack = yes; then
1373 ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1374fi
1375AC_SUBST(ASFLAGS_config)
2abf9ff1 1376
a0da5fe1
UD
1377AC_CACHE_CHECK(for -z combreloc,
1378 libc_cv_z_combreloc, [dnl
1379cat > conftest.c <<EOF
d555194c
UD
1380extern int bar (int);
1381extern int mumble;
1382int foo (void) { return bar (mumble); }
a711b01d 1383EOF
a0da5fe1 1384if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
66a704c4 1385 -fPIC -shared $no_ssp -o conftest.so conftest.c
35cd3c97 1386 -nostdlib -nostartfiles
c2f55635 1387 -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
a0da5fe1 1388then
a711b01d
UD
1389dnl The following test is a bit weak. We must use a tool which can test
1390dnl cross-platform since the gcc used can be a cross compiler. Without
1391dnl introducing new options this is not easily doable. Instead use a tool
1392dnl which always is cross-platform: readelf. To detect whether -z combreloc
1393dnl look for a section named .rel.dyn.
a0da5fe1
UD
1394 if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
1395 libc_cv_z_combreloc=yes
fdde8349
UD
1396 else
1397 libc_cv_z_combreloc=no
a711b01d 1398 fi
a0da5fe1
UD
1399else
1400 libc_cv_z_combreloc=no
1401fi
1402rm -f conftest*])
1403if test "$libc_cv_z_combreloc" = yes; then
1404 AC_DEFINE(HAVE_Z_COMBRELOC)
1405fi
1406AC_SUBST(libc_cv_z_combreloc)
2abf9ff1 1407
6bfea974
L
1408LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
1409 [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
a0da5fe1 1410AC_SUBST(libc_cv_z_execstack)
c9c60884 1411
a0da5fe1 1412AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
4da0431d
JM
1413LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1414])
c9c60884 1415
a0da5fe1 1416AC_SUBST(libc_cv_fpie)
871b9158 1417
a0da5fe1
UD
1418AC_CACHE_CHECK(for --hash-style option,
1419 libc_cv_hashstyle, [dnl
1420cat > conftest.c <<EOF
871b9158
UD
1421int _start (void) { return 42; }
1422EOF
66a704c4 1423if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
a0da5fe1
UD
1424 -fPIC -shared -o conftest.so conftest.c
1425 -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1426then
1427 libc_cv_hashstyle=yes
1428else
1429 libc_cv_hashstyle=no
1430fi
1431rm -f conftest*])
1432AC_SUBST(libc_cv_hashstyle)
1433
1434# The linker's default -shared behavior is good enough if it
1435# does these things that our custom linker scripts ensure that
1436# all allocated NOTE sections come first.
1437if test "$use_default_link" = default; then
1438 AC_CACHE_CHECK([for sufficient default -shared layout],
1439 libc_cv_use_default_link, [dnl
1440 libc_cv_use_default_link=no
1441 cat > conftest.s <<\EOF
fd5e21c7
RM
1442 .section .note.a,"a",%note
1443 .balign 4
1444 .long 4,4,9
1445 .string "GNU"
1446 .string "foo"
1447 .section .note.b,"a",%note
1448 .balign 4
1449 .long 4,4,9
1450 .string "GNU"
1451 .string "bar"
1452EOF
a0da5fe1 1453 if AC_TRY_COMMAND([dnl
fd5e21c7
RM
1454 ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1455 ac_try=`$READELF -S conftest.so | sed -n \
1456 ['${x;p;}
1457 s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/
1458 t a
1459 b
1460 : a
1461 H']`
a0da5fe1
UD
1462 then
1463 libc_seen_a=no libc_seen_b=no
1464 set -- $ac_try
1465 while test $# -ge 2 -a "$1" = NOTE; do
1466 case "$2" in
1467 .note.a) libc_seen_a=yes ;;
1468 .note.b) libc_seen_b=yes ;;
1469 esac
1470 shift 2
1471 done
1472 case "$libc_seen_a$libc_seen_b" in
1473 yesyes)
1474 libc_cv_use_default_link=yes
1475 ;;
1476 *)
1477 echo >&AS_MESSAGE_LOG_FD "\
fd5e21c7
RM
1478$libc_seen_a$libc_seen_b from:
1479$ac_try"
a0da5fe1
UD
1480 ;;
1481 esac
fd5e21c7 1482 fi
a0da5fe1
UD
1483 rm -f conftest*])
1484 use_default_link=$libc_cv_use_default_link
fd26970f 1485fi
49803108 1486
89569c8b
L
1487AC_CACHE_CHECK(for GLOB_DAT reloc,
1488 libc_cv_has_glob_dat, [dnl
1489cat > conftest.c <<EOF
1490extern int mumble;
1491int foo (void) { return mumble; }
1492EOF
1493if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1494 -fPIC -shared -o conftest.so conftest.c
66a704c4 1495 -nostdlib -nostartfiles $no_ssp
89569c8b
L
1496 1>&AS_MESSAGE_LOG_FD])
1497then
1498dnl look for GLOB_DAT relocation.
1499 if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then
1500 libc_cv_has_glob_dat=yes
1501 else
1502 libc_cv_has_glob_dat=no
1503 fi
1504else
1505 libc_cv_has_glob_dat=no
1506fi
1507rm -f conftest*])
1508AC_SUBST(libc_cv_has_glob_dat)
1509
5c550700
RM
1510AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
1511if libc_cv_output_format=`
66a704c4 1512${CC-cc} -nostartfiles -nostdlib $no_ssp -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
5c550700
RM
1513then
1514 :
1515else
1516 libc_cv_output_format=
1517fi
1518test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1519AC_SUBST(libc_cv_output_format)
1520
22dca1ea 1521AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
49803108
AJ
1522cat > conftest.c <<EOF
1523int foo;
1524EOF
22dca1ea 1525if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
49803108
AJ
1526 conftest.c 1>&AS_MESSAGE_LOG_FD])
1527then
18e2ac6d 1528 libc_cv_fno_toplevel_reorder=yes
49803108 1529else
18e2ac6d 1530 libc_cv_fno_toplevel_reorder=no
49803108
AJ
1531fi
1532rm -f conftest*])
18e2ac6d 1533if test $libc_cv_fno_toplevel_reorder = yes; then
22dca1ea 1534 fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
18e2ac6d 1535else
49803108
AJ
1536 fno_unit_at_a_time=-fno-unit-at-a-time
1537fi
1538AC_SUBST(fno_unit_at_a_time)
fd26970f 1539
61655555
L
1540AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
1541[dnl
1542cat > conftest.c <<EOF
1543__thread int i;
1544void foo (void)
1545{
1546 i = 10;
1547}
1548EOF
1549if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
1550 conftest.c 1>&AS_MESSAGE_LOG_FD])
1551then
1552 libc_cv_mtls_dialect_gnu2=yes
1553else
1554 libc_cv_mtls_dialect_gnu2=no
1555fi
1556rm -f conftest*])
1557AC_SUBST(libc_cv_mtls_dialect_gnu2)
1558LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
1559
a0da5fe1
UD
1560AC_CACHE_CHECK(whether cc puts quotes around section names,
1561 libc_cv_have_section_quotes,
1562 [cat > conftest.c <<EOF
1563 static const int foo
1564 __attribute__ ((section ("bar"))) = 1;
e26dd47f 1565EOF
a0da5fe1
UD
1566 if ${CC-cc} -S conftest.c -o conftest.s; then
1567 if grep '\.section.*"bar"' conftest.s >/dev/null; then
1568 libc_cv_have_section_quotes=yes
e26dd47f 1569 else
a0da5fe1 1570 libc_cv_have_section_quotes=no
e26dd47f 1571 fi
a0da5fe1
UD
1572 else
1573 libc_cv_have_section_quotes=unknown
1574 fi
1575 rm -f conftest.{c,s}
1576 ])
1577if test $libc_cv_have_section_quotes = yes; then
1578 AC_DEFINE(HAVE_SECTION_QUOTES)
9a97d1f7
UD
1579fi
1580
d555194c
UD
1581AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1582cat > conftest.c <<\EOF
1583void zero (void *x)
1584{
a52d1562 1585 __builtin_memset (x, 0, 1000);
d555194c
UD
1586}
1587EOF
1588dnl
1589if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | fgrep "memset" > /dev/null]);
1590then
1591 libc_cv_gcc_builtin_memset=no
1592else
1593 libc_cv_gcc_builtin_memset=yes
1594fi
1595rm -f conftest* ])
1596if test "$libc_cv_gcc_builtin_memset" = yes ; then
1597 AC_DEFINE(HAVE_BUILTIN_MEMSET)
1598fi
1599
85dd1003
UD
1600AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1601cat > conftest.c <<\EOF
1602extern char *strstr (const char *, const char *) __asm ("my_strstr");
1603char *foo (const char *a, const char *b)
1604{
1605 return __builtin_strstr (a, b);
1606}
1607EOF
1608dnl
1609if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | fgrep "my_strstr" > /dev/null]);
1610then
1611 libc_cv_gcc_builtin_redirection=yes
1612else
1613 libc_cv_gcc_builtin_redirection=no
1614fi
1615rm -f conftest* ])
3ce1f295
UD
1616if test "$libc_cv_gcc_builtin_redirection" = no; then
1617 AC_MSG_ERROR([support for the symbol redirection needed])
85dd1003
UD
1618fi
1619
7998fa78
AS
1620dnl Determine how to disable generation of FMA instructions.
1621AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1622 libc_cv_cc_nofma, [dnl
1623libc_cv_cc_nofma=
1624for opt in -ffp-contract=off -mno-fused-madd; do
1625 LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1626done])
bef0b507 1627AC_SUBST(libc_cv_cc_nofma)
7998fa78 1628
2cf9ad57
RM
1629if test -n "$submachine"; then
1630 AC_CACHE_CHECK([for compiler option for CPU variant],
f7d82dc9 1631 libc_cv_cc_submachine, [dnl
2cf9ad57
RM
1632 libc_cv_cc_submachine=no
1633 for opt in "-march=$submachine" "-mcpu=$submachine"; do
40b601fb 1634 LIBC_TRY_CC_OPTION([$opt], [
2cf9ad57 1635 libc_cv_cc_submachine="$opt"
40b601fb 1636 break], [])
2cf9ad57
RM
1637 done])
1638 if test "x$libc_cv_cc_submachine" = xno; then
1639 AC_MSG_ERROR([${CC-cc} does not support $submachine])
1640 fi
1641fi
1642AC_SUBST(libc_cv_cc_submachine)
1643
85c2e611
AZ
1644AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
1645__attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
1646cat > conftest.c <<EOF
1647void
1648__attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1649foo (void) {}
1650EOF
1651libc_cv_cc_loop_to_function=no
1652if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1653then
1654 libc_cv_cc_loop_to_function=yes
1655fi
1656rm -f conftest*])
1657if test $libc_cv_cc_loop_to_function = yes; then
1658 AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1659fi
1660AC_SUBST(libc_cv_cc_loop_to_function)
1661
c8f3e6db
UD
1662dnl Check whether we have the gd library available.
1663AC_MSG_CHECKING(for libgd)
6dab8688
UD
1664if test "$with_gd" != "no"; then
1665 old_CFLAGS="$CFLAGS"
1666 CFLAGS="$CFLAGS $libgd_include"
1667 old_LDFLAGS="$LDFLAGS"
1668 LDFLAGS="$LDFLAGS $libgd_ldflags"
1669 old_LIBS="$LIBS"
1670 LIBS="$LIBS -lgd -lpng -lz -lm"
1671 AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
1672 CFLAGS="$old_CFLAGS"
1673 LDFLAGS="$old_LDFLAGS"
1674 LIBS="$old_LIBS"
1675else
1676 LIBGD=no
1677fi
c8f3e6db
UD
1678AC_MSG_RESULT($LIBGD)
1679AC_SUBST(LIBGD)
3d558f4e 1680
2fff3d93
UD
1681# SELinux detection
1682if test x$with_selinux = xno ; then
1683 have_selinux=no;
1684else
1685 # See if we have the SELinux library
1686 AC_CHECK_LIB(selinux, is_selinux_enabled,
1687 have_selinux=yes, have_selinux=no)
49155d51 1688 if test x$with_selinux = xyes ; then
2fff3d93 1689 if test x$have_selinux = xno ; then
0699f766 1690 AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found])
2fff3d93
UD
1691 fi
1692 fi
1693fi
1694# Check if we're building with SELinux support.
1695if test "x$have_selinux" = xyes; then
943db9eb 1696 AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
ec23b9be
UD
1697
1698 # See if we have the libaudit library
943db9eb 1699 AC_CHECK_LIB(audit, audit_log_user_avc_message,
77e8bddf 1700 have_libaudit=yes, have_libaudit=no)
ec23b9be 1701 if test "x$have_libaudit" = xyes; then
943db9eb 1702 AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
ec23b9be
UD
1703 fi
1704 AC_SUBST(have_libaudit)
1f063dca
UD
1705
1706 # See if we have the libcap library
1707 AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
1708 if test "x$have_libcap" = xyes; then
1709 AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
1710 fi
1711 AC_SUBST(have_libcap)
2fff3d93
UD
1712fi
1713AC_SUBST(have_selinux)
1714
61653dfb
RM
1715CPPUNDEFS=
1716dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
1717dnl Since we are building the implementations of the fortified functions here,
1718dnl having the macro defined interacts very badly.
1719AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
1720[AC_TRY_COMPILE([], [
1721#ifdef _FORTIFY_SOURCE
1722# error bogon
1723#endif],
1724 [libc_cv_predef_fortify_source=no],
1725 [libc_cv_predef_fortify_source=yes])])
1726if test $libc_cv_predef_fortify_source = yes; then
1727 CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
1728fi
1729AC_SUBST(CPPUNDEFS)
1730
61b1ef6e
MF
1731# Some linkers on some architectures support __ehdr_start but with
1732# bugs. Make sure usage of it does not create relocations in the
1733# output (as the linker should resolve them all for us).
1734AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
44c4e5d5
RM
1735 libc_cv_ehdr_start, [
1736old_CFLAGS="$CFLAGS"
1737old_LDFLAGS="$LDFLAGS"
1738old_LIBS="$LIBS"
1739CFLAGS="$CFLAGS -fPIC"
66a704c4 1740LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp"
44c4e5d5
RM
1741LIBS=
1742AC_LINK_IFELSE([AC_LANG_SOURCE([
61b1ef6e
MF
1743typedef struct {
1744 char foo;
1745 long val;
1746} Ehdr;
1747extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
1748long ehdr (void) { return __ehdr_start.val; }
44c4e5d5 1749])],
61b1ef6e
MF
1750 [if $READELF -r conftest | fgrep __ehdr_start >/dev/null; then
1751 libc_cv_ehdr_start=broken
1752 else
1753 libc_cv_ehdr_start=yes
1754 fi], [libc_cv_ehdr_start=no])
44c4e5d5
RM
1755CFLAGS="$old_CFLAGS"
1756LDFLAGS="$old_LDFLAGS"
1757LIBS="$old_LIBS"
1758])
61b1ef6e 1759if test "$libc_cv_ehdr_start" = yes; then
44c4e5d5 1760 AC_DEFINE([HAVE_EHDR_START])
61b1ef6e
MF
1761elif test "$libc_cv_ehdr_start" = broken; then
1762 AC_MSG_WARN([linker is broken -- you should upgrade])
9fe7e787
RM
1763fi
1764
1765AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
1766 libc_cv_builtin_trap, [dnl
1767libc_cv_builtin_trap=no
1768AC_TRY_COMPILE([], [__builtin_trap ()], [
1769libc_undefs=`$NM -u conftest.o |
1770 LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1771 2>&AS_MESSAGE_LOG_FD` || {
1772 AC_MSG_ERROR([confusing output from $NM -u])
1773}
1774echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1775if test -z "$libc_undefs"; then
1776 libc_cv_builtin_trap=yes
1777fi])])
1778if test $libc_cv_builtin_trap = yes; then
1779 AC_DEFINE([HAVE_BUILTIN_TRAP])
44c4e5d5
RM
1780fi
1781
99e1dc0a
FW
1782dnl C++ feature tests.
1783AC_LANG_PUSH([C++])
1784
1785AC_CACHE_CHECK([whether the C++ compiler supports thread_local],
1786 libc_cv_cxx_thread_local, [
1787old_CXXFLAGS="$CXXFLAGS"
1788CXXFLAGS="$CXXFLAGS -std=gnu++11"
1789AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1790#include <thread>
1791
1792// Compiler support.
1793struct S
1794{
1795 S ();
1796 ~S ();
1797};
1798thread_local S s;
1799S * get () { return &s; }
1800
1801// libstdc++ support.
1802#ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1803#error __cxa_thread_atexit_impl not supported
1804#endif
1805])],
1806 [libc_cv_cxx_thread_local=yes],
1807 [libc_cv_cxx_thread_local=no])
1808CXXFLAGS="$old_CXXFLAGS"
1809])
1810AC_SUBST(libc_cv_cxx_thread_local)
1811
1812AC_LANG_POP([C++])
1813dnl End of C++ feature tests.
1814
c224a18a
RM
1815### End of automated tests.
1816### Now run sysdeps configure fragments.
1817
cb343854 1818# They also can set these variables.
591e1ffb 1819use_ldconfig=no
cb343854 1820ldd_rewrite_script=no
77259608 1821libc_cv_sysconfdir=$sysconfdir
4248b1b1 1822libc_cv_localstatedir=$localstatedir
74bd2300 1823libc_cv_gcc_unwind_find_fde=no
e2fd3cbe 1824libc_cv_idn=no
cb343854 1825
28f540f4 1826# Iterate over all the sysdep directories we will use, running their
09055553 1827# configure fragments.
28f540f4 1828for dir in $sysnames; do
57ba7bb4
UD
1829 case $dir in
1830 /*) dest=$dir ;;
1831 *) dest=$srcdir/$dir ;;
1832 esac
1833 if test -r $dest/configure; then
d1149385 1834 AC_MSG_RESULT(running configure fragment for $dir)
57ba7bb4 1835 . $dest/configure
28f540f4 1836 fi
28f540f4
RM
1837done
1838
5695d46f
AS
1839if test x"$build_mathvec" = xnotset; then
1840 build_mathvec=no
1841fi
1842LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1843
7ffa9423
AZ
1844AC_SUBST(libc_extra_cflags)
1845AC_SUBST(libc_extra_cppflags)
1846
74bd2300
UD
1847if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1848 AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1849fi
1850AC_SUBST(libc_cv_gcc_unwind_find_fde)
1851
6e6249d0
RM
1852# A sysdeps configure fragment can reset this if IFUNC is not actually
1853# usable even though the assembler knows how to generate the symbol type.
1854if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
1855 AC_DEFINE(HAVE_IFUNC)
1856fi
1857
022dfdce
SL
1858if test x"$libc_cv_gcc_indirect_function" = xyes; then
1859 AC_DEFINE(HAVE_GCC_IFUNC)
1860fi
1861
3cc3ef96
RM
1862# This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1863# configure fragment can override the value to prevent this AC_DEFINE.
1864AC_SUBST(use_nscd)
1865if test "x$use_nscd" != xno; then
1866 AC_DEFINE([USE_NSCD])
1867fi
c53d909c
RM
1868if test "x$build_nscd" = xdefault; then
1869 build_nscd=$use_nscd
1870fi
3cc3ef96 1871
84384f5b 1872AC_SUBST(libc_cv_slibdir)
aaa8cb4b 1873AC_SUBST(libc_cv_rtlddir)
90fe682d 1874AC_SUBST(libc_cv_complocaledir)
77259608 1875AC_SUBST(libc_cv_sysconfdir)
4248b1b1 1876AC_SUBST(libc_cv_localstatedir)
1ef32c3d
UD
1877AC_SUBST(libc_cv_rootsbindir)
1878
f57f8055
RM
1879if test x$use_ldconfig = xyes; then
1880 AC_DEFINE(USE_LDCONFIG)
1881fi
591e1ffb 1882AC_SUBST(use_ldconfig)
cb343854 1883AC_SUBST(ldd_rewrite_script)
84384f5b 1884
650425ce 1885AC_SUBST(static)
ff3d7ed3 1886AC_SUBST(shared)
a334319f 1887
ff886b82
UD
1888AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1889[libc_cv_pic_default=yes
cc3fa755 1890cat > conftest.c <<EOF
9756dfe1 1891#if defined __PIC__ || defined __pic__ || defined PIC || defined pic
cc3fa755
UD
1892# error PIC is default.
1893#endif
1894EOF
0b4ee387 1895if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
ff886b82 1896 libc_cv_pic_default=no
cc3fa755
UD
1897fi
1898rm -f conftest.*])
ff886b82 1899AC_SUBST(libc_cv_pic_default)
cc3fa755 1900
cc08749b
L
1901AC_CACHE_CHECK([whether -fPIE is default], libc_cv_pie_default,
1902[libc_cv_pie_default=yes
1903cat > conftest.c <<EOF
1904#if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1905# error PIE is default.
1906#endif
1907EOF
1908if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1909 libc_cv_pie_default=no
1910fi
1911rm -f conftest.*])
1912AC_SUBST(libc_cv_pie_default)
1913
ff3d7ed3 1914AC_SUBST(profile)
5107cf1d 1915AC_SUBST(static_nss)
ff3d7ed3 1916
edf5b2d7
UD
1917AC_SUBST(DEFINES)
1918
cb8a6dbd 1919dnl See sysdeps/mach/configure.ac for this variable.
61c83c3f
RM
1920AC_SUBST(mach_interface_list)
1921
ee74a442
UD
1922VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1923RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
df4ef2ab 1924AC_SUBST(VERSION)
ee74a442 1925AC_SUBST(RELEASE)
df4ef2ab 1926
728e272a 1927AC_CONFIG_FILES([config.make Makefile])
c118d634 1928AC_CONFIG_COMMANDS([default],[[
737547be
UD
1929case $CONFIG_FILES in *config.make*)
1930echo "$config_vars" >> config.make;;
1931esac
c118d634
RM
1932test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1933AC_OUTPUT