]> git.ipfire.org Git - thirdparty/glibc.git/blame - configure.ac
libio: Implement vtable verification [BZ #20191]
[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
0cae3f4b 637if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
84b9230c
MF
638 if test x"$multi_arch" = xyes; then
639 AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
640 else
641 multi_arch=no
642 fi
643fi
6270516e 644multi_arch_d=
84b9230c
MF
645if test x"$multi_arch" != xno; then
646 multi_arch_d=/multiarch
647fi
648
f0523145 649# Compute the list of sysdep directories for this configuration.
f332db02 650# This can take a while to compute.
f0523145 651sysdep_dir=$srcdir/sysdeps
f332db02 652AC_MSG_CHECKING(sysdep dirs)
f0523145
RM
653dnl We need to use [ and ] for other purposes for a while now.
654changequote(,)dnl
28f540f4
RM
655# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
656os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
657
b22d21b3 658test "x$base_os" != x || case "$os" in
28f540f4
RM
659gnu*)
660 base_os=mach/hurd ;;
2ce4f015 661linux*)
28f540f4 662 base_os=unix/sysv ;;
28f540f4
RM
663esac
664
665# For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
666tail=$os
667ostry=$os
668while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
669 ostry="$ostry /$o"
670 tail=$o
75914335 671done
28f540f4
RM
672o=`echo $tail | sed 's/[0-9]*$//'`
673if test $o != $tail; then
674 ostry="$ostry /$o"
675fi
ec4b0518
UD
676# For linux-gnu, try linux-gnu, then linux.
677o=`echo $tail | sed 's/-.*$//'`
678if test $o != $tail; then
679 ostry="$ostry /$o"
680fi
28f540f4
RM
681
682# For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
683base=
684tail=$base_os
685while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
686 set $b
687 base="$base /$1"
688 tail="$2"
689done
690
ae6b8730 691# For sparc/sparc32, try sparc/sparc32 and then sparc.
28f540f4 692mach=
2ceaa76a 693tail=$machine${submachine:+/$submachine}
28f540f4
RM
694while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
695 set $m
10ceac89
RM
696 # Prepend the machine's FPU directory unless --without-fp.
697 if test "$with_fp" = yes; then
6270516e 698 maybe_fpu=/fpu
f4b07664 699 else
6270516e 700 maybe_fpu=/nofpu
82d00cab 701 fi
6270516e
RM
702 # For each machine term, try it with and then without /multiarch.
703 for try_fpu in $maybe_fpu ''; do
704 for try_multi in $multi_arch_d ''; do
705 mach="$mach /$1$try_fpu$try_multi"
706 done
707 done
28f540f4
RM
708 tail="$2"
709done
710
711dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
712changequote([,])dnl
713
714# Find what sysdep directories exist.
e0a3ed4f 715sysnames_add_ons=
28f540f4 716sysnames=
4b69abad
RM
717for b in $base ''; do
718 for m0 in $mach ''; do
719 for v in /$vendor ''; do
720 test "$v" = / && continue
721 for o in /$ostry ''; do
722 test "$o" = / && continue
6270516e 723 for m in $mach ''; do
4b69abad 724 for d in $add_ons_pfx ''; do
8f73811b 725 for a in $add_ons_sfx ''; do
1c9f1a02
RM
726 try_suffix="$m0$b$v$o$m"
727 if test -n "$try_suffix"; then
77e8bddf
AS
728 try_srcdir="${srcdir}/"
729 case "$d" in
e0a3ed4f
RM
730 /*) try_srcdir= ;;
731 esac
1c9f1a02 732 try="${d}sysdeps$try_suffix$a"
8f73811b
RM
733 test -n "$enable_debug_configure" &&
734 echo "$0 [DEBUG]: try $try" >&2
e0a3ed4f 735 if test -d "$try_srcdir$try"; then
8f73811b
RM
736 sysnames="$sysnames $try"
737 { test -n "$o" || test -n "$b"; } && os_used=t
738 { test -n "$m" || test -n "$m0"; } && machine_used=t
4b69abad
RM
739 case x${m0:-$m} in
740 x*/$submachine) submachine_used=t ;;
741 esac
e0a3ed4f
RM
742 if test -n "$d"; then
743 case "$sysnames_add_ons" in
744 *" $d "*) ;;
745 *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
746 esac
747 fi
8f73811b 748 fi
57ba7bb4 749 fi
8f73811b 750 done
57ba7bb4 751 done
28f540f4
RM
752 done
753 done
754 done
755 done
4b69abad 756done
28f540f4 757
6f89d2f3
L
758# If the assembler supports gnu_indirect_function symbol type and the
759# architecture supports multi-arch, we enable multi-arch by default.
84b9230c
MF
760case $sysnames_add_ons$sysnames in
761*"$multi_arch_d"*)
762 ;;
763*)
77e8bddf 764 test x"$multi_arch" = xdefault && multi_arch=no
84b9230c
MF
765 ;;
766esac
767if test x"$multi_arch" != xno; then
6f89d2f3
L
768 AC_DEFINE(USE_MULTIARCH)
769fi
770AC_SUBST(multi_arch)
771
28f540f4
RM
772if test -z "$os_used" && test "$os" != none; then
773 AC_MSG_ERROR(Operating system $os is not supported.)
774fi
775if test -z "$machine_used" && test "$machine" != none; then
776 AC_MSG_ERROR(The $machine is not supported.)
777fi
2ceaa76a
RM
778if test -z "$submachine_used" && test -n "$submachine"; then
779 AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
780fi
781AC_SUBST(submachine)
28f540f4
RM
782
783# We have now validated the configuration.
784
28f540f4
RM
785# Expand the list of system names into a full list of directories
786# from each element's parent name and Implies file (if present).
787set $sysnames
e50ec9f9 788names=
28f540f4
RM
789while test $# -gt 0; do
790 name=$1
791 shift
792
e50ec9f9 793 case " $names " in *" $name "*)
f332db02
RM
794 # Already in the list.
795 continue
e50ec9f9 796 esac
f332db02
RM
797
798 # Report each name as we discover it, so there is no long pause in output.
0b4ee387 799 echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
f332db02 800
57ba7bb4
UD
801 name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
802
803 case $name in
804 /*) xsrcdir= ;;
805 *) xsrcdir=$srcdir/ ;;
806 esac
807 test -n "$enable_debug_configure" &&
808 echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
809
ba75122d
RM
810 for implies_file in Implies Implies-before Implies-after; do
811 implies_type=`echo $implies_file | sed s/-/_/`
812 eval ${implies_type}=
813 if test -f $xsrcdir$name/$implies_file; then
814 # Collect more names from the `Implies' file (removing comments).
815 implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
816 for x in $implied_candidate; do
817 found=no
818 if test -d $xsrcdir$name_base/$x; then
819 eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
636ccfc8 820 found=yes
ba75122d
RM
821 fi
822 for d in $add_ons_pfx ''; do
823 try="${d}sysdeps/$x"
824 case $d in
825 /*) try_srcdir= ;;
826 *) try_srcdir=$srcdir/ ;;
e0a3ed4f 827 esac
ba75122d
RM
828 test -n "$enable_debug_configure" &&
829 echo "[DEBUG]: $name $implies_file $x try($d) {$try_srcdir}$try" >&2
830 if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
831 then
832 eval "${implies_type}=\"\$${implies_type} \$try\""
833 found=yes
834 case "$sysnames_add_ons" in
835 *" $d "*) ;;
836 *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
837 esac
838 fi
839 done
840 if test $found = no; then
841 AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
636ccfc8
UD
842 fi
843 done
ba75122d
RM
844 fi
845 done
28f540f4
RM
846
847 # Add NAME to the list of names.
848 names="$names $name"
849
850 # Find the parent of NAME, using the empty string if it has none.
851changequote(,)dnl
57ba7bb4 852 parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
28f540f4
RM
853changequote([,])dnl
854
ba75122d
RM
855 test -n "$enable_debug_configure" &&
856 echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
57633811 857Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
ba75122d 858
28f540f4
RM
859 # Add the names implied by NAME, and NAME's parent (if it has one), to
860 # the list of names to be processed (the argument list). We prepend the
861 # implied names to the list and append the parent. We want implied
862 # directories to come before further directories inferred from the
863 # configuration components; this ensures that for sysv4, unix/common
864 # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
865 # after sysv4).
ba75122d 866 sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
28f540f4
RM
867 test -n "$sysnames" && set $sysnames
868done
869
870# Add the default directories.
83ef87ba 871default_sysnames="sysdeps/generic"
ecdc196c 872sysnames="$names $default_sysnames"
f332db02
RM
873AC_SUBST(sysnames)
874# The other names were emitted during the scan.
ecdc196c 875AC_MSG_RESULT($default_sysnames)
28f540f4 876
e0a3ed4f
RM
877# Collect the list of add-ons that supply partial sysdeps trees.
878sysdeps_add_ons=
879for add_on in $add_ons; do
880 case "$add_on" in
881 /*) xsrcdir= ;;
882 *) xsrcdir="$srcdir/" ;;
883 esac
884
885 test -d "$xsrcdir$add_on/sysdeps" || {
886 case "$configured_add_ons " in
887 *" $add_on "*) ;;
888 *|'')
889 AC_MSG_ERROR(add-on $add_on has no configure fragment or sysdeps tree)
890 ;;
891 esac
892 continue
893 }
894
895 sysdeps_add_ons="$sysdeps_add_ons $add_on"
896 case "$sysnames_add_ons" in
897 *" $add_on/ "*) ;;
898 *|'')
899 AC_MSG_WARN(add-on $add_on contributed no sysdeps directories)
900 continue ;;
901 esac
902
903 found=no
904 for d in $sysnames; do
905 case "$d" in
906 $add_on/sysdeps/*) ;;
907 *) continue ;;
908 esac
909 (cd "$xsrcdir$d" && for f in *[[!~]]; do
910 case "$f" in
911 sys|bits)
912 for ff in $f/*.h; do
913 test -d "$ff" || { test -e "$ff" && exit 88; }
914 done
915 ;;
916 *)
77e8bddf 917 test -d "$f" || { test -e "$f" && exit 88; }
e0a3ed4f
RM
918 ;;
919 esac
920 done)
921 if test $? -eq 88; then
922 found=yes
923 break
924 fi
925 done
926 if test $found = no; then
927 AC_MSG_WARN(add-on $add_on contributed no useful sysdeps directories)
928 fi
929done
930AC_SUBST(sysdeps_add_ons)
931
f332db02
RM
932
933### Locate tools.
28f540f4 934
28f540f4 935AC_PROG_INSTALL
2b80a372 936if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
28f540f4 937 # The makefiles need to use a different form to find it in $srcdir.
2b80a372 938 INSTALL='\$(..)./scripts/install-sh -c'
28f540f4 939fi
0e3426bb 940AC_PROG_LN_S
ae828bc6 941
4baa087a 942LIBC_PROG_BINUTILS
4baa087a 943
bd805071 944# Accept binutils 2.22 or newer.
4baa087a
RM
945AC_CHECK_PROG_VER(AS, $AS, --version,
946 [GNU assembler.* \([0-9]*\.[0-9.]*\)],
bd805071
AS
947 [2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
948 AS=: critic_missing="$critic_missing as")
4baa087a
RM
949AC_CHECK_PROG_VER(LD, $LD, --version,
950 [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
bd805071
AS
951 [2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
952 LD=: critic_missing="$critic_missing ld")
4baa087a 953
63bda0c1 954# These programs are version sensitive.
3a12e572 955AC_CHECK_TOOL_PREFIX
22e65f8f 956AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
8fc1e2ca 957 [GNU Make[^0-9]*\([0-9][0-9.]*\)],
28d708c4 958 [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
63bda0c1 959
22e65f8f 960AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
bdd421cc 961 [GNU gettext.* \([0-9]*\.[0-9.]*\)],
aefdff34
RM
962 [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
963 MSGFMT=: aux_missing="$aux_missing msgfmt")
63bda0c1 964AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
8b7fb588 965 [GNU texinfo.* \([0-9][0-9.]*\)],
3a12c70f 966 [4.[7-9]*|4.[1-9][0-9]*|[5-9].*],
aefdff34 967 MAKEINFO=: aux_missing="$aux_missing makeinfo")
d6a97a28 968AC_CHECK_PROG_VER(SED, sed, --version,
07e51550 969 [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
aefdff34
RM
970 [3.0[2-9]*|3.[1-9]*|[4-9]*],
971 SED=: aux_missing="$aux_missing sed")
0786794f
AM
972AC_CHECK_PROG_VER(AWK, gawk, --version,
973 [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
12086fb4 974 [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
63bda0c1 975
461a7b1e
RM
976AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
977AC_TRY_COMPILE([], [
b08b4218 978#if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
461a7b1e
RM
979#error insufficient compiler
980#endif],
981 [libc_cv_compiler_ok=yes],
982 [libc_cv_compiler_ok=no])])
983AS_IF([test $libc_cv_compiler_ok != yes],
984 [critic_missing="$critic_missing compiler"])
985
30b99d79 986AC_CHECK_TOOL(NM, nm, false)
d30cf5bb 987
8894bad3
AM
988if test "x$maintainer" = "xyes"; then
989 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
990 case "x$AUTOCONF" in
991 xno|x|x:) AUTOCONF=no ;;
992 *)
993 AC_CACHE_CHECK(dnl
994 whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
995 if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then
996 libc_cv_autoconf_works=yes
997 else
998 libc_cv_autoconf_works=no
999 fi])
1000 test $libc_cv_autoconf_works = yes || AUTOCONF=no
1001 ;;
1002 esac
1003 if test "x$AUTOCONF" = xno; then
1004 aux_missing="$aux_missing autoconf"
1005 fi
9e8ac24b
AM
1006else
1007 AUTOCONF=no
14519931 1008fi
1400de2e 1009
32a448ed
RM
1010test -n "$critic_missing" && AC_MSG_ERROR([
1011*** These critical programs are missing or too old:$critic_missing
1012*** Check the INSTALL file for required versions.])
1013
4bca4c17 1014test -n "$aux_missing" && AC_MSG_WARN([
9c6fffc0 1015*** These auxiliary programs are missing or incompatible versions:$aux_missing
63bda0c1
UD
1016*** some features will be disabled.
1017*** Check the INSTALL file for required versions.])
28f540f4 1018
dbe7a0f5
UD
1019# if using special system headers, find out the compiler's sekrit
1020# header directory and add that to the list. NOTE: Only does the right
1021# thing on a system that doesn't need fixincludes. (Not presently a problem.)
1022if test -n "$sysheaders"; then
67fbfa5c
RM
1023 SYSINCLUDES=-nostdinc
1024 for d in include include-fixed; do
1025 i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
1026 SYSINCLUDES="$SYSINCLUDES -isystem $i"
1027 done
1028 SYSINCLUDES="$SYSINCLUDES \
3d6ce23a 1029-isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
ef226fec 1030 if test -n "$CXX"; then
7872cfb0 1031 CXX_SYSINCLUDES=
67060746
AC
1032 for cxxheaders in `$CXX -v -S -x c++ /dev/null -o /dev/null 2>&1 \
1033 | sed -n -e '1,/#include/d' -e 's/^ \(\/.*\/[cg]++\)/\1/p'`; do
1034 test "x$cxxheaders" != x &&
1035 CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders"
1036 done
ef226fec 1037 fi
dbe7a0f5
UD
1038fi
1039AC_SUBST(SYSINCLUDES)
ef226fec 1040AC_SUBST(CXX_SYSINCLUDES)
dbe7a0f5 1041
3911660e
UD
1042# Test if LD_LIBRARY_PATH contains the notation for the current directory
1043# since this would lead to problems installing/building glibc.
1044# LD_LIBRARY_PATH contains the current directory if one of the following
1045# is true:
1046# - one of the terminals (":" and ";") is the first or last sign
1047# - two terminals occur directly after each other
1048# - the path contains an element with a dot in it
1049AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
1050changequote(,)dnl
1051case ${LD_LIBRARY_PATH} in
1052 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
b3a86ae1 1053 ld_library_path_setting="contains current directory"
3911660e
UD
1054 ;;
1055 *)
1056 ld_library_path_setting="ok"
1057 ;;
1058esac
1059changequote([,])dnl
1060AC_MSG_RESULT($ld_library_path_setting)
1061if test "$ld_library_path_setting" != "ok"; then
63bda0c1
UD
1062AC_MSG_ERROR([
1063*** LD_LIBRARY_PATH shouldn't contain the current directory when
1064*** building glibc. Please change the environment variable
1065*** and run configure again.])
3911660e 1066fi
8e31cf7e 1067
26f56c1c 1068AC_PATH_PROG(BASH_SHELL, bash, no)
84384f5b 1069
c0016081 1070AC_PATH_PROG(PERL, perl, no)
2fd5d029
RM
1071if test "$PERL" != no &&
1072 (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1073 PERL=no
ecb06196 1074fi
2f512715
AS
1075AC_PATH_PROG(INSTALL_INFO, install-info, no,
1076 $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
cc8623f1
WN
1077AC_CHECK_PROG_VER(BISON, bison, --version,
1078 [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
1079 [2.7*|[3-9].*|[1-9][0-9]*],
1080 BISON=no)
2de00372 1081
b8dc6a10 1082AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
9a70fcab 1083cat > conftest.s <<EOF
8c0c01db 1084.text
ae1025be 1085foo:
df2a0c93 1086.set glibc_conftest_frobozz,foo
7b8e0d49 1087.globl glibc_conftest_frobozz
e215c478 1088EOF
df2a0c93
RM
1089# The alpha-dec-osf1 assembler gives only a warning for `.set'
1090# (but it doesn't work), so we must do a linking check to be sure.
1091cat > conftest1.c <<\EOF
1092extern int glibc_conftest_frobozz;
640f0119 1093void _start() { glibc_conftest_frobozz = 1; }
df2a0c93
RM
1094EOF
1095if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
640f0119 1096 -nostartfiles -nostdlib \
0b4ee387 1097 -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
e215c478
RM
1098 libc_cv_asm_set_directive=yes
1099else
1100 libc_cv_asm_set_directive=no
1101fi
65b3cbcb 1102rm -f conftest*])
e215c478
RM
1103if test $libc_cv_asm_set_directive = yes; then
1104 AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1105fi
1106
2a723ff6
JM
1107AC_CACHE_CHECK(linker support for protected data symbol,
1108 libc_cv_protected_data,
1109 [cat > conftest.c <<EOF
1110 int bar __attribute__ ((visibility ("protected"))) = 1;
83569fb8 1111EOF
2a723ff6
JM
1112 libc_cv_protected_data=no
1113 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles -fPIC -shared conftest.c -o conftest.so); then
1114 cat > conftest.c <<EOF
1115 extern int bar;
1116 int main (void) { return bar; }
83569fb8 1117EOF
2a723ff6
JM
1118 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles conftest.c -o conftest conftest.so); then
1119 libc_cv_protected_data=yes
83569fb8 1120 fi
2a723ff6
JM
1121 fi
1122 rm -f conftest.*
1123 ])
83569fb8
L
1124AC_SUBST(libc_cv_protected_data)
1125
a0da5fe1
UD
1126AC_CACHE_CHECK(for broken __attribute__((alias())),
1127 libc_cv_broken_alias_attribute,
1128 [cat > conftest.c <<EOF
1129 extern int foo (int x) __asm ("xyzzy");
1130 int bar (int x) { return x; }
1131 extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1132 extern int dfoo;
1133 extern __typeof (dfoo) dfoo __asm ("abccb");
1134 int dfoo = 1;
37ba7d66 1135EOF
a0da5fe1
UD
1136 libc_cv_broken_alias_attribute=yes
1137 if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1138 if grep 'xyzzy' conftest.s >/dev/null &&
1139 grep 'abccb' conftest.s >/dev/null; then
1140 libc_cv_broken_alias_attribute=no
1141 fi
1142 fi
1143 rm -f conftest.c conftest.s
1144 ])
1145if test $libc_cv_broken_alias_attribute = yes; then
1146 AC_MSG_ERROR(working alias attribute support required)
1147fi
1148
2a723ff6
JM
1149AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1150 libc_cv_have_sdata_section,
1151 [echo "int i;" > conftest.c
1152 libc_cv_have_sdata_section=no
1153 if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1154 | grep '\.sdata' >/dev/null; then
1155 libc_cv_have_sdata_section=yes
1156 fi
1157 rm -f conftest.c conftest.so
1158 ])
1159if test $libc_cv_have_sdata_section = yes; then
1160 AC_DEFINE(HAVE_SDATA_SECTION)
a0da5fe1 1161fi
0d01dace 1162
a0da5fe1
UD
1163AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
1164 libc_cv_ctors_header, [dnl
1165 libc_cv_ctors_header=yes
07037eeb
JM
1166 LIBC_TRY_LINK_STATIC([
1167__attribute__ ((constructor)) void ctor (void) { asm (""); }
1168__attribute__ ((destructor)) void dtor (void) { asm (""); }
113ddea4 1169],
a0da5fe1 1170 [dnl
113ddea4 1171 AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
92963737 1172 { gsub(/\@<:@ */, "@<:@") }
113ddea4
RM
1173 $2 == ".ctors" || $2 == ".dtors" {
1174 size = strtonum("0x" $6)
1175 align = strtonum("0x" $NF)
1176 seen@<:@$2@:>@ = 1
1177 stub@<:@$2@:>@ = size == align * 2
92963737 1178 }
113ddea4
RM
1179 END {
1180 ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1181 dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1182 exit ((ctors_ok && dtors_ok) ? 0 : 1)
1183 }
1184 '], [libc_cv_ctors_header=no])
1185 ], [dnl
1186 AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1187 ])
a0da5fe1
UD
1188])
1189if test $libc_cv_ctors_header = no; then
1190 AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1191fi
5241882c 1192
a0da5fe1
UD
1193AC_CACHE_CHECK(for libunwind-support in compiler,
1194 libc_cv_cc_with_libunwind, [
1195 cat > conftest.c <<EOF
cbdb12de
UD
1196int main (void) { return 0; }
1197EOF
a0da5fe1 1198 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
8175a253 1199 conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
a0da5fe1
UD
1200 libc_cv_cc_with_libunwind=yes
1201 else
1202 libc_cv_cc_with_libunwind=no
c776b3d7 1203 fi
a0da5fe1
UD
1204 rm -f conftest*])
1205AC_SUBST(libc_cv_cc_with_libunwind)
1206if test $libc_cv_cc_with_libunwind = yes; then
1207 AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1208fi
c776b3d7 1209
a0da5fe1
UD
1210ASFLAGS_config=
1211AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1212 libc_cv_as_noexecstack, [dnl
1213cat > conftest.c <<EOF
35915ec8
UD
1214void foo (void) { }
1215EOF
a0da5fe1
UD
1216if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1217 -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
8175a253 1218 && grep .note.GNU-stack conftest.s >/dev/null \
a0da5fe1
UD
1219 && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1220 -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1221then
1222 libc_cv_as_noexecstack=yes
1223else
1224 libc_cv_as_noexecstack=no
1225fi
1226rm -f conftest*])
1227if test $libc_cv_as_noexecstack = yes; then
1228 ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1229fi
1230AC_SUBST(ASFLAGS_config)
2abf9ff1 1231
a0da5fe1
UD
1232AC_CACHE_CHECK(for -z combreloc,
1233 libc_cv_z_combreloc, [dnl
1234cat > conftest.c <<EOF
d555194c
UD
1235extern int bar (int);
1236extern int mumble;
1237int foo (void) { return bar (mumble); }
a711b01d 1238EOF
a0da5fe1 1239if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
dbc92dc6 1240 -fPIC -shared -o conftest.so conftest.c
35cd3c97 1241 -nostdlib -nostartfiles
c2f55635 1242 -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
a0da5fe1 1243then
a711b01d
UD
1244dnl The following test is a bit weak. We must use a tool which can test
1245dnl cross-platform since the gcc used can be a cross compiler. Without
1246dnl introducing new options this is not easily doable. Instead use a tool
1247dnl which always is cross-platform: readelf. To detect whether -z combreloc
1248dnl look for a section named .rel.dyn.
a0da5fe1
UD
1249 if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
1250 libc_cv_z_combreloc=yes
fdde8349
UD
1251 else
1252 libc_cv_z_combreloc=no
a711b01d 1253 fi
a0da5fe1
UD
1254else
1255 libc_cv_z_combreloc=no
1256fi
1257rm -f conftest*])
1258if test "$libc_cv_z_combreloc" = yes; then
1259 AC_DEFINE(HAVE_Z_COMBRELOC)
1260fi
1261AC_SUBST(libc_cv_z_combreloc)
2abf9ff1 1262
6bfea974
L
1263LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
1264 [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
a0da5fe1 1265AC_SUBST(libc_cv_z_execstack)
c9c60884 1266
a0da5fe1 1267AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
4da0431d
JM
1268LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1269])
c9c60884 1270
a0da5fe1 1271AC_SUBST(libc_cv_fpie)
871b9158 1272
a0da5fe1
UD
1273AC_CACHE_CHECK(for --hash-style option,
1274 libc_cv_hashstyle, [dnl
1275cat > conftest.c <<EOF
871b9158
UD
1276int _start (void) { return 42; }
1277EOF
a0da5fe1
UD
1278if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1279 -fPIC -shared -o conftest.so conftest.c
1280 -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1281then
1282 libc_cv_hashstyle=yes
1283else
1284 libc_cv_hashstyle=no
1285fi
1286rm -f conftest*])
1287AC_SUBST(libc_cv_hashstyle)
1288
1289# The linker's default -shared behavior is good enough if it
1290# does these things that our custom linker scripts ensure that
1291# all allocated NOTE sections come first.
1292if test "$use_default_link" = default; then
1293 AC_CACHE_CHECK([for sufficient default -shared layout],
1294 libc_cv_use_default_link, [dnl
1295 libc_cv_use_default_link=no
1296 cat > conftest.s <<\EOF
fd5e21c7
RM
1297 .section .note.a,"a",%note
1298 .balign 4
1299 .long 4,4,9
1300 .string "GNU"
1301 .string "foo"
1302 .section .note.b,"a",%note
1303 .balign 4
1304 .long 4,4,9
1305 .string "GNU"
1306 .string "bar"
1307EOF
a0da5fe1 1308 if AC_TRY_COMMAND([dnl
fd5e21c7
RM
1309 ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1310 ac_try=`$READELF -S conftest.so | sed -n \
1311 ['${x;p;}
1312 s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/
1313 t a
1314 b
1315 : a
1316 H']`
a0da5fe1
UD
1317 then
1318 libc_seen_a=no libc_seen_b=no
1319 set -- $ac_try
1320 while test $# -ge 2 -a "$1" = NOTE; do
1321 case "$2" in
1322 .note.a) libc_seen_a=yes ;;
1323 .note.b) libc_seen_b=yes ;;
1324 esac
1325 shift 2
1326 done
1327 case "$libc_seen_a$libc_seen_b" in
1328 yesyes)
1329 libc_cv_use_default_link=yes
1330 ;;
1331 *)
1332 echo >&AS_MESSAGE_LOG_FD "\
fd5e21c7
RM
1333$libc_seen_a$libc_seen_b from:
1334$ac_try"
a0da5fe1
UD
1335 ;;
1336 esac
fd5e21c7 1337 fi
a0da5fe1
UD
1338 rm -f conftest*])
1339 use_default_link=$libc_cv_use_default_link
fd26970f 1340fi
49803108 1341
89569c8b
L
1342AC_CACHE_CHECK(for GLOB_DAT reloc,
1343 libc_cv_has_glob_dat, [dnl
1344cat > conftest.c <<EOF
1345extern int mumble;
1346int foo (void) { return mumble; }
1347EOF
1348if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1349 -fPIC -shared -o conftest.so conftest.c
1350 -nostdlib -nostartfiles
1351 1>&AS_MESSAGE_LOG_FD])
1352then
1353dnl look for GLOB_DAT relocation.
1354 if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then
1355 libc_cv_has_glob_dat=yes
1356 else
1357 libc_cv_has_glob_dat=no
1358 fi
1359else
1360 libc_cv_has_glob_dat=no
1361fi
1362rm -f conftest*])
1363AC_SUBST(libc_cv_has_glob_dat)
1364
5c550700
RM
1365AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
1366if libc_cv_output_format=`
1367${CC-cc} -nostartfiles -nostdlib -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
1368then
1369 :
1370else
1371 libc_cv_output_format=
1372fi
1373test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1374AC_SUBST(libc_cv_output_format)
1375
22dca1ea 1376AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
49803108
AJ
1377cat > conftest.c <<EOF
1378int foo;
1379EOF
22dca1ea 1380if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
49803108
AJ
1381 conftest.c 1>&AS_MESSAGE_LOG_FD])
1382then
18e2ac6d 1383 libc_cv_fno_toplevel_reorder=yes
49803108 1384else
18e2ac6d 1385 libc_cv_fno_toplevel_reorder=no
49803108
AJ
1386fi
1387rm -f conftest*])
18e2ac6d 1388if test $libc_cv_fno_toplevel_reorder = yes; then
22dca1ea 1389 fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
18e2ac6d 1390else
49803108
AJ
1391 fno_unit_at_a_time=-fno-unit-at-a-time
1392fi
1393AC_SUBST(fno_unit_at_a_time)
fd26970f 1394
401a9ec9 1395AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
17228132
TS
1396LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
1397 [libc_cv_ssp=yes],
1398 [libc_cv_ssp=no])
1399])
6ab674eb
MF
1400
1401AC_CACHE_CHECK(for -fstack-protector-strong, libc_cv_ssp_strong, [dnl
1402LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-strong],
1403 [libc_cv_ssp_strong=yes],
1404 [libc_cv_ssp_strong=no])
1405])
1406
1407stack_protector=
1408if test "$libc_cv_ssp_strong" = "yes"; then
1409 stack_protector="-fstack-protector-strong"
1410elif test "$libc_cv_ssp" = "yes"; then
1411 stack_protector="-fstack-protector"
1412fi
1413AC_SUBST(stack_protector)
401a9ec9 1414
a0da5fe1
UD
1415AC_CACHE_CHECK(whether cc puts quotes around section names,
1416 libc_cv_have_section_quotes,
1417 [cat > conftest.c <<EOF
1418 static const int foo
1419 __attribute__ ((section ("bar"))) = 1;
e26dd47f 1420EOF
a0da5fe1
UD
1421 if ${CC-cc} -S conftest.c -o conftest.s; then
1422 if grep '\.section.*"bar"' conftest.s >/dev/null; then
1423 libc_cv_have_section_quotes=yes
e26dd47f 1424 else
a0da5fe1 1425 libc_cv_have_section_quotes=no
e26dd47f 1426 fi
a0da5fe1
UD
1427 else
1428 libc_cv_have_section_quotes=unknown
1429 fi
1430 rm -f conftest.{c,s}
1431 ])
1432if test $libc_cv_have_section_quotes = yes; then
1433 AC_DEFINE(HAVE_SECTION_QUOTES)
9a97d1f7
UD
1434fi
1435
d555194c
UD
1436AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1437cat > conftest.c <<\EOF
1438void zero (void *x)
1439{
a52d1562 1440 __builtin_memset (x, 0, 1000);
d555194c
UD
1441}
1442EOF
1443dnl
1444if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | fgrep "memset" > /dev/null]);
1445then
1446 libc_cv_gcc_builtin_memset=no
1447else
1448 libc_cv_gcc_builtin_memset=yes
1449fi
1450rm -f conftest* ])
1451if test "$libc_cv_gcc_builtin_memset" = yes ; then
1452 AC_DEFINE(HAVE_BUILTIN_MEMSET)
1453fi
1454
85dd1003
UD
1455AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1456cat > conftest.c <<\EOF
1457extern char *strstr (const char *, const char *) __asm ("my_strstr");
1458char *foo (const char *a, const char *b)
1459{
1460 return __builtin_strstr (a, b);
1461}
1462EOF
1463dnl
1464if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | fgrep "my_strstr" > /dev/null]);
1465then
1466 libc_cv_gcc_builtin_redirection=yes
1467else
1468 libc_cv_gcc_builtin_redirection=no
1469fi
1470rm -f conftest* ])
3ce1f295
UD
1471if test "$libc_cv_gcc_builtin_redirection" = no; then
1472 AC_MSG_ERROR([support for the symbol redirection needed])
85dd1003
UD
1473fi
1474
7998fa78
AS
1475dnl Determine how to disable generation of FMA instructions.
1476AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1477 libc_cv_cc_nofma, [dnl
1478libc_cv_cc_nofma=
1479for opt in -ffp-contract=off -mno-fused-madd; do
1480 LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1481done])
bef0b507 1482AC_SUBST(libc_cv_cc_nofma)
7998fa78 1483
2cf9ad57
RM
1484if test -n "$submachine"; then
1485 AC_CACHE_CHECK([for compiler option for CPU variant],
f7d82dc9 1486 libc_cv_cc_submachine, [dnl
2cf9ad57
RM
1487 libc_cv_cc_submachine=no
1488 for opt in "-march=$submachine" "-mcpu=$submachine"; do
40b601fb 1489 LIBC_TRY_CC_OPTION([$opt], [
2cf9ad57 1490 libc_cv_cc_submachine="$opt"
40b601fb 1491 break], [])
2cf9ad57
RM
1492 done])
1493 if test "x$libc_cv_cc_submachine" = xno; then
1494 AC_MSG_ERROR([${CC-cc} does not support $submachine])
1495 fi
1496fi
1497AC_SUBST(libc_cv_cc_submachine)
1498
85c2e611
AZ
1499AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
1500__attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
1501cat > conftest.c <<EOF
1502void
1503__attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1504foo (void) {}
1505EOF
1506libc_cv_cc_loop_to_function=no
1507if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1508then
1509 libc_cv_cc_loop_to_function=yes
1510fi
1511rm -f conftest*])
1512if test $libc_cv_cc_loop_to_function = yes; then
1513 AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1514fi
1515AC_SUBST(libc_cv_cc_loop_to_function)
1516
c8f3e6db
UD
1517dnl Check whether we have the gd library available.
1518AC_MSG_CHECKING(for libgd)
6dab8688
UD
1519if test "$with_gd" != "no"; then
1520 old_CFLAGS="$CFLAGS"
1521 CFLAGS="$CFLAGS $libgd_include"
1522 old_LDFLAGS="$LDFLAGS"
1523 LDFLAGS="$LDFLAGS $libgd_ldflags"
1524 old_LIBS="$LIBS"
1525 LIBS="$LIBS -lgd -lpng -lz -lm"
1526 AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
1527 CFLAGS="$old_CFLAGS"
1528 LDFLAGS="$old_LDFLAGS"
1529 LIBS="$old_LIBS"
1530else
1531 LIBGD=no
1532fi
c8f3e6db
UD
1533AC_MSG_RESULT($LIBGD)
1534AC_SUBST(LIBGD)
3d558f4e 1535
2fff3d93
UD
1536# SELinux detection
1537if test x$with_selinux = xno ; then
1538 have_selinux=no;
1539else
1540 # See if we have the SELinux library
1541 AC_CHECK_LIB(selinux, is_selinux_enabled,
1542 have_selinux=yes, have_selinux=no)
49155d51 1543 if test x$with_selinux = xyes ; then
2fff3d93 1544 if test x$have_selinux = xno ; then
0699f766 1545 AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found])
2fff3d93
UD
1546 fi
1547 fi
1548fi
1549# Check if we're building with SELinux support.
1550if test "x$have_selinux" = xyes; then
943db9eb 1551 AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
ec23b9be
UD
1552
1553 # See if we have the libaudit library
943db9eb 1554 AC_CHECK_LIB(audit, audit_log_user_avc_message,
77e8bddf 1555 have_libaudit=yes, have_libaudit=no)
ec23b9be 1556 if test "x$have_libaudit" = xyes; then
943db9eb 1557 AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
ec23b9be
UD
1558 fi
1559 AC_SUBST(have_libaudit)
1f063dca
UD
1560
1561 # See if we have the libcap library
1562 AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
1563 if test "x$have_libcap" = xyes; then
1564 AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
1565 fi
1566 AC_SUBST(have_libcap)
2fff3d93
UD
1567fi
1568AC_SUBST(have_selinux)
1569
61653dfb
RM
1570CPPUNDEFS=
1571dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
1572dnl Since we are building the implementations of the fortified functions here,
1573dnl having the macro defined interacts very badly.
1574AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
1575[AC_TRY_COMPILE([], [
1576#ifdef _FORTIFY_SOURCE
1577# error bogon
1578#endif],
1579 [libc_cv_predef_fortify_source=no],
1580 [libc_cv_predef_fortify_source=yes])])
1581if test $libc_cv_predef_fortify_source = yes; then
1582 CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
1583fi
1584AC_SUBST(CPPUNDEFS)
1585
30b99d79
RM
1586dnl Check for silly hacked compilers inserting -fstack-protector.
1587dnl This breaks badly for the early startup code we compile, since
1588dnl the compiled code can refer to a magic machine-dependent location
1589dnl for the canary value before we have sufficient setup for that to
1590dnl work. It's also questionable to build all of libc with this flag
1591dnl even when you're doing that for most applications you build, since
1592dnl libc's code is so heavily-used and performance-sensitive. If we
1593dnl ever really want to make that work, it should be enabled explicitly
1594dnl in the libc build, not inherited from implicit compiler settings.
1595AC_CACHE_CHECK([whether $CC implicitly enables -fstack-protector],
1596 libc_cv_predef_stack_protector, [
1597AC_TRY_COMPILE([extern void foobar (char *);],
1598 [char large_array[2048]; foobar (large_array);], [
1599libc_undefs=`$NM -u conftest.o |
1600 LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1601 2>&AS_MESSAGE_LOG_FD` || {
1602 AC_MSG_ERROR([confusing output from $NM -u])
1603}
1604echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
59f0c22e
JM
1605# On some architectures, there are architecture-specific undefined
1606# symbols (resolved by the linker), so filter out unknown symbols.
1607# This will fail to produce the correct result if the compiler
1608# defaults to -fstack-protector but this produces an undefined symbol
1609# other than __stack_chk_fail. However, compilers like that have not
1610# been encountered in practice.
1611libc_undefs=`echo "$libc_undefs" | egrep '^(foobar|__stack_chk_fail)$'`
30b99d79
RM
1612case "$libc_undefs" in
1613foobar) libc_cv_predef_stack_protector=no ;;
1614'__stack_chk_fail
1615foobar') libc_cv_predef_stack_protector=yes ;;
1616*) AC_MSG_ERROR([unexpected symbols in test: $libc_undefs]) ;;
1617esac],
1618 [AC_MSG_ERROR([test compilation failed])])
1619])
1620libc_extra_cflags=
1621if test $libc_cv_predef_stack_protector = yes; then
7ffa9423 1622 libc_extra_cflags="$libc_extra_cflags -fno-stack-protector"
30b99d79 1623fi
7ffa9423 1624libc_extra_cppflags=
30b99d79 1625
61b1ef6e
MF
1626# Some linkers on some architectures support __ehdr_start but with
1627# bugs. Make sure usage of it does not create relocations in the
1628# output (as the linker should resolve them all for us).
1629AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
44c4e5d5
RM
1630 libc_cv_ehdr_start, [
1631old_CFLAGS="$CFLAGS"
1632old_LDFLAGS="$LDFLAGS"
1633old_LIBS="$LIBS"
1634CFLAGS="$CFLAGS -fPIC"
1635LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared"
1636LIBS=
1637AC_LINK_IFELSE([AC_LANG_SOURCE([
61b1ef6e
MF
1638typedef struct {
1639 char foo;
1640 long val;
1641} Ehdr;
1642extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
1643long ehdr (void) { return __ehdr_start.val; }
44c4e5d5 1644])],
61b1ef6e
MF
1645 [if $READELF -r conftest | fgrep __ehdr_start >/dev/null; then
1646 libc_cv_ehdr_start=broken
1647 else
1648 libc_cv_ehdr_start=yes
1649 fi], [libc_cv_ehdr_start=no])
44c4e5d5
RM
1650CFLAGS="$old_CFLAGS"
1651LDFLAGS="$old_LDFLAGS"
1652LIBS="$old_LIBS"
1653])
61b1ef6e 1654if test "$libc_cv_ehdr_start" = yes; then
44c4e5d5 1655 AC_DEFINE([HAVE_EHDR_START])
61b1ef6e
MF
1656elif test "$libc_cv_ehdr_start" = broken; then
1657 AC_MSG_WARN([linker is broken -- you should upgrade])
9fe7e787
RM
1658fi
1659
1660AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
1661 libc_cv_builtin_trap, [dnl
1662libc_cv_builtin_trap=no
1663AC_TRY_COMPILE([], [__builtin_trap ()], [
1664libc_undefs=`$NM -u conftest.o |
1665 LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1666 2>&AS_MESSAGE_LOG_FD` || {
1667 AC_MSG_ERROR([confusing output from $NM -u])
1668}
1669echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1670if test -z "$libc_undefs"; then
1671 libc_cv_builtin_trap=yes
1672fi])])
1673if test $libc_cv_builtin_trap = yes; then
1674 AC_DEFINE([HAVE_BUILTIN_TRAP])
44c4e5d5
RM
1675fi
1676
99e1dc0a
FW
1677dnl C++ feature tests.
1678AC_LANG_PUSH([C++])
1679
1680AC_CACHE_CHECK([whether the C++ compiler supports thread_local],
1681 libc_cv_cxx_thread_local, [
1682old_CXXFLAGS="$CXXFLAGS"
1683CXXFLAGS="$CXXFLAGS -std=gnu++11"
1684AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1685#include <thread>
1686
1687// Compiler support.
1688struct S
1689{
1690 S ();
1691 ~S ();
1692};
1693thread_local S s;
1694S * get () { return &s; }
1695
1696// libstdc++ support.
1697#ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1698#error __cxa_thread_atexit_impl not supported
1699#endif
1700])],
1701 [libc_cv_cxx_thread_local=yes],
1702 [libc_cv_cxx_thread_local=no])
1703CXXFLAGS="$old_CXXFLAGS"
1704])
1705AC_SUBST(libc_cv_cxx_thread_local)
1706
1707AC_LANG_POP([C++])
1708dnl End of C++ feature tests.
1709
c224a18a
RM
1710### End of automated tests.
1711### Now run sysdeps configure fragments.
1712
cb343854 1713# They also can set these variables.
591e1ffb 1714use_ldconfig=no
cb343854 1715ldd_rewrite_script=no
77259608 1716libc_cv_sysconfdir=$sysconfdir
4248b1b1 1717libc_cv_localstatedir=$localstatedir
74bd2300 1718libc_cv_gcc_unwind_find_fde=no
e2fd3cbe 1719libc_cv_idn=no
cb343854 1720
28f540f4 1721# Iterate over all the sysdep directories we will use, running their
09055553 1722# configure fragments.
28f540f4 1723for dir in $sysnames; do
57ba7bb4
UD
1724 case $dir in
1725 /*) dest=$dir ;;
1726 *) dest=$srcdir/$dir ;;
1727 esac
1728 if test -r $dest/configure; then
d1149385 1729 AC_MSG_RESULT(running configure fragment for $dir)
57ba7bb4 1730 . $dest/configure
28f540f4 1731 fi
28f540f4
RM
1732done
1733
5695d46f
AS
1734if test x"$build_mathvec" = xnotset; then
1735 build_mathvec=no
1736fi
1737LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1738
7ffa9423
AZ
1739AC_SUBST(libc_extra_cflags)
1740AC_SUBST(libc_extra_cppflags)
1741
74bd2300
UD
1742if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1743 AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1744fi
1745AC_SUBST(libc_cv_gcc_unwind_find_fde)
1746
6e6249d0
RM
1747# A sysdeps configure fragment can reset this if IFUNC is not actually
1748# usable even though the assembler knows how to generate the symbol type.
1749if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
1750 AC_DEFINE(HAVE_IFUNC)
1751fi
1752
3cc3ef96
RM
1753# This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1754# configure fragment can override the value to prevent this AC_DEFINE.
1755AC_SUBST(use_nscd)
1756if test "x$use_nscd" != xno; then
1757 AC_DEFINE([USE_NSCD])
1758fi
c53d909c
RM
1759if test "x$build_nscd" = xdefault; then
1760 build_nscd=$use_nscd
1761fi
3cc3ef96 1762
84384f5b 1763AC_SUBST(libc_cv_slibdir)
aaa8cb4b 1764AC_SUBST(libc_cv_rtlddir)
90fe682d 1765AC_SUBST(libc_cv_complocaledir)
77259608 1766AC_SUBST(libc_cv_sysconfdir)
4248b1b1 1767AC_SUBST(libc_cv_localstatedir)
1ef32c3d
UD
1768AC_SUBST(libc_cv_rootsbindir)
1769
f57f8055
RM
1770if test x$use_ldconfig = xyes; then
1771 AC_DEFINE(USE_LDCONFIG)
1772fi
591e1ffb 1773AC_SUBST(use_ldconfig)
cb343854 1774AC_SUBST(ldd_rewrite_script)
84384f5b 1775
650425ce 1776AC_SUBST(static)
ff3d7ed3 1777AC_SUBST(shared)
a334319f 1778
ff886b82
UD
1779AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1780[libc_cv_pic_default=yes
cc3fa755 1781cat > conftest.c <<EOF
9756dfe1 1782#if defined __PIC__ || defined __pic__ || defined PIC || defined pic
cc3fa755
UD
1783# error PIC is default.
1784#endif
1785EOF
0b4ee387 1786if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
ff886b82 1787 libc_cv_pic_default=no
cc3fa755
UD
1788fi
1789rm -f conftest.*])
ff886b82 1790AC_SUBST(libc_cv_pic_default)
cc3fa755 1791
cc08749b
L
1792AC_CACHE_CHECK([whether -fPIE is default], libc_cv_pie_default,
1793[libc_cv_pie_default=yes
1794cat > conftest.c <<EOF
1795#if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1796# error PIE is default.
1797#endif
1798EOF
1799if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1800 libc_cv_pie_default=no
1801fi
1802rm -f conftest.*])
1803AC_SUBST(libc_cv_pie_default)
1804
ff3d7ed3 1805AC_SUBST(profile)
5107cf1d 1806AC_SUBST(static_nss)
ff3d7ed3 1807
edf5b2d7
UD
1808AC_SUBST(DEFINES)
1809
cb8a6dbd 1810dnl See sysdeps/mach/configure.ac for this variable.
61c83c3f
RM
1811AC_SUBST(mach_interface_list)
1812
ee74a442
UD
1813VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1814RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
df4ef2ab 1815AC_SUBST(VERSION)
ee74a442 1816AC_SUBST(RELEASE)
df4ef2ab 1817
728e272a 1818AC_CONFIG_FILES([config.make Makefile])
c118d634 1819AC_CONFIG_COMMANDS([default],[[
737547be
UD
1820case $CONFIG_FILES in *config.make*)
1821echo "$config_vars" >> config.make;;
1822esac
c118d634
RM
1823test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1824AC_OUTPUT