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