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