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