]> git.ipfire.org Git - thirdparty/glibc.git/blame - configure.ac
Run vismain only if linker supports protected data symbol
[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
a0da5fe1
UD
1301AC_CACHE_CHECK(for broken __attribute__((alias())),
1302 libc_cv_broken_alias_attribute,
1303 [cat > conftest.c <<EOF
1304 extern int foo (int x) __asm ("xyzzy");
1305 int bar (int x) { return x; }
1306 extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1307 extern int dfoo;
1308 extern __typeof (dfoo) dfoo __asm ("abccb");
1309 int dfoo = 1;
37ba7d66 1310EOF
a0da5fe1
UD
1311 libc_cv_broken_alias_attribute=yes
1312 if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1313 if grep 'xyzzy' conftest.s >/dev/null &&
1314 grep 'abccb' conftest.s >/dev/null; then
1315 libc_cv_broken_alias_attribute=no
1316 fi
1317 fi
1318 rm -f conftest.c conftest.s
1319 ])
1320if test $libc_cv_broken_alias_attribute = yes; then
1321 AC_MSG_ERROR(working alias attribute support required)
1322fi
1323
2a723ff6
JM
1324AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1325 libc_cv_have_sdata_section,
1326 [echo "int i;" > conftest.c
1327 libc_cv_have_sdata_section=no
1328 if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1329 | grep '\.sdata' >/dev/null; then
1330 libc_cv_have_sdata_section=yes
1331 fi
1332 rm -f conftest.c conftest.so
1333 ])
1334if test $libc_cv_have_sdata_section = yes; then
1335 AC_DEFINE(HAVE_SDATA_SECTION)
a0da5fe1 1336fi
0d01dace 1337
a0da5fe1
UD
1338AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
1339 libc_cv_ctors_header, [dnl
1340 libc_cv_ctors_header=yes
07037eeb
JM
1341 LIBC_TRY_LINK_STATIC([
1342__attribute__ ((constructor)) void ctor (void) { asm (""); }
1343__attribute__ ((destructor)) void dtor (void) { asm (""); }
113ddea4 1344],
a0da5fe1 1345 [dnl
113ddea4 1346 AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
92963737 1347 { gsub(/\@<:@ */, "@<:@") }
113ddea4
RM
1348 $2 == ".ctors" || $2 == ".dtors" {
1349 size = strtonum("0x" $6)
1350 align = strtonum("0x" $NF)
1351 seen@<:@$2@:>@ = 1
1352 stub@<:@$2@:>@ = size == align * 2
92963737 1353 }
113ddea4
RM
1354 END {
1355 ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1356 dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1357 exit ((ctors_ok && dtors_ok) ? 0 : 1)
1358 }
1359 '], [libc_cv_ctors_header=no])
1360 ], [dnl
1361 AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1362 ])
a0da5fe1
UD
1363])
1364if test $libc_cv_ctors_header = no; then
1365 AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1366fi
5241882c 1367
a0da5fe1
UD
1368AC_CACHE_CHECK(for libunwind-support in compiler,
1369 libc_cv_cc_with_libunwind, [
1370 cat > conftest.c <<EOF
cbdb12de
UD
1371int main (void) { return 0; }
1372EOF
a0da5fe1 1373 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
8175a253 1374 conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
a0da5fe1
UD
1375 libc_cv_cc_with_libunwind=yes
1376 else
1377 libc_cv_cc_with_libunwind=no
c776b3d7 1378 fi
a0da5fe1
UD
1379 rm -f conftest*])
1380AC_SUBST(libc_cv_cc_with_libunwind)
1381if test $libc_cv_cc_with_libunwind = yes; then
1382 AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1383fi
c776b3d7 1384
a0da5fe1
UD
1385ASFLAGS_config=
1386AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1387 libc_cv_as_noexecstack, [dnl
1388cat > conftest.c <<EOF
35915ec8
UD
1389void foo (void) { }
1390EOF
a0da5fe1
UD
1391if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1392 -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
8175a253 1393 && grep .note.GNU-stack conftest.s >/dev/null \
a0da5fe1
UD
1394 && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1395 -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1396then
1397 libc_cv_as_noexecstack=yes
1398else
1399 libc_cv_as_noexecstack=no
1400fi
1401rm -f conftest*])
1402if test $libc_cv_as_noexecstack = yes; then
1403 ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1404fi
1405AC_SUBST(ASFLAGS_config)
2abf9ff1 1406
a0da5fe1
UD
1407AC_CACHE_CHECK(for -z combreloc,
1408 libc_cv_z_combreloc, [dnl
1409cat > conftest.c <<EOF
d555194c
UD
1410extern int bar (int);
1411extern int mumble;
1412int foo (void) { return bar (mumble); }
a711b01d 1413EOF
a0da5fe1 1414if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
66a704c4 1415 -fPIC -shared $no_ssp -o conftest.so conftest.c
35cd3c97 1416 -nostdlib -nostartfiles
c2f55635 1417 -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
a0da5fe1 1418then
a711b01d
UD
1419dnl The following test is a bit weak. We must use a tool which can test
1420dnl cross-platform since the gcc used can be a cross compiler. Without
1421dnl introducing new options this is not easily doable. Instead use a tool
1422dnl which always is cross-platform: readelf. To detect whether -z combreloc
e37fc4aa
AN
1423dnl look for a section named .rel.dyn or .rela.dyn.
1424 if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then
a0da5fe1 1425 libc_cv_z_combreloc=yes
fdde8349
UD
1426 else
1427 libc_cv_z_combreloc=no
a711b01d 1428 fi
a0da5fe1
UD
1429else
1430 libc_cv_z_combreloc=no
1431fi
1432rm -f conftest*])
1433if test "$libc_cv_z_combreloc" = yes; then
1434 AC_DEFINE(HAVE_Z_COMBRELOC)
1435fi
1436AC_SUBST(libc_cv_z_combreloc)
2abf9ff1 1437
6bfea974
L
1438LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
1439 [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
a0da5fe1 1440AC_SUBST(libc_cv_z_execstack)
c9c60884 1441
a0da5fe1 1442AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
4da0431d
JM
1443LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1444])
c9c60884 1445
a0da5fe1 1446AC_SUBST(libc_cv_fpie)
871b9158 1447
a0da5fe1
UD
1448AC_CACHE_CHECK(for --hash-style option,
1449 libc_cv_hashstyle, [dnl
1450cat > conftest.c <<EOF
871b9158
UD
1451int _start (void) { return 42; }
1452EOF
66a704c4 1453if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
a0da5fe1
UD
1454 -fPIC -shared -o conftest.so conftest.c
1455 -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1456then
1457 libc_cv_hashstyle=yes
1458else
1459 libc_cv_hashstyle=no
1460fi
1461rm -f conftest*])
1462AC_SUBST(libc_cv_hashstyle)
1463
1464# The linker's default -shared behavior is good enough if it
1465# does these things that our custom linker scripts ensure that
1466# all allocated NOTE sections come first.
1467if test "$use_default_link" = default; then
1468 AC_CACHE_CHECK([for sufficient default -shared layout],
1469 libc_cv_use_default_link, [dnl
1470 libc_cv_use_default_link=no
1471 cat > conftest.s <<\EOF
fd5e21c7
RM
1472 .section .note.a,"a",%note
1473 .balign 4
1474 .long 4,4,9
1475 .string "GNU"
1476 .string "foo"
1477 .section .note.b,"a",%note
1478 .balign 4
1479 .long 4,4,9
1480 .string "GNU"
1481 .string "bar"
1482EOF
a0da5fe1 1483 if AC_TRY_COMMAND([dnl
fd5e21c7
RM
1484 ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1485 ac_try=`$READELF -S conftest.so | sed -n \
1486 ['${x;p;}
1487 s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/
1488 t a
1489 b
1490 : a
1491 H']`
a0da5fe1
UD
1492 then
1493 libc_seen_a=no libc_seen_b=no
1494 set -- $ac_try
1495 while test $# -ge 2 -a "$1" = NOTE; do
1496 case "$2" in
1497 .note.a) libc_seen_a=yes ;;
1498 .note.b) libc_seen_b=yes ;;
1499 esac
1500 shift 2
1501 done
1502 case "$libc_seen_a$libc_seen_b" in
1503 yesyes)
1504 libc_cv_use_default_link=yes
1505 ;;
1506 *)
1507 echo >&AS_MESSAGE_LOG_FD "\
fd5e21c7
RM
1508$libc_seen_a$libc_seen_b from:
1509$ac_try"
a0da5fe1
UD
1510 ;;
1511 esac
fd5e21c7 1512 fi
a0da5fe1
UD
1513 rm -f conftest*])
1514 use_default_link=$libc_cv_use_default_link
fd26970f 1515fi
49803108 1516
89569c8b
L
1517AC_CACHE_CHECK(for GLOB_DAT reloc,
1518 libc_cv_has_glob_dat, [dnl
1519cat > conftest.c <<EOF
1520extern int mumble;
1521int foo (void) { return mumble; }
1522EOF
1523if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1524 -fPIC -shared -o conftest.so conftest.c
66a704c4 1525 -nostdlib -nostartfiles $no_ssp
89569c8b
L
1526 1>&AS_MESSAGE_LOG_FD])
1527then
1528dnl look for GLOB_DAT relocation.
1529 if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then
1530 libc_cv_has_glob_dat=yes
1531 else
1532 libc_cv_has_glob_dat=no
1533 fi
1534else
1535 libc_cv_has_glob_dat=no
1536fi
1537rm -f conftest*])
1538AC_SUBST(libc_cv_has_glob_dat)
1539
5c550700
RM
1540AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
1541if libc_cv_output_format=`
66a704c4 1542${CC-cc} -nostartfiles -nostdlib $no_ssp -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
5c550700
RM
1543then
1544 :
1545else
1546 libc_cv_output_format=
1547fi
1548test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1549AC_SUBST(libc_cv_output_format)
1550
22dca1ea 1551AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
49803108
AJ
1552cat > conftest.c <<EOF
1553int foo;
1554EOF
22dca1ea 1555if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
49803108
AJ
1556 conftest.c 1>&AS_MESSAGE_LOG_FD])
1557then
18e2ac6d 1558 libc_cv_fno_toplevel_reorder=yes
49803108 1559else
18e2ac6d 1560 libc_cv_fno_toplevel_reorder=no
49803108
AJ
1561fi
1562rm -f conftest*])
18e2ac6d 1563if test $libc_cv_fno_toplevel_reorder = yes; then
22dca1ea 1564 fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
18e2ac6d 1565else
49803108
AJ
1566 fno_unit_at_a_time=-fno-unit-at-a-time
1567fi
1568AC_SUBST(fno_unit_at_a_time)
fd26970f 1569
61655555
L
1570AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
1571[dnl
1572cat > conftest.c <<EOF
1573__thread int i;
1574void foo (void)
1575{
1576 i = 10;
1577}
1578EOF
1579if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
1580 conftest.c 1>&AS_MESSAGE_LOG_FD])
1581then
1582 libc_cv_mtls_dialect_gnu2=yes
1583else
1584 libc_cv_mtls_dialect_gnu2=no
1585fi
1586rm -f conftest*])
1587AC_SUBST(libc_cv_mtls_dialect_gnu2)
1588LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
1589
a0da5fe1
UD
1590AC_CACHE_CHECK(whether cc puts quotes around section names,
1591 libc_cv_have_section_quotes,
1592 [cat > conftest.c <<EOF
1593 static const int foo
1594 __attribute__ ((section ("bar"))) = 1;
e26dd47f 1595EOF
a0da5fe1
UD
1596 if ${CC-cc} -S conftest.c -o conftest.s; then
1597 if grep '\.section.*"bar"' conftest.s >/dev/null; then
1598 libc_cv_have_section_quotes=yes
e26dd47f 1599 else
a0da5fe1 1600 libc_cv_have_section_quotes=no
e26dd47f 1601 fi
a0da5fe1
UD
1602 else
1603 libc_cv_have_section_quotes=unknown
1604 fi
1605 rm -f conftest.{c,s}
1606 ])
1607if test $libc_cv_have_section_quotes = yes; then
1608 AC_DEFINE(HAVE_SECTION_QUOTES)
9a97d1f7
UD
1609fi
1610
d555194c
UD
1611AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1612cat > conftest.c <<\EOF
1613void zero (void *x)
1614{
a52d1562 1615 __builtin_memset (x, 0, 1000);
d555194c
UD
1616}
1617EOF
1618dnl
e37fc4aa 1619if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "memset" > /dev/null]);
d555194c
UD
1620then
1621 libc_cv_gcc_builtin_memset=no
1622else
1623 libc_cv_gcc_builtin_memset=yes
1624fi
1625rm -f conftest* ])
1626if test "$libc_cv_gcc_builtin_memset" = yes ; then
1627 AC_DEFINE(HAVE_BUILTIN_MEMSET)
1628fi
1629
85dd1003
UD
1630AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1631cat > conftest.c <<\EOF
1632extern char *strstr (const char *, const char *) __asm ("my_strstr");
1633char *foo (const char *a, const char *b)
1634{
1635 return __builtin_strstr (a, b);
1636}
1637EOF
1638dnl
e37fc4aa 1639if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "my_strstr" > /dev/null]);
85dd1003
UD
1640then
1641 libc_cv_gcc_builtin_redirection=yes
1642else
1643 libc_cv_gcc_builtin_redirection=no
1644fi
1645rm -f conftest* ])
3ce1f295
UD
1646if test "$libc_cv_gcc_builtin_redirection" = no; then
1647 AC_MSG_ERROR([support for the symbol redirection needed])
85dd1003
UD
1648fi
1649
7998fa78
AS
1650dnl Determine how to disable generation of FMA instructions.
1651AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1652 libc_cv_cc_nofma, [dnl
1653libc_cv_cc_nofma=
1654for opt in -ffp-contract=off -mno-fused-madd; do
1655 LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1656done])
bef0b507 1657AC_SUBST(libc_cv_cc_nofma)
7998fa78 1658
2cf9ad57
RM
1659if test -n "$submachine"; then
1660 AC_CACHE_CHECK([for compiler option for CPU variant],
f7d82dc9 1661 libc_cv_cc_submachine, [dnl
2cf9ad57
RM
1662 libc_cv_cc_submachine=no
1663 for opt in "-march=$submachine" "-mcpu=$submachine"; do
40b601fb 1664 LIBC_TRY_CC_OPTION([$opt], [
2cf9ad57 1665 libc_cv_cc_submachine="$opt"
40b601fb 1666 break], [])
2cf9ad57
RM
1667 done])
1668 if test "x$libc_cv_cc_submachine" = xno; then
1669 AC_MSG_ERROR([${CC-cc} does not support $submachine])
1670 fi
1671fi
1672AC_SUBST(libc_cv_cc_submachine)
1673
85c2e611
AZ
1674AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
1675__attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
1676cat > conftest.c <<EOF
1677void
1678__attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1679foo (void) {}
1680EOF
1681libc_cv_cc_loop_to_function=no
1682if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1683then
1684 libc_cv_cc_loop_to_function=yes
1685fi
1686rm -f conftest*])
1687if test $libc_cv_cc_loop_to_function = yes; then
1688 AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1689fi
1690AC_SUBST(libc_cv_cc_loop_to_function)
1691
c8f3e6db
UD
1692dnl Check whether we have the gd library available.
1693AC_MSG_CHECKING(for libgd)
6dab8688
UD
1694if test "$with_gd" != "no"; then
1695 old_CFLAGS="$CFLAGS"
1696 CFLAGS="$CFLAGS $libgd_include"
1697 old_LDFLAGS="$LDFLAGS"
1698 LDFLAGS="$LDFLAGS $libgd_ldflags"
1699 old_LIBS="$LIBS"
1700 LIBS="$LIBS -lgd -lpng -lz -lm"
1701 AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
1702 CFLAGS="$old_CFLAGS"
1703 LDFLAGS="$old_LDFLAGS"
1704 LIBS="$old_LIBS"
1705else
1706 LIBGD=no
1707fi
c8f3e6db
UD
1708AC_MSG_RESULT($LIBGD)
1709AC_SUBST(LIBGD)
3d558f4e 1710
2fff3d93
UD
1711# SELinux detection
1712if test x$with_selinux = xno ; then
1713 have_selinux=no;
1714else
1715 # See if we have the SELinux library
1716 AC_CHECK_LIB(selinux, is_selinux_enabled,
1717 have_selinux=yes, have_selinux=no)
49155d51 1718 if test x$with_selinux = xyes ; then
2fff3d93 1719 if test x$have_selinux = xno ; then
0699f766 1720 AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found])
2fff3d93
UD
1721 fi
1722 fi
1723fi
1724# Check if we're building with SELinux support.
1725if test "x$have_selinux" = xyes; then
943db9eb 1726 AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
ec23b9be
UD
1727
1728 # See if we have the libaudit library
943db9eb 1729 AC_CHECK_LIB(audit, audit_log_user_avc_message,
77e8bddf 1730 have_libaudit=yes, have_libaudit=no)
ec23b9be 1731 if test "x$have_libaudit" = xyes; then
943db9eb 1732 AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
ec23b9be
UD
1733 fi
1734 AC_SUBST(have_libaudit)
1f063dca
UD
1735
1736 # See if we have the libcap library
1737 AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
1738 if test "x$have_libcap" = xyes; then
1739 AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
1740 fi
1741 AC_SUBST(have_libcap)
2fff3d93
UD
1742fi
1743AC_SUBST(have_selinux)
1744
61653dfb
RM
1745CPPUNDEFS=
1746dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
1747dnl Since we are building the implementations of the fortified functions here,
1748dnl having the macro defined interacts very badly.
1749AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
1750[AC_TRY_COMPILE([], [
1751#ifdef _FORTIFY_SOURCE
1752# error bogon
1753#endif],
1754 [libc_cv_predef_fortify_source=no],
1755 [libc_cv_predef_fortify_source=yes])])
1756if test $libc_cv_predef_fortify_source = yes; then
1757 CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
1758fi
1759AC_SUBST(CPPUNDEFS)
1760
61b1ef6e
MF
1761# Some linkers on some architectures support __ehdr_start but with
1762# bugs. Make sure usage of it does not create relocations in the
1763# output (as the linker should resolve them all for us).
1764AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
44c4e5d5
RM
1765 libc_cv_ehdr_start, [
1766old_CFLAGS="$CFLAGS"
1767old_LDFLAGS="$LDFLAGS"
1768old_LIBS="$LIBS"
1769CFLAGS="$CFLAGS -fPIC"
66a704c4 1770LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp"
44c4e5d5
RM
1771LIBS=
1772AC_LINK_IFELSE([AC_LANG_SOURCE([
61b1ef6e
MF
1773typedef struct {
1774 char foo;
1775 long val;
1776} Ehdr;
1777extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
1778long ehdr (void) { return __ehdr_start.val; }
44c4e5d5 1779])],
e37fc4aa 1780 [if $READELF -r conftest | grep -F __ehdr_start >/dev/null; then
61b1ef6e
MF
1781 libc_cv_ehdr_start=broken
1782 else
1783 libc_cv_ehdr_start=yes
1784 fi], [libc_cv_ehdr_start=no])
44c4e5d5
RM
1785CFLAGS="$old_CFLAGS"
1786LDFLAGS="$old_LDFLAGS"
1787LIBS="$old_LIBS"
1788])
61b1ef6e 1789if test "$libc_cv_ehdr_start" = yes; then
44c4e5d5 1790 AC_DEFINE([HAVE_EHDR_START])
61b1ef6e
MF
1791elif test "$libc_cv_ehdr_start" = broken; then
1792 AC_MSG_WARN([linker is broken -- you should upgrade])
9fe7e787
RM
1793fi
1794
1795AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
1796 libc_cv_builtin_trap, [dnl
1797libc_cv_builtin_trap=no
1798AC_TRY_COMPILE([], [__builtin_trap ()], [
1799libc_undefs=`$NM -u conftest.o |
1800 LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1801 2>&AS_MESSAGE_LOG_FD` || {
1802 AC_MSG_ERROR([confusing output from $NM -u])
1803}
1804echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1805if test -z "$libc_undefs"; then
1806 libc_cv_builtin_trap=yes
1807fi])])
1808if test $libc_cv_builtin_trap = yes; then
1809 AC_DEFINE([HAVE_BUILTIN_TRAP])
44c4e5d5
RM
1810fi
1811
99e1dc0a
FW
1812dnl C++ feature tests.
1813AC_LANG_PUSH([C++])
1814
1815AC_CACHE_CHECK([whether the C++ compiler supports thread_local],
1816 libc_cv_cxx_thread_local, [
1817old_CXXFLAGS="$CXXFLAGS"
1818CXXFLAGS="$CXXFLAGS -std=gnu++11"
1819AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1820#include <thread>
1821
1822// Compiler support.
1823struct S
1824{
1825 S ();
1826 ~S ();
1827};
1828thread_local S s;
1829S * get () { return &s; }
1830
1831// libstdc++ support.
1832#ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1833#error __cxa_thread_atexit_impl not supported
1834#endif
1835])],
1836 [libc_cv_cxx_thread_local=yes],
1837 [libc_cv_cxx_thread_local=no])
1838CXXFLAGS="$old_CXXFLAGS"
1839])
1840AC_SUBST(libc_cv_cxx_thread_local)
1841
1842AC_LANG_POP([C++])
1843dnl End of C++ feature tests.
1844
c224a18a
RM
1845### End of automated tests.
1846### Now run sysdeps configure fragments.
1847
cb343854 1848# They also can set these variables.
591e1ffb 1849use_ldconfig=no
cb343854 1850ldd_rewrite_script=no
77259608 1851libc_cv_sysconfdir=$sysconfdir
4248b1b1 1852libc_cv_localstatedir=$localstatedir
74bd2300 1853libc_cv_gcc_unwind_find_fde=no
e2fd3cbe 1854libc_cv_idn=no
cb343854 1855
28f540f4 1856# Iterate over all the sysdep directories we will use, running their
09055553 1857# configure fragments.
28f540f4 1858for dir in $sysnames; do
57ba7bb4
UD
1859 case $dir in
1860 /*) dest=$dir ;;
1861 *) dest=$srcdir/$dir ;;
1862 esac
1863 if test -r $dest/configure; then
d1149385 1864 AC_MSG_RESULT(running configure fragment for $dir)
57ba7bb4 1865 . $dest/configure
28f540f4 1866 fi
28f540f4
RM
1867done
1868
5695d46f
AS
1869if test x"$build_mathvec" = xnotset; then
1870 build_mathvec=no
1871fi
1872LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1873
7ffa9423
AZ
1874AC_SUBST(libc_extra_cflags)
1875AC_SUBST(libc_extra_cppflags)
1876
74bd2300
UD
1877if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1878 AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1879fi
1880AC_SUBST(libc_cv_gcc_unwind_find_fde)
1881
6e6249d0
RM
1882# A sysdeps configure fragment can reset this if IFUNC is not actually
1883# usable even though the assembler knows how to generate the symbol type.
1884if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
1885 AC_DEFINE(HAVE_IFUNC)
1886fi
1887
022dfdce
SL
1888if test x"$libc_cv_gcc_indirect_function" = xyes; then
1889 AC_DEFINE(HAVE_GCC_IFUNC)
1890fi
1891
3cc3ef96
RM
1892# This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1893# configure fragment can override the value to prevent this AC_DEFINE.
1894AC_SUBST(use_nscd)
1895if test "x$use_nscd" != xno; then
1896 AC_DEFINE([USE_NSCD])
1897fi
c53d909c
RM
1898if test "x$build_nscd" = xdefault; then
1899 build_nscd=$use_nscd
1900fi
3cc3ef96 1901
84384f5b 1902AC_SUBST(libc_cv_slibdir)
aaa8cb4b 1903AC_SUBST(libc_cv_rtlddir)
90fe682d 1904AC_SUBST(libc_cv_complocaledir)
77259608 1905AC_SUBST(libc_cv_sysconfdir)
4248b1b1 1906AC_SUBST(libc_cv_localstatedir)
1ef32c3d
UD
1907AC_SUBST(libc_cv_rootsbindir)
1908
f57f8055
RM
1909if test x$use_ldconfig = xyes; then
1910 AC_DEFINE(USE_LDCONFIG)
1911fi
591e1ffb 1912AC_SUBST(use_ldconfig)
cb343854 1913AC_SUBST(ldd_rewrite_script)
84384f5b 1914
650425ce 1915AC_SUBST(static)
ff3d7ed3 1916AC_SUBST(shared)
a334319f 1917
ff886b82
UD
1918AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1919[libc_cv_pic_default=yes
cc3fa755 1920cat > conftest.c <<EOF
9756dfe1 1921#if defined __PIC__ || defined __pic__ || defined PIC || defined pic
cc3fa755
UD
1922# error PIC is default.
1923#endif
1924EOF
0b4ee387 1925if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
ff886b82 1926 libc_cv_pic_default=no
cc3fa755
UD
1927fi
1928rm -f conftest.*])
ff886b82 1929AC_SUBST(libc_cv_pic_default)
cc3fa755 1930
cc08749b
L
1931AC_CACHE_CHECK([whether -fPIE is default], libc_cv_pie_default,
1932[libc_cv_pie_default=yes
1933cat > conftest.c <<EOF
1934#if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1935# error PIE is default.
1936#endif
1937EOF
1938if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1939 libc_cv_pie_default=no
1940fi
1941rm -f conftest.*])
1942AC_SUBST(libc_cv_pie_default)
1943
ff3d7ed3 1944AC_SUBST(profile)
5107cf1d 1945AC_SUBST(static_nss)
ff3d7ed3 1946
edf5b2d7
UD
1947AC_SUBST(DEFINES)
1948
cb8a6dbd 1949dnl See sysdeps/mach/configure.ac for this variable.
61c83c3f
RM
1950AC_SUBST(mach_interface_list)
1951
ee74a442
UD
1952VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1953RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
df4ef2ab 1954AC_SUBST(VERSION)
ee74a442 1955AC_SUBST(RELEASE)
df4ef2ab 1956
728e272a 1957AC_CONFIG_FILES([config.make Makefile])
c118d634 1958AC_CONFIG_COMMANDS([default],[[
737547be
UD
1959case $CONFIG_FILES in *config.make*)
1960echo "$config_vars" >> config.make;;
1961esac
c118d634
RM
1962test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1963AC_OUTPUT