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